функция lcd выводится ошибкой почему

Тема в разделе "Arduino & Shields", создана пользователем Иван Брагинский, 18 авг 2018.

  1. Выделенное жирным выводится как ошибка. Что делать? Помогите пожалуйста
    #include <LiquidCrystal_I2C.h>





    int minv = 600;//малая влажность
    int maxv = 220;//полный полив
    int normv = 500;//чуть влажная
    int value = 0;//полученное значение
    int last_value = 0;//последнее значимое изменение
    int value_sdvig = 50; //значимое изменение
    int ralay = 6; //пин реле
    int time_work = 10;//время работы помпы в сек
    int analogPin = A0;//пин датчика

    #include <iarduino_DHT.h>

    #define DHTPIN 2 // what pin we're connected to

    int ledPins[] = {
    2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
    #define DHTTYPE DHT11
    //Переменные таймаута

    int second = 0; // секунды

    int time_off = 0; // счетчик оставшегося времени

    int pause_time = 15; // время отдыха после полива в минутах


    //DHT dht(DHTPIN, DHTTYPE);
    int rele = 3;
    int x = 0;
    int y = 0;
    int thresholdUp = 400;
    int thresholdDown = 250;
    void setup() {
    lcd.begin( 16 , 2 );
    // put your setup code here, to run once:

    Serial.begin(9600);

    pinMode(ralay, HIGH); //настройка реле

    digitalWrite(ralay, HIGH);
    Serial.begin(9600);
    Serial.println("DHTxx test!");
    }



    void poliv()

    {

    int time_tmp;

    time_tmp = time_work;

    digitalWrite(ralay, LOW);
    // Здесь мы объявляем строку, в которой хранятся данные для отображения на дисплее.
    // Значения будут изменяться в зависимости от уровня влажности почвы
    String DisplayWords;
    // В переменной sensorValue хранится аналоговое значение датчика с контакта А0
    int sensorValue;
    sensorValue = analogRead(A0);
    // перемещаем курсор к началу первой строки дисплея: mySerial.write(254);
    lcd.write(128);
    // очистка дисплея:
    lcd.write(" ");
    lcd.write(" ");
    // перемещаем курсор к началу первой строки дисплея: mySerial.write(254);
    lcd.write(128);
    // запись необходимой информации на дисплей:
    lcd.write("Water Level: ");
    lcd.print(sensorValue); //Использование.print вместо .write для значений
    DisplayWords = "Wet off!";
    lcd.print(DisplayWords);
    while (time_tmp > 0 && value > normv) { // ждем истечения времени time_work или нормальной влажности почвы

    delay(1000);

    value = analogRead(analogPin); //обновляем значение влажности

    time_tmp--;

    }

    digitalWrite(ralay, HIGH);

    second = 0; // сбрасываем секунды на ноль

    time_off = pause_time; // устанавливаем задержку между поливами

    }



    void loop() {

    // Добавляем паузы в несколько секунд между измерениями
    delay(2000);
    // Reading temperature or humidity takes about 250 milliseconds!
    // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
    // Read temperature as Celsius

    // Выводим показания влажности и температуры
    lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
    lcd.print("Hum = % "); // Выводим текст
    lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
    lcd.print(h, 1); // Выводим на экран значение влажности
    lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
    lcd.print("Temp = \1C "); // Выводим текст, \1 - значок градуса
    lcd.setCursor(7, 1); // Устанавливаем курсор на 7 символ
    lcd.print(readTemperature(), 1); // Выводим значение температуры

    if (readTemperature() < 70 and x > 600)digitalWrite(rele, HIGH);
    else digitalWrite(rele, LOW);
    if (readTemperature()> 70 and x > 600) x = 420;

    // put your main code here, to run repeatedly:

    value = analogRead(analogPin);

    if (value > (last_value + value_sdvig) || value < (last_value - value_sdvig)) { // если last_value отклонился на value_sdvig выводим value в uart

    Serial.println(value);

    last_value = value;

    }

    if ((value > (minv - value_sdvig)) && time_off < 1) poliv(); //если значение влажности > критическая влажность - 50 и не было недавних поливов

    // временные функции что бы не играться с таймерами

    if (second > 59)

    {

    second = 0;

    if (time_off > 0) time_off--;

    }
    delay(1000);//пауза 1 сек

    second++;

    }

    }
     

    Вложения:

    Последнее редактирование: 18 авг 2018
  2. ostrov

    ostrov Гуру

    Код вставьте по человечески для начала.
     
  3. Код (C++):
    #include <LiquidCrystal_I2C.h>





    int minv = 600;
    int maxv = 220;
    int normv = 500;
    int value = 0;
    int last_value = 0;
    int value_sdvig = 50;
    int ralay = 6;
    int time_work = 10;
    int analogPin = A0;

    #include <iarduino_DHT.h>

    #define DHTPIN 2    
    int ledPins[] = {
      2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
    #define DHTTYPE DHT11


    int second = 0;

    int time_off = 0;

    int pause_time = 15;


    int rele = 3;
    int x = 0;
    int y = 0;
    int thresholdUp = 400;
    int thresholdDown = 250;
    void setup() {
     
    lcd.begin( 16 , 2 );


      Serial.begin(9600);

      pinMode(ralay, HIGH);

      digitalWrite(ralay, HIGH);
      Serial.begin(9600);
      Serial.println("DHTxx test!");
     
    }



    void poliv()

    {

      int time_tmp;

      time_tmp = time_work;

      digitalWrite(ralay, LOW);
     
      String DisplayWords;
     
      int sensorValue;
      sensorValue = analogRead(A0);

      lcd.write(128);

    lcd.write(" ");
      lcd.write(" ");
    lcd.write(128);
      lcd.write("Water Level: ");
    lcd.print(sensorValue);
      DisplayWords = "Wet off!";
      lcd.print(DisplayWords);
      while (time_tmp > 0 && value > normv) {
        delay(1000);

        value = analogRead(analogPin);

        time_tmp--;

      }

      digitalWrite(ralay, HIGH);

      second = 0;

      time_off = pause_time;
    }



    void loop() {
       
        delay(2000);

     
        lcd.setCursor(0, 0);
        lcd.print("Hum = % ");
        lcd.setCursor(7, 0);
        lcd.print(h, 1);
        lcd.setCursor(0, 1);
        lcd.print("Temp = \1C ");
        lcd.setCursor(7, 1);
        lcd.print(readTemperature(), 1);

        if (readTemperature() < 70 and x > 600)digitalWrite(rele, HIGH);
        else digitalWrite(rele, LOW);
        if (readTemperature()> 70 and x > 600) x = 420;



        value = analogRead(analogPin);

        if (value > (last_value + value_sdvig) || value < (last_value - value_sdvig)) {
          Serial.println(value);

          last_value = value;

        }

        if ((value > (minv - value_sdvig)) && time_off < 1) poliv();



        if (second > 59)

        {

          second = 0;

          if (time_off > 0) time_off--;

        }

        delay(1000);

        second++;

      }

    }
    конкретно вот эту строчку компилятор выводит как ошибку
    Код (C++):
    lcd.setCursor(0, 0);
     
  4. Mitrandir

    Mitrandir Гуру

    А где объявлен объект lcd?

    не забыли строку:

    LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
     
    Последнее редактирование: 18 авг 2018
  5. спасибо это помогло