Ошибка в коде поливалки растений

Skalolaz
Skalolaz аватар
Offline
Зарегистрирован: 01.05.2018

Добрый день!

Ругается при компиляции, ошибка ниже. Спасибо!

Arduino: 1.8.5 (Windows 7), Плата:"Arduino Nano, ATmega328P"
 
sketch_jan06a:96: error: no matching function for call to 'LcdBarGraph::LcdBarGraph(LiquidCrystal_I2C*, byte&, int, int)'
 
 LcdBarGraph lbg(&lcd,lcdNumCols, 0, 3);
 
                                      ^
 
In file included from C:\Users\mainpc\Documents\Arduino\sketch_jan06a\sketch_jan06a.ino:13:0:
 
C:\Users\mainpc\Documents\Arduino\libraries\LcdBarGraph-master\src/LcdBarGraph.h:50:5: note: candidate: LcdBarGraph::LcdBarGraph(LiquidCrystal*, byte, byte, byte)
 
     LcdBarGraph(LiquidCrystal* lcd, byte numCols, byte startX = 0, byte startY = 0);
 
Код
/* 
   Pich Irrigation Box (c) Mikhail Pichugin   
   2016 
*/
   
#include <avr/sleep.h> 
#include <Wire.h>
#if defined(ARDUINO) && ARDUINO > 18   // Arduino 0019 or later
#include <SPI.h>
#endif
#include <Sodaq_DS3231.h>             // rep/ https://github.com/SodaqMoja/Sodaq_DS3231
#include <LiquidCrystal_I2C.h>        // https://github.com/marcmerlin/NewLiquidCrystal
#include <LcdBarGraph.h>              // rep/ https://github.com/prampec/LcdBarGraph 
#include <Streaming.h>                // http://arduiniana.org/libraries/streaming/

// -------------------------------------------------------------------------
// -- character with one bar
byte ch_level1[8] = {
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000,
    B10000
};
// -- character with two bars
byte ch_level2[8] = {
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000,
    B11000
};
// -- character with three bars
byte ch_level3[8] = {
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100,
    B11100
};
// -- character with four bars
byte ch_level4[8] = {
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110,
    B11110
};

#define I2C_ADDR    0x27 
#define BACKLIGHT_PIN     3
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7
//#define SD_pin  4

boolean last_hour_irrig = false;
boolean errorFlag = false;
boolean errorPulse = false;
boolean dispPulse = false;

byte int0Button = 0;
byte int0ButtonPin = 7;       //pin кнопки ресет
byte irrig_hours[] = {9,20};  //часы полива от xx до yy
byte lcdNumCols = 20;         //количество символов на дисплее по оси Х

int sensorPin = A0;           //pin сенсора влажности почвы
int sensorValue = 0;          //текущее значение влажности
int last_hour_sensor = 0;     //значение влажности замерянное в предыдущий раз
int moisturemin = 850;        //минимальное значение влажности при котором включается полив
int irrig_delay = 10;         //длительность полива в сек.
int pinINT0 = 2;              //pin прерывания INT0 с часов реального времени
int Relay1 = 4;

unsigned long prevMillis =0;
const long dispInterval =1000;

DateTime last_date_irrig;
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
LcdBarGraph lbg(&lcd,lcdNumCols, 0, 3);

volatile boolean alarmFlag; 
void alarm() { 
  alarmFlag = true; 
} 
// -------------------------------------------------------------------------
void setup()
{
  // Initialize common
  Serial.begin(57600);
  //while (!Serial) {
  //  ; // wait for serial port to connect. Needed for native USB port only
  //}
  Wire.begin();
  
  // Initialize Real Time Clock
  rtc.begin();
  pinMode(pinINT0, INPUT);
  last_date_irrig = rtc.now();
  //if(last_date_irrig.year() == 2000){ 
    //DateTime t(2016,2,28,11,0,0,6); 
    //rtc.setDateTime(t); 
    //Serial.println(F("-Setting date&time"));   } 
 
  // Initialize INT0 for accepting interrupts
  PORTD |= 0x04; 
  DDRD &=~ 0x04;
  attachInterrupt(0, alarm, FALLING);
  rtc.enableInterrupts(EveryHour); //interrupt at  EverySecond, EveryMinute, EveryHour or rtc.enableInterrupts(18,4,0);    // interrupt at (h,m,s)

  // Initialize LCD
  lcd.begin (lcdNumCols,4); 
  lcd.createChar(1, ch_level1);
  lcd.createChar(2, ch_level2);
  lcd.createChar(3, ch_level3);
  lcd.createChar(4, ch_level4);

  lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home (); // go home
  //lcd.print("Start");
  
  // Initialize Relay & Button
  pinMode(Relay1, OUTPUT);                // relay init
  digitalWrite(Relay1, HIGH);             // relay off
  pinMode(int0ButtonPin, INPUT_PULLUP);   // int0button
  
  //Serial.println(F("-Init OK")); 
}

