делаю автополив теплицы и её же автопроветривание проблемы с кодом

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

  1. Код (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() {




      Serial.begin(9600);

      pinMode(ralay, HIGH);

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

    }



    void poliv()

    {
      LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display

      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);

      LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display
        lcd.setCursor(0, 0); // Устанавливаем курсор в начало 1 строки
        lcd.print("Hum = % "); // Выводим текст
        lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
     
        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;



        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++;

      }

    }
    вот код чёт сам писал чёт копировал с разных сайтов но выведение температуры воздуха на экран компилятор подчёркивает ошибкой помогите пожалуйста мучаюсь с кодом уже целый год и никак не могу его закончить
     
  2. DetSimen

    DetSimen Guest

    Мошт, компилятор пишет чо?
     
  3. ZAZ-965

    ZAZ-965 Гуру

    Иван, в первом скетче вы забыли создать переменную LiquidCrystal_I2C lcd(0x27,20,4) - в этом создаете ее в каждой функции? А нужна она один раз в глобальной области видимости (выше функции setup()). Также вы нигде не создаете переменную типа iarduino_DHT sensor(DHTPIN ) - а она нужна, и тоже глобальной. Функция readTemperature() - это откуда скопипащено? Среди методов iarduino_DHT нет такой.
    К каждой библиотеке есть примеры, посмотрите и разберитесь с ними.
     
    arkadyf, Andrey12 и Daniil нравится это.
  4. DIYMan

    DIYMan Guest

    Проект -в подписи, скачивай, настраивай - и не мучайся ;)
     
  5. readTemperature() есть везде где икал код на dht11 LiquidCrystal_I2C lcd(0x27,20,4) если не вставлять в каждой функции тон компилятор её не видит и выводит ошибку
     
  6. Mitrandir

    Mitrandir Гуру

    Сделать глобальной. Всё увидит
     
  7. ZAZ-965

    ZAZ-965 Гуру

    Ик-ик-икто вам сказал, что программы пишутся методом копи-пасте из инета. Метод readTemperature из библиотеки adafruit-DHT-sensor. К каждой библиотеке есть папка с примерами, поработайте с ними. Да книгу по С почитайте.
    Ладно, пока у вас не пропал интерес, помогу маленько (алгоритм не смотрел, поправил только ошибки)
    Код (C++):
    #include <LiquidCrystal_I2C.h>
    #include <DHT.h> //https://github.com/adafruit/DHT-sensor-library

    #define DHTPIN 2
    #define DHTTYPE DHT11

    //глобальные переменные
    DHT dht(DHTPIN, DHTTYPE);
    LiquidCrystal_I2C lcd(0x27,20,4);

    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;

    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;
    int ledPins[] = {
      2, 3, 4, 5, 6, 7, 8, 9, 10, 11};

    void setup() {
      Serial.begin(9600);
      dht.begin();
      pinMode(ralay, HIGH);
      digitalWrite(ralay, HIGH);
    }

    void poliv()
    {
      String DisplayWords;
      int sensorValue;
      int time_tmp;

      time_tmp = time_work;
      digitalWrite(ralay, LOW);
      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); // Устанавливаем курсор в начало 1 строки
        lcd.print("Hum = % "); // Выводим текст
        lcd.setCursor(7, 0); // Устанавливаем курсор на 7 символ
        lcd.setCursor(0, 1); // Устанавливаем курсор в начало 2 строки
        lcd.print("Temp = \1C "); // Выводим текст, \1 - значок градуса
        lcd.setCursor(7, 1); // Устанавливаем курсор на 7 символ
        lcd.print(dht.readTemperature(), 1); // Выводим значение температуры

        if (dht.readTemperature()<70 and x>600)
          digitalWrite(rele, HIGH);
        else
          digitalWrite(rele, LOW);
     
        if (dht.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++;
      }
     
    Mitrandir нравится это.