Скетч для школьного инкубатора-теплицы

Добрый вечер. Делаю скетч на школьную теплицу и возникла проблема: попеременно выдает ошибку с использованием LiquidCrystal. При замене на lcd - пропускает, при замене всех LiquidCrystal на lcd - начинается ошибка по кругу - не принимает lcd, но принимает его замену. Что я написала не так?

//подключение экрана
  #include <LiquidCrystal_I2C.h>
  // подключение библиотеки DHT
 #include "DHT.h"
 // тип датчика DHT
 #define DHTTYPE DHT11
 #define LiquidCrystal_I2C lcd(0x27,16,2);


// контакт подключения входа данных модуля DHT11
 int pinDHT11=9;
 // контакт подключения аналогового выхода модуля влажности почвы
 int pinSoilMoisture=A0;
 // контакт подключения аналогового выхода датчика температуры TMP36
 int pinTMP36=A1;
 // контакт подключения аналогового выхода фоторезистора
 int pinPhotoresistor=A2;

// пины светодиодов индикации
 #define LED_TEMP 5
 #define LED_MOISTURE 6
 #define LED_LIGHT 7

// значения для условий
 #define TEMP_DETECT 30
 #define MOISTURE_DETECT 500
 #define LIGHT_DETECT 250

// реле
 int pinRelays[]={2,3,4};
 // статусы полива, освещения, вентилятора
 boolean statusRelays[]={false,false,false};

// создание экземпляра объекта DHT
 DHT dht(pinDHT11, DHTTYPE);

unsigned long millisupdate=0;

void setup()
 {
 // запуск последовательного порта
 Serial.begin(9600);
 //
 pinMode(LED_TEMP,OUTPUT);digitalWrite(LED_TEMP,LOW);
 pinMode(LED_MOISTURE,OUTPUT);digitalWrite(LED_MOISTURE,LOW);
 pinMode(LED_LIGHT,OUTPUT);digitalWrite(LED_LIGHT,LOW);
 //
 dht.begin();
 // инициализация дисплея
 LiquidCrystal.init(); 
 // установить контраст фона экрана
 LiquidCrystal.setContrast(60);
 LiquidCrystal.clearDisplay(); // очистить экран
 LiquidCrystal.setTextSize(1); // размер шрифта
 LiquidCrystal.setTextColor(BLACK); // цвет
 // заставка
 LiquidCrystal.setCursor(15,15);
LiquidCrystal.print("Inkub1");
 LiquidCrystal.display();
 delay(2000);

}

void loop()
 {
 // каждые 5 сек - получение показаний датчиков
 // и вывод на дисплей
 if(millis()-millisupdate>5000)
 {
 millisupdate=millis();
 LCD.clearDisplay(); // очистить экран
 LCD.setCursor(5,0);
 LCD.print("Inkub1");
 // получение данных с DHT11
 float h = dht.readHumidity();
 LCD.setCursor(5,10);
 if (isnan(h))
 {
 Serial.println("Failed to read from DHT");
 LCD.print("airH= error");
 }
 else
 {
 Serial.print("HumidityDHT11= "); Serial.print(h);Serial.println(" %");
 lcd.print("airH=");lcd.print(h);lcd.print("%");
 }
 // получение значения с аналогового вывода датчика температуры TMP36
 lcd.setCursor(5,30);
 int val1=analogRead(pinTMP36);
 // перевод в мВ
 int mV= val1*1000/1024;
 // перевод в градусы цельсия
 int t=(mV-500)/10+75;//t=23;
 Serial.print("TempTMP36= "); Serial.print(t);Serial.println(" C");
 lcd.print("airT=");lcd.print(t);lcd.print(" C");
 // получение значения с аналогового вывода фоторезистора
 lcd.setCursor(5,40);
 int val2=analogRead(pinPhotoresistor);
 Serial.print("Light= "); Serial.println(val2);
 lcd.print("Light=");lcd.print(val2);
 // обновить
 lcd.display();
 // вывод состояние полива, лампы, вентилятора
 Serial.print("pump - "); Serial.println(statusRelays[2]);
 Serial.print("fun - "); Serial.println(statusRelays[1]);
 Serial.print("lamp - "); Serial.println(statusRelays[0]);
 //// проверка условий
 // температура воздуха
 if(t > TEMP_DETECT)
 digitalWrite(LED_TEMP,HIGH);
 else
 digitalWrite(LED_TEMP,LOW);
 // освещенность
 if(val2 < LIGHT_DETECT)
 digitalWrite(LED_LIGHT,HIGH);
 else
 digitalWrite(LED_LIGHT,LOW);
 // пауза 5 секунд
 Serial.println();
 }
  }

