Всем доброго времени суток. Возникла проблема в коде при создании одного устройства. 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 день моих знаний видимо мало.
Код (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 //******************************************************************************************* //*******************************************************************************************
Код (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; } //------- конец -получение данных темпер. датчика--- //---------------------------------------------------- }
и ещё 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 }
Здравствуйте, надеюсь вы в курсе, что у вас в папке с проектом скетч состоит из нескольких файлов? Для этого в ардуино среде есть вкладки, можете переключаться между файлами Ошибки у вас в том, что не объявлены переменные в скетче, возможно вы открыли не полностью все файлы, их там 6 штук
Простите, но именно это и придется сказать, ибо ошибки элементарнейшие. Что толку что вы "курс Ардуино прошли" - если вы языка Си явно не знаете. Начинать надо не с курса Ардуино, а с языка программирования
Всё разобрался, макет собрал всё работает. Дело в том, что в главный скетч GrowBox3.2.2 надо было вставить еще скетчи 6 файлов которые идут в архиве . Я на них внимания не обратил и пошел к главному коду. Вставил их и все заработало. Всем спасибо за уделенное мне время.