// -------------------------------------------------------------------------
void loop()
{
  unsigned long currentMillis = millis();
  
  // -- Input circut -------------------------------------------------------
  int0Button = digitalRead(int0ButtonPin); //int0 button
  if (int0Button == LOW) {
    alarmFlag = true;
    errorFlag = false;
  }
  
  rtc.convertTemperature();
  DateTime now = rtc.now(); //get the current date-time
  sensorValue = analogRead(sensorPin);
  
  
  // -- Output circut ------------------------------------------------------
if (currentMillis-prevMillis>= dispInterval) {
  prevMillis = currentMillis;
  lcd.setCursor (0,0); lcd.print(int(rtc.getTemperature())); lcd.write((byte)223); 
  lcd.setCursor (4,0); lcd.print(now.year(), DEC); lcd.print('/'); lcd.print(now.month(), DEC); lcd.print('/');  lcd.print(now.date(), DEC);  lcd.print(' ');  lcd.print(now.hour(), DEC);  
  if (dispPulse) {
    dispPulse = false; lcd.print(F(":"));
  }
    else { dispPulse = true; lcd.print(F(" ")); 
  }
  if (now.minute()<=9) {lcd.print("0");}
  lcd.print(now.minute(), DEC);
  
  lcd.setCursor (0,1); lcd.print(F("Sensor:")); lcd.print(sensorValue); lcd.print(F(" ")); lcd.print(F("min:")); lcd.print(moisturemin);
 
  lcd.setCursor (0,2);
  if (errorFlag) {
    if (errorPulse) {errorPulse = false; lcd.print(F("Relay :OFF, ERROR  ")); }
    else {errorPulse = true; lcd.print(F("Relay :OFF,   ERROR")); }
    Serial.println(F("ERROR"));
  }
  else {
    lcd.print(F("irH:")); lcd.print(irrig_hours[0], DEC); lcd.print(F(" to ")); lcd.print(irrig_hours[1], DEC); lcd.print(" "); lcd.print(irrig_delay); lcd.print(F("Sec "));
    
  }

  lcd.setCursor (0,3); lcd.print(F("Lst:")); lcd.print(last_date_irrig.year(), DEC); lcd.print('/'); lcd.print(last_date_irrig.month(), DEC); lcd.print('/');
  lcd.print(last_date_irrig.date(), DEC);  lcd.print(' ');  lcd.print(last_date_irrig.hour(), DEC);  lcd.print(':');  
  if (last_date_irrig.minute()<=9) {lcd.print("0");}
  lcd.print(last_date_irrig.minute(), DEC);
}  
  // -- Action circut -------------------------------------------------------
  if (alarmFlag && !errorFlag && now.hour()>=irrig_hours[0] && now.hour()<=irrig_hours[1]) { 
    alarmFlag = false;                  //reset alarmFlag for next interrupt
    Serial.println(F("Moisture check Interrupt"));
    lcd.clear();
    lcd.setCursor (0,0); lcd.print(F("Moisture check Int."));

    if (sensorValue>=moisturemin) {
      lcd.setCursor (0,1); lcd.print(F("Sensor data :")); lcd.print(sensorValue); 
      if (last_hour_irrig && abs(last_hour_sensor-sensorValue)<=5) {  
        errorFlag = true;
      }
      else {
        Serial.println(F("-Irrigation"));
        lcd.setCursor (0,2); lcd.print(F("Relay :ON"));
        lcd.setCursor (0,3); lcd.print(F("Irrigation ")); lcd.print(irrig_delay); lcd.print(F(" Sec "));
        digitalWrite(Relay1, LOW);  // Relay ON
        for (int x=1; x<irrig_delay*5; x++) {
          lbg.drawValue( x, irrig_delay*5);
          delay(200);
        }  
        digitalWrite(Relay1, HIGH);  // Relay OFF
        last_date_irrig = rtc.now();
        last_hour_irrig = true;
        last_hour_sensor = sensorValue;

        }
      }
     else {
       last_hour_irrig = false;
       last_hour_sensor = 0;
      
     }
   lcd.clear(); 
  }
  rtc.clearINTStatus();
  Serial.println(sensorValue);
  

}

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Первое впечатление, что LiquidCrystal и LiquidCrystal_I2C - это разные вещи. Первому для подключения нужно 12 проводов, а второму - достаточно 4.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Skalolaz пишет:

Ругается при компиляции, ошибка ниже.

Вы забыли сказать, чего Вы от нас ждёте. Пожалеть Вас? Или чтобы мы показали свои ошбики и мы могли поплакаться друг-другу в жилетку?

Если Вам не понятна природа ошибки, так там всё просто - LcdBarGraph ожидает первым параметром указатель на тип LiquidCrystal, а Вы ему пихаете указатель на LiquidCrystal_I2C. Вот он и обижается.

Но, вообще, привыкайте нормально задавать вопрос, чтобы получать нормальные ответы.