А что по Вашему написано в строке №7?

Вот это и не так (дальше не смотрел, сначала это исправляем).

Если нужен пример как надо, см. примеры к используемой библиотеке.

1 лайк

Спасибо, исправила. Но теперь выдает ошибку в 6 строке "‘DHT11’ was not declared in this scope
"

так скачайте и установите эту библиотеку. заодно и Adafruit_Sensor.h…
и далее в скетче мало что правильно, дёргали функции от tft дисплея…

замените в строке №4 кавычки на уголки. Если не поможет, выложите полный текст сообщений компилятора (не забудьте из включить в “настройках”, а то они там выключены.

1 лайк

а должно?

 lcd.clearDisplay(); // очистить экран
  lcd.setTextSize(1); // размер шрифта
  lcd.setTextColor(BLACK); // цвет

Вот так делать не нужно - цветомузыка начнётся.
Один лимит на включение, один на выключение. Между ними разница хотя бы в несколько единиц.

По температуре так же.

Вы сначала определитесь, с чем именно Вы работаете: с lcd, с LCD или с LiquidCrystal. Это три разные вещи.

Я иду шаг за шагом. Этот шаг - про ругань в строке №6. До того, что Вы цитируете, я еще не добрался и не смотрел.

1 лайк

мы то идём…ТС нет, всё как всегда, задать вопрос и смыться )))

Не смылась, старательно вычитываю про свои косяки на всех сайтах)

И одновременно начинаю молиться за всех, кто помогает и критикует)

Заменила. Выдало это:

In file included from C:\Users\1\Documents\Arduino\inkub2\inkub2.ino:6:0:
C:\Users\1\Documents\Arduino\libraries\DHT_sensor_library/DHT.h:44:1: error: expected ‘,’ or ‘;’ before ‘static’
static const uint8_t DHT11{11}; /**< DHT TYPE 11 */
^~~~~~
inkub2:8:18: error: ‘DHT11’ was not declared in this scope
#define DHTTYPE DHT11
^
C:\Users\1\Documents\Arduino\inkub2\inkub2.ino:37:20: note: in expansion of macro ‘DHTTYPE’
DHT dht(pinDHT11, DHTTYPE);
^~~~~~~
C:\Users\1\Documents\Arduino\inkub2\inkub2.ino:8:18: note: suggested alternative: ‘DHT21’
#define DHTTYPE DHT11
^
C:\Users\1\Documents\Arduino\inkub2\inkub2.ino:37:20: note: in expansion of macro ‘DHTTYPE’
DHT dht(pinDHT11, DHTTYPE);
^~~~~~~
C:\Users\1\Documents\Arduino\inkub2\inkub2.ino: In function ‘void setup()’:
inkub2:51:2: error: ‘LiquidCrystal’ was not declared in this scope
LiquidCrystal.init();
^~~~~~~~~~~~~
C:\Users\1\Documents\Arduino\inkub2\inkub2.ino:51:2: note: suggested alternative: ‘LiquidCrystal_I2C’
LiquidCrystal.init();
^~~~~~~~~~~~~
LiquidCrystal_I2C
inkub2:56:29: error: ‘BLACK’ was not declared in this scope
LiquidCrystal.setTextColor(BLACK); // цвет
^~~~~
C:\Users\1\Documents\Arduino\inkub2\inkub2.ino: In function ‘void loop()’:
inkub2:72:2: error: ‘LCD’ was not declared in this scope
LCD.clearDisplay(); // очистить экран
^~~
C:\Users\1\Documents\Arduino\inkub2\inkub2.ino:72:2: note: suggested alternative: ‘ACD’
LCD.clearDisplay(); // очистить экран
^~~
ACD
exit status 1
‘DHT11’ was not declared in this scope

Спасибо, уже выдало - инкубатор вместо новогодней елки. Учту)

С религией не боитесь ошибиться? А то испепелит Перун вашу теплицу.

Или, например, Пам-сотник берёзу вырастит посреди ея.

1 лайк

Если в этой теплице после моей работы хоть что-то вырастет - даже религию сменю

в наш лагерь дзен-буддистов прибудет?

Видимо, да)

Вы бы ссылку на библиотеку дали, пока у ЕП лысина не вспотела и он нервничать не начал.

Поставила библиотеку по совету чата. Распознал, но та же ошибка осталась.
exit status 1
‘DHT11’ was not declared in this scope