РЕШЕНО Проблема с кодом

Тема в разделе "Arduino & Shields", создана пользователем gkit, 27 окт 2019.

  1. gkit

    gkit Нуб

    Всем доброго времени суток. Возникла проблема в коде при создании одного устройства. GrowBox контролера. Появилась проблема с кодом. Скачал код, библиотеки установил и выдает ошибку компиляции. Сразу говорю не надо писать " Брось проект, иди светодиодом помигай тогда возвращайся к нему ".
    Почти весь базовый курс Arduino имею, но раньше с подобными ошибками не сталкивался, ссылки и код ниже
    YouTube канал автора: https://www.youtube.com/channel/UC82y1uu7k08kq9SMpckNRoA/featured
    Видео по проекту:


    Архив проекта на гугл диске https://drive.google.com/drive/folders/165HR77iM_gYuEkz5Xv1Llp55JdLcSofd
    Архив проекта на гугл диске содержит два скетча. Без датчика влажности почвы версия 3.2.2 ( ее я и рассматриваю ) и версию с датчиком влажности почвы 3.3.2 ( не рассматриваю )
    код версии 3.2.2 напишу всё же здесь! Но так как нельзя создавать сообщения длинной более 1000 символов я его разделю : до setup, setup, loop
    До setup
    Код (C++):
    /*версия 3.2.2
      - LOAD_TIME - для установки даты

      Youtube видео:https://youtu.be/THgD8OQGkAs
      Youtube канал:  https://www.youtube.com/channel/UC82y1uu7k08kq9SMpckNRoA
    */


    #include <Wire.h>

    //-------------часы --------
    #include "RTClib.h"  //(библиотека RTClib ) DS1307 clock // SDA -A4 /SCL -A5  //билиотека папка RTClib
    RTC_DS1307 ds1307;    // Create RTC object
    int rtc[7];          // массив данных часов
    #define LOAD_TIME 0     // 1- установить время, как на компьютере (при первой загрузке) , 0- не устанавливать время
    //---------------------------------------

    #include <LCD_1602_RUS.h> //библиотека для вывода русс. символов (не более 8шт. не совпадающих с латиницей)
    LCD_1602_RUS lcd(0x3F, 16, 2); //создаем объект дисплей lcd
    //LCD_1602_RUS lcd(0x27, 16, 2); //создаем объект дисплей lcd - другой адрес (если не работает с предыдущей строкой)

    //------------- датчик температуры 18b20--------------
    #include <OneWire.h>
    #define POWER_MODE  0 // режим питания, 0 - внешнее, 1 - паразитное
    OneWire sensDs (10);  // датчик подключен к выводу 10
    byte bufData[9];  // буфер данных
    float temperature;  // измеренная температура
    //------------------------

    //---------DHT11/DH22 датчик темпер и влаж --------
    #include <iarduino_DHT.h> // Подключаем библиотеку для работы с датчиком DHT
    iarduino_DHT  sensor1(9); //DHT подключен на пин ...
    byte Hum = 0; // показания влажности
    float TempDHT = 0.0; // показания температуры
    unsigned long lastDHT = 0; // для контроля обновления показаний с интервалом не более 2 сек ( т.к. это медленные датчики)
    #define DHT_corr_H 0 // коррекция показаний влажности (+- если надо)
    #define DHT_corr_T 0.0 // коррекция показаний температуры (+- если надо)
    //------------------------------

    //--- кнопки----
    #include <AmperkaKB_ms.h> // подключаем библиотеку для работы с матричной клавиатурой
    // указывая номера arduino подключенные к шлейфу клавиатуры
    // начиная с первого вывода шлейфа
    AmperkaKB KB(6, 5, 4, 3, 2);

    //----------работа с памятью--------------
    #include <EEPROMex.h>
    #include <EEPROMVar.h>
    //----------------------------------------

    boolean DAY = 0; // флаг времени суток 0-ночь, 1-день
    #define Relay_Lamp 12 // пин реле включения освещения
    #define Relay_Heat 11 // пин реле включения подогрева
    #define Relay_Water 7 // пин реле включения полива
    #define Relay_Vent 8 // пин реле включения вентиляции

    boolean heating = 1; // режим обогрева on/off   1/0                            - eeprom= 31
    float Temp_Box_Day = 24.0; // необходимая температура при освещении   - eeprom= 1
    float Temp_Box_Night = 21.0; // необходимая температура БЕЗ освещении - eeprom= 5
    float delta_Temp = 0.4; //   отклонение температуры до включения (гистерезис)   - eeprom= 9
    float step_Temp = 0.2; //   шаг измениения температуры

    boolean lighting = 1; // режим освещения on/off                              - eeprom= 32
    byte start_day_h = 17; // время начала дня (часы)                            - eeprom= 13
    byte start_day_m = 00; // время начала дня (минуты)                          - eeprom= 14
    byte duretion_day_h = 16 ; // продолжительность досветки (часы)              - eeprom= 15
    byte duretion_day_m = 00; // продолжительность досветки (минуты)             - eeprom= 16
    byte offL_h; // время выключения света(часы)
    byte offL_m ; // время выключения света(минуты)

    boolean watering = 1; // режим полива on/off                          - eeprom= 33
    byte start_wat_h = 8; // время начала полива (часы)                   - eeprom= 17
    byte start_wat_m = 00; // время начала полива (минуты)                - eeprom= 18
    byte duretion_wat_h = 1 ; // продолжительность полива (часы)          - eeprom= 19
    byte duretion_wat_m = 00; // продолжительность полива (минуты)        - eeprom= 20
    byte offW_h; // время выключения полива(часы)
    byte offW_m ; // время выключения полива(минуты)
    //-3.2-----------
    boolean ventilation = 1; // режим вентиляции on/off   1/0                            - eeprom= 34
    float Temp_Vent_ON = 28.0; // температура включения вентиляции  - eeprom= 35
    float delta_Temp_Vent = 2.0; //   отклонение температуры до отключения (гистерезис)- eeprom= 39


    unsigned long startMenuTime;   // время входа в меню
    #define exitTime 5000 // время автовыхода из меню, мс
    #define NUM_SETTINGS_MODES 5      // число режимов меню (включая 0)

    String Temp , TempD, TempN;

    //*********************************************************************************
    Вот что выдает компилятор
    Arduino: 1.6.9 (Windows 7), Плата:"Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

    C:\Users\Владимир\AppData\Local\Temp\Temp2_portable-20191022T185023Z-001.zip\portable\sketchbook\GrowBox_3.2.2\GrowBox_3.2.2.ino: In function 'void setup()':

    GrowBox_3.2.2:120: error: 'load' was not declared in this scope

    C:\Users\Владимир\AppData\Local\Temp\Temp2_portable-20191022T185023Z-001.zip\portable\sketchbook\GrowBox_3.2.2\GrowBox_3.2.2.ino:120:3: note: suggested alternative: 'lcd'

    C:\Users\Владимир\AppData\Local\Temp\Temp2_portable-20191022T185023Z-001.zip\portable\sketchbook\GrowBox_3.2.2\GrowBox_3.2.2.ino: In function 'void loop()':

    GrowBox_3.2.2:165: error: 'setup_menu' was not declared in this scope

    C:\Users\Владимир\AppData\Local\Temp\Temp2_portable-20191022T185023Z-001.zip\portable\sketchbook\GrowBox_3.2.2\GrowBox_3.2.2.ino:165:23: note: suggested alternative: 'step_Temp'

    C:\Users\Владимир\AppData\Local\Temp\Temp2_portable-20191022T185023Z-001.zip\portable\sketchbook\GrowBox_3.2.2\GrowBox_3.2.2.ino: In function 'void day_night()':

    GrowBox_3.2.2:403: error: 'get_time' was not declared in this scope

    C:\Users\Владимир\AppData\Local\Temp\Temp2_portable-20191022T185023Z-001.zip\portable\sketchbook\GrowBox_3.2.2\GrowBox_3.2.2.ino:403:3: note: suggested alternative: 'DateTime'

    C:\Users\Владимир\AppData\Local\Temp\Temp2_portable-20191022T185023Z-001.zip\portable\sketchbook\GrowBox_3.2.2\GrowBox_3.2.2.ino: In function 'void poliv()':

    GrowBox_3.2.2:456: error: 'get_time' was not declared in this scope

    C:\Users\Владимир\AppData\Local\Temp\Temp2_portable-20191022T185023Z-001.zip\portable\sketchbook\GrowBox_3.2.2\GrowBox_3.2.2.ino:456:5: note: suggested alternative: 'DateTime'

    exit status 1
    'load' was not declared in this scope

    Этот отчёт будет иметь больше информации с
    включенной опцией Файл -> Настройки ->
    "Показать подробный вывод во время компиляции"

    Помогите решить проблему, сам решаю уже 3 день моих знаний видимо мало.
     
  2. gkit

    gkit Нуб

    Код (C++):
    void setup() {

      Serial.begin(9600);              // открыть порт для связи
      // Serial.println("setup");
      //-------------------------------------------

      pinMode(Relay_Lamp, OUTPUT);
      pinMode(Relay_Heat, OUTPUT);
      pinMode(Relay_Water, OUTPUT);
      pinMode(Relay_Vent, OUTPUT);//3.2

      digitalWrite(Relay_Lamp, HIGH); //выключаем реле
      digitalWrite(Relay_Heat, HIGH);
      digitalWrite(Relay_Water, HIGH);
      digitalWrite(Relay_Vent, HIGH); //3.2
      //delay(1000);

      //-------Setup DS1307 RTC--------------------
    #ifdef AVR
      Wire.begin();
    #else
      Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino
    #endif
      ds1307.begin(); //start RTC Clock

      if (! ds1307.isrunning()) {
        Serial.println("RTC is NOT running!");
      }
         if (LOAD_TIME==1) ds1307.adjust(DateTime(__DATE__, __TIME__));// установка времани = время на компе.
      load(); //инициализация

      KB.begin(KB1x4); // клавиатура
      //-----------------------------------------

      //------EEPROM--------------------

      //EEPROM.writeByte(100, 0); //  пишем 0, чтобы обновилась память в соответствии с переменными (для тестирования)

      // в ячейке 100 должен быть записан флажок 1, если его нет - делаем (ПЕРВЫЙ ЗАПУСК)
      if (EEPROM.read(100) != 1) {
        EEPROM.writeByte(100, 1);
        update_EEPROM(0); //записываем исходные данные в ячейки памяти
      }
      else { // записываем в переменные данные из памяти
        heating = EEPROM.read(31);// режим обогрева on/off
        Temp_Box_Day = EEPROM.readFloat(1); // необходимая температура при освещении
        Temp_Box_Night = EEPROM.readFloat(5); // необходимая температура  БЕЗ освещении
        delta_Temp = EEPROM.readFloat(9); //   отклонение температуры до включения

        lighting = EEPROM.read(32);// режим освещения on/off
        start_day_h = EEPROM.read(13); // время начала дня (часы)
        start_day_m = EEPROM.read(14); // время начала дня (минуты)
        duretion_day_h = EEPROM.read(15); // продолжительность досветки (часы)
        duretion_day_m = EEPROM.read(16); // продолжительность досветки (минуты)

        watering = EEPROM.read(33);//режим полива on/off
        start_wat_h = EEPROM.read(17);// время начала полива (часы)
        start_wat_m = EEPROM.read(18); // время начала полива (минуты)
        duretion_wat_h = EEPROM.read(19); // продолжительность полива (часы)
        duretion_wat_m = EEPROM.read(20);// продолжительность полива (минуты)
        //3.2
        ventilation = EEPROM.read(34); //режим вентиляции on/off
        Temp_Vent_ON = EEPROM.read(35);
        delta_Temp_Vent = EEPROM.read(39);
        //------------------------------------------------------------

      }
    }//setup
    //*******************************************************************************************
    //*******************************************************************************************
     
     
  3. gkit

    gkit Нуб

    Код (C++):
    void loop() {
      delay(20);
      KB.read();
      if (KB.getNum == 1 )setup_menu();
      if (KB.getNum == 4 )displays(); // просмотр экранов

      //Serial.println("loop");

      //***************************************
      day_night(); // функ. назначает по времени день или ночь
      //**************************************************
      if (watering == 1) {
        poliv(); // если активно -фун. включения полива
      }
      else digitalWrite(Relay_Water, HIGH); //отключаем реле

      //------------ темпер и влаж------------------------
      if (millis() - lastDHT > 2000) {
        lastDHT = millis(); // запоминаем
        sensor1.read();
        Hum = sensor1.hum; // показания влажности DHT датчика
        TempDHT = sensor1.tem; // показания температуры  DHT датчика
        //Serial.println((String)"Hum=" + Hum + "+" + DHT_corr_H + "%");
        // Serial.println((String)"TempDHT=" + TempDHT + "+" + DHT_corr_T +  "C");
        Hum = Hum + DHT_corr_H; //корректируем показания
        TempDHT = TempDHT + DHT_corr_T; //корректируем показания
      }

      temperature = get_temp18b20(); // функ. вычисления температуры по 18b20
      //temperature = TempDHT; // раскомментировать при изм. темпер. DHT

      //Serial.println (temperature);
      //-------------------------------------

      //DAY=1; ////// для теста

      // ---включаем свет , если день и активно----
      if (lighting == 1) {//если активно
        if (DAY == 1 ) {
          digitalWrite(Relay_Lamp, LOW); //включаем реле
        }
        else  {
          digitalWrite(Relay_Lamp, HIGH); //отключаем реле
        }
      }
      else digitalWrite(Relay_Lamp, HIGH); //отключаем реле

      //---округляем t до 1го знака--------
      static char outstr1[15];// массив
      dtostrf(temperature, 4, 1, outstr1); // (переменная типа float;, длина получаемого символьного значения, количество символов после запятой;,символьный массив для сохранения результата преобразован)
      Temp = (String)(outstr1);  //преобраз массава в строку

      static char outstr2[15];// массив
      dtostrf(Temp_Box_Day, 4, 1, outstr2); // (переменная типа float;, длина получаемого символьного значения, количество символов после запятой;,символьный массив для сохранения результата преобразован)
      TempD = (String)(outstr2); //преобраз массава в строку

      static char outstr3[15];// массив
      dtostrf(Temp_Box_Night, 4, 1, outstr3); // (переменная типа float;, длина получаемого символьного значения, количество символов после запятой;,символьный массив для сохранения результата преобразован)
      TempN = (String)(outstr3);  //преобраз массава в строку
      //-------------------------------------------


      //********выводим на экран  **************

      //lcd.clear(); //чистим экран
      lcd.setCursor(0, 0);
      lcd.print((String) zero(rtc[2]) + ":" + zero(rtc[1]) + F(" ТЕМП=") + Temp + char(223) );
      lcd.setCursor(0, 1);
      lcd.print((String)F("ВЛАЖНОСТЬ= ") + Hum + "%");

      //-----------отопление--------------
      if (heating == 1) {//если активно
        if ( DAY == 1 && temperature < (Temp_Box_Day - delta_Temp)) { // если день и похолодало
          digitalWrite(Relay_Heat, LOW); // включаем подогрев дня
        }
        else if ( DAY == 0 && temperature < (Temp_Box_Night - delta_Temp)) { // если ночь похолодало
          digitalWrite(Relay_Heat, LOW); // включаем подогрев ночи
        }

        else if (DAY == 1 && temperature > (Temp_Box_Day)) { // если день и подогрели
          digitalWrite(Relay_Heat, HIGH); //выключаем реле подогрева
        }
        else if (DAY == 0 && temperature > (Temp_Box_Night)) { // если ночь и подогрели
          digitalWrite(Relay_Heat, HIGH); //выключаем реле подогрева
        }
      }
      else {
        digitalWrite(Relay_Heat, HIGH); //выключаем реле подогрева
      }
      //-------------------------
      //-----------вентиляция --------------
      if (ventilation == 1) {//если активно
        if ( temperature > Temp_Vent_ON) { // если жарко
          digitalWrite(Relay_Vent, LOW); // включаем реле вент.
        }

        else if (temperature <= (Temp_Vent_ON - delta_Temp_Vent)) { // если остыли
          digitalWrite(Relay_Vent, HIGH); // выключаем реле вент.
          //  Serial.println((String) Temp_Vent_ON + "-" + delta_Temp_Vent );
        }
      }

    } //loop
    //--------------------------
    //*************ФУНКЦИИ*****************
    //*****************************************
    //------ смена экранов----------------
    void displays() {
      byte disp = 1;
      byte firstrun = 1;

      startMenuTime = millis(); //запоминаем
      //  KB.read();
      //   KB.getNum=0; // обнуляем номер клавиши
      KB.read();

      while (KB.getNum != 2) {
        if ( (millis() - startMenuTime) > exitTime )
        {
          lcd.clear();
          break; //выходим
        }
        KB.read();

        if ( (KB.justPressed() && KB.getNum == 4) || firstrun == 1) {
          startMenuTime = millis(); //запоминаем

          disp++; // меняем тип вывода инфы
          if (firstrun == 1)firstrun = 0;
          if (disp > 7)disp = 1; // если превысили,то сброс*/
          lcd.clear();
        }

        switch (disp) {
          case 1:
            lcd.setCursor(0, 0);
            lcd.print((String) zero(rtc[2]) + ":" + zero(rtc[1]) + F(" ТЕМП=") + Temp + char(223) );
            lcd.setCursor(0, 1);
            lcd.print((String)F("ВЛАЖНОСТЬ= ") + Hum + "%");
            break;

          case 2:
            lcd.setCursor(0, 0);
            lcd.print(F("ОБОРУДОВАНИЕ"));
            lcd.setCursor(0, 1);
            lcd.print((String)"L" + curR(Relay_Lamp) + " T" + curR(Relay_Heat) + " W" + curR(Relay_Water) + " V" + curR(Relay_Vent));
            break;

          case 3:
            lcd.setCursor(0, 0);
            lcd.print((String) F("СВЕТ: ВКЛ  ") +  zero(start_day_h) + ":" + zero(start_day_m));
            lcd.setCursor(0, 1);
            lcd.print((String)zero(duretion_day_h) + ":" + zero(duretion_day_m) + F(" ОТКЛ ") + zero(offL_h) + ":" + zero(offL_m));
            break;

          case 4:
            lcd.setCursor(0, 0);
            lcd.print((String) F("ТЕМП: ДЕНЬ  ") +  TempD);
            lcd.setCursor(0, 1);
            lcd.print((String) F("d=") + delta_Temp + F(" НОЧЬ ") +  TempN );
            break;

          case 5:
            lcd.setCursor(0, 0);
            lcd.print((String) F("ПОЛИВ: ВКЛ ") +  zero(start_wat_h) + ":" + zero(start_wat_m));
            lcd.setCursor(0, 1);
            lcd.print((String)F("ПРОДОЛЖ. ") + zero(duretion_wat_h) + ":" + zero(duretion_wat_m));
            break;

          case 6://3.2
            lcd.setCursor(0, 0);
            lcd.print(F("ВЕНТИЛЯЦИЯ"));
            lcd.setCursor(0, 1);
            lcd.print((String)  F("ТЕМП:") +  Temp_Vent_ON + F(" d=") + delta_Temp_Vent);
            break;

          case 7:
            lcd.setCursor(0, 0); lcd.print((String) F("L-") + curSet(lighting));
            lcd.setCursor(7, 0); lcd.print((String) F("| T-") + curSet(heating));
            lcd.setCursor(0, 1); lcd.print((String) F("W-") + curSet(watering));
            lcd.setCursor(7, 1); lcd.print((String) F("| V-") + curSet(ventilation));//3.2

            break;
        }

        delay(30);
      } //while
      KB.getNum = 0; // обнуляем номер клавиши
    }

    //------------------------------------
    // добавление нуля,если время однозначное
    String zero(int data) {
      String str;
      if (data < 10) str = "0" + (String)data;
      else str = (String)data;
      //Serial.println((String)"str="+str); // выводим
      return str;
    }
    //-----------читает состояние пина и выдает символ----------------------------
    char curR(int pin) {
      if (digitalRead(pin) == LOW) return '+';
      else if (digitalRead(pin) == HIGH)   return '-';
      else  return 'E';
    }

    //-----------читает значение и выдает on/off----------------------------
    String curSet(int per) {
      if (per == 1) return "ON";
      else if (per == 0)   return "OFF";
      else  return "err";
    }


    //------- получение данных темпер. датчика---
    float get_temp18b20 () {
      //----------------18b20-------------
      sensDs.reset();  // сброс шины
      sensDs.write(0xCC, POWER_MODE); // пропуск ROM
      sensDs.write(0x44, POWER_MODE); // инициализация измерения
      delay(40);

      sensDs.reset();  // сброс шины
      sensDs.write(0xCC, POWER_MODE); // пропуск ROM
      sensDs.write(0xBE, POWER_MODE); // команда чтения памяти датчика
      sensDs.read_bytes(bufData, 9);  // чтение памяти датчика, 9 байтов

      if ( OneWire::crc8(bufData, 8) == bufData[8] ) {  // проверка CRC
        // данные правильные
        temperature =  (float)((int)bufData[0] | (((int)bufData[1]) << 8)) * 0.0625 ;
      }
      // Serial.print("temp18b20 : ");
      //  Serial.println(temperature);
      return temperature;
    }
    //------- конец -получение данных темпер. датчика---


    //----------------------------------------------------

      }
     
  4. gkit

    gkit Нуб

    и ещё loop часть ( но лучше скачайте архив проекта )
    Код (C++):
    //---- назначение день или ночь--------------------
    void day_night () {
      get_time(); // функ. считываем текущие значения с часов в глоб. перем.

      int cur_h = rtc[2]  ; // текущее время - количество часов в 24 часовом формате
      int cur_min = rtc[1]; //текущее время -количество минут

      offL_h = start_day_h + duretion_day_h; // время выключения (часы)
      if (offL_h >= 24)offL_h = offL_h - 24; //округляем

      offL_m = start_day_m + duretion_day_m; // время выключения (минуты)
      if (offL_m >= 60) {
        offL_m = offL_m - 60; //округляем
        offL_h = offL_h + 1;
        if (offL_h >= 24)offL_h = offL_h - 24; //округляем
      }
      DAY = 0; //сброс
      //--------------------------
      if (start_day_h > offL_h && (cur_h >= start_day_h || cur_h < offL_h) ) { // если переход на след. день ,но часы попадают в интервал  (на случай отключения после 00:00)

        //день
        if (cur_h == start_day_h) { // если  час = начало
          if (cur_min >= start_day_m )  DAY = 1;
        }
        if (cur_h > start_day_h) DAY = 1; // если  час > начало
        if (cur_h < start_day_h && cur_h <= offL_h) DAY = 1;

        //ночь
        if (cur_h == offL_h) { // если час = конец и в пределах одного часа
          if (cur_min >= offL_m )  DAY = 0;
        }
        if (cur_h > offL_h && cur_h < start_day_h) DAY = 0;
      }

      else if (start_day_h <= offL_h && cur_h >= start_day_h && cur_h <= offL_h) { // если НЕТ перехода на след. день. но часы попадают в интервал  (на случай отключения после 00:00)

        //включение
        if (cur_h == start_day_h) { // если  час = начало
          if (cur_min >= start_day_m )  DAY = 1;
        }
        if (cur_h > start_day_h) DAY = 1; // если  час > начало

        //выключение
        if (cur_h == offL_h) { // если час = конец и в пределах одного часа
          if (cur_min >= offL_m )  DAY = 0;
        }
        if (cur_h > offL_h) DAY = 0; // если  час > начало
      }
    } //---- КОНЕЦ- назначение день или ночь--------------------


      //----------------------------------------------------
      //---- ПОЛИВ вкл/откл --------------------
      void poliv() {

        get_time(); // функ. считываем текущие значения с часов в глоб. перем.

        boolean vkl = 0;
        int cur_h = rtc[2]  ; // текущее время - количество часов в 24 часовом формате
        int cur_min = rtc[1]; //текущее время -количество минут

        offW_h = start_wat_h + duretion_wat_h; // время выключения (часы)
        if (offW_h >= 24) offW_h = offW_h - 24; //округляем

        offW_m = start_wat_m + duretion_wat_m; // время выключения (минуты)
        if (offW_m >= 60) {
          offW_m = offW_m - 60; //округляем
          offW_h = offW_h + 1;
          if (offW_h >= 24) offW_h = offW_h - 24; //округляем
        }


        if (start_wat_h > offW_h && (cur_h >= start_wat_h || cur_h < offW_h) ) { // если переход на след. день ,но часы попадают в интервал  (на случай отключения после 00:00)
          //включение
          if (cur_h == start_wat_h) { // если  час = начало
            if (cur_min >= start_wat_m )  vkl = 1;
          }
          if (cur_h > start_wat_h) vkl = 1; // если  час > начало
          if (cur_h < start_wat_h && cur_h <= offW_h) vkl = 1;

          //выключение
          if (cur_h == offW_h) { // если час = конец и в пределах одного часа
            if (cur_min >= offW_m )  vkl = 0;
          }
          if (cur_h > offW_h && cur_h < start_wat_h) vkl = 0;

          //итог
          if (vkl == 1)digitalWrite(Relay_Water, LOW); //включаем реле полива;
          else digitalWrite(Relay_Water, HIGH); //отключаем реле полива;
        }

        else if (start_wat_h <= offW_h && cur_h >= start_wat_h && cur_h <= offW_h) { // если НЕТ перехода на след. день. но часы попадают в интервал  (на случай отключения после 00:00)
          //включение
          if (cur_h == start_wat_h) { // если  час = начало
            if (cur_min >= start_wat_m )  vkl = 1;
          }
          if (cur_h > start_wat_h) vkl = 1; // если  час > начало

          //выключение
          if (cur_h == offW_h) { // если час = конец и в пределах одного часа
            if (cur_min >= offW_m )  vkl = 0;
          }
          if (cur_h > offW_h) vkl = 0; // если  час > начало

          //итог
          if (vkl == 1)digitalWrite(Relay_Water, LOW); //включаем реле полива;
          else digitalWrite(Relay_Water, HIGH); //отключаем реле полива;
        }

      }//---- КОНЕЦ-poliv

      //----------------------------------------------------
      // обновление данных в энергонезависимой памяти
      void update_EEPROM(int cod)
      {
        switch (cod) {
          case 0:
            EEPROM.write(31, heating);
            EEPROM.writeFloat(1, Temp_Box_Day);
            EEPROM.writeFloat(5, Temp_Box_Night);
            EEPROM.writeFloat(9, delta_Temp);

            EEPROM.write(32, lighting);
            EEPROM.write(13, start_day_h);
            EEPROM.write(14, start_day_m);
            EEPROM.write(15, duretion_day_h);
            EEPROM.write(16, duretion_day_m);

            EEPROM.write(33, watering);
            EEPROM.write(17, start_wat_h);
            EEPROM.write(18, start_wat_m);
            EEPROM.write(19, duretion_wat_h);
            EEPROM.write(20, duretion_wat_m);
            //3.2
            EEPROM.write(34, ventilation);
            EEPROM.write(35, Temp_Vent_ON);
            EEPROM.write(39, delta_Temp_Vent);

            break;

          case 1:  EEPROM.updateFloat(cod, Temp_Box_Day); break;
          case 5:  EEPROM.updateFloat(cod, Temp_Box_Night); break;
          case 9:  EEPROM.updateFloat(cod, delta_Temp); break;
          case 13:  EEPROM.updateByte(cod, start_day_h); break;
          case 14:  EEPROM.updateByte(cod, start_day_m); break;
          case 15:  EEPROM.updateByte(cod, duretion_day_h); break;
          case 16:  EEPROM.updateByte(cod, duretion_day_m); break;
          case 17:  EEPROM.updateByte(cod, start_wat_h); break;
          case 18:  EEPROM.updateByte(cod, start_wat_m); break;
          case 19:  EEPROM.updateByte(cod, duretion_wat_h); break;
          case 20:  EEPROM.updateByte(cod, duretion_wat_m); break;
          case 31:  EEPROM.updateByte(cod, heating); break;
          case 32:  EEPROM.updateByte(cod, lighting); break;
          case 33:  EEPROM.updateByte(cod, watering); break;
          case 34:  EEPROM.updateByte(cod, ventilation); break; //3.2
          case 35:  EEPROM.updateByte(cod, Temp_Vent_ON); break; //3.2
          case 39:  EEPROM.updateByte(cod, delta_Temp_Vent); break; //3.2

        }
     
  5. Здравствуйте, надеюсь вы в курсе, что у вас в папке с проектом скетч состоит из нескольких файлов?
    Для этого в ардуино среде есть вкладки, можете переключаться между файлами
    Ошибки у вас в том, что не объявлены переменные в скетче, возможно вы открыли не полностью все файлы, их там 6 штук
     

    Вложения:

    Последнее редактирование: 28 окт 2019
    gkit нравится это.
  6. b707

    b707 Гуру

    Простите, но именно это и придется сказать, ибо ошибки элементарнейшие. Что толку что вы "курс Ардуино прошли" - если вы языка Си явно не знаете. Начинать надо не с курса Ардуино, а с языка программирования
     
    gkit нравится это.
  7. parovoZZ

    parovoZZ Гуру

    Переменная
    load
    объявлена?
     
    gkit нравится это.
  8. qwone

    qwone Гик

    похоже враги пишут такой код, что бы остальные запутались.
     
  9. DetSimen

    DetSimen Guest

    а я вапще не понимаю, почему сюда-то надо бежать с вопросами, почему не к автору кода?
     
    gkit нравится это.
  10. Airbus

    Airbus Радиохулиган Модератор

    Он же сказал "курс ардуино имею" а не "курс ардуино прошел" или "изучил".
     
    gkit и arkadyf нравится это.
  11. gkit

    gkit Нуб

    Всё разобрался, макет собрал всё работает. Дело в том, что в главный скетч GrowBox3.2.2 надо было вставить еще скетчи 6 файлов которые идут в архиве . Я на них внимания не обратил и пошел к главному коду. Вставил их и все заработало. Всем спасибо за уделенное мне время:D.
     
  12. parovoZZ

    parovoZZ Гуру

    Никак читать не получается?