Автополив c дистанционным управлением Mega+ESP8266+RemoteXY
- Войдите на сайт для отправки комментариев
Чт, 21/10/2021 - 11:46
Приветствую всех. Коротко о ситуации. Нужно было дистанционное управление поливом. Нужно - сделал.
А нужно было срочно, по этому сделал как смог. Сколько делал этот проект - столько и учился языку.
От местных хотелось бы получить критику и советы. Так как я глубокий чайник, хотелось бы услышать, что то типо "так нормальные люди не делают, нормально делать так..."
В общем гуру код поймут и дадут советы. Новичков прошу не лезть)
//модуль RTC #include <iarduino_RTC.h> iarduino_RTC watch(RTC_DS1307); //датчики температуры и влажности #include <TroykaDHT.h> DHT dhtbig(48, DHT21); DHT dhtlitle(49, DHT21); //пины #define PIN_SWITCH_NPK_IN 25 #define PIN_SWITCH_NPK_OUT 27 #define PIN_SWITCH_NPK_LITLE 29 #define PIN_BUTTON_BLEND_BIG 31 #define PIN_BUTTON_BLEND_LITLE 33 #define PIN_DETECT_IN_BIG 35 #define PIN_DETECT_OUT_BIG 37 #define PIN_DETECT_LITLE 39 //макрос таймера #define PERIOD_UNO 2000 #define PERIOD_PrintDayOfRun 360000 #define PERIOD_UNIX 20000 uint32_t timer_uno = 0; uint32_t timer_PrintDayOfRun = 0; uint32_t timer_unix = 0; //переменные ввода времени int Y, M, D, h, m; //флаги кнопок bool flag_button_set_time_watch, flag_button_set_date_of_start, flag_button_set_watering_time_big, flag_button_set_watering_time_litle; //адреса хранения данных в EEPROM #include <EEPROM.h> int adres_Date_of_start_Y = 0; int adres_Date_of_start_M = 2; int adres_Date_of_start_D = 4; int adres_last_watering_big_Y = 6; int adres_last_watering_big_M = 8; int adres_last_watering_big_D = 10; int adres_last_watering_big_h = 12; int adres_last_watering_big_m = 14; int adres_next_watering_big_Y = 16; int adres_next_watering_big_M = 18; int adres_next_watering_big_D = 20; int adres_next_watering_big_h = 22; int adres_next_watering_big_m = 24; int adres_last_watering_litle_Y = 26; int adres_last_watering_litle_M = 28; int adres_last_watering_litle_D = 30; int adres_last_watering_litle_h = 32; int adres_last_watering_litle_m = 34; int adres_next_watering_litle_Y = 36; int adres_next_watering_litle_M = 38; int adres_next_watering_litle_D = 40; int adres_next_watering_litle_h = 42; int adres_next_watering_litle_m = 44; //SD карта #include <SD.h> #include <SPI.h> File myFile; char ssidStr[20]; char passwStr[20]; char tokenStr[35]; // определение режима соединения и подключение библиотеки RemoteXY #define REMOTEXY_MODE__ESP8266_HARDSERIAL_CLOUD #include <RemoteXY.h> // настройки соединения #define REMOTEXY_SERIAL Serial1 #define REMOTEXY_SERIAL_SPEED 115200 const char*REMOTEXY_WIFI_SSID; const char*REMOTEXY_WIFI_PASSWORD; #define REMOTEXY_CLOUD_SERVER "cloud.remotexy.com" #define REMOTEXY_CLOUD_PORT 6376 const char*REMOTEXY_CLOUD_TOKEN; #pragma pack(push, 1) uint8_t RemoteXY_CONF[] = { 255,19,0,15,1,68,4,13,26,5, 130,2,0,0,63,10,0,25,130,1, 0,91,63,9,0,25,131,1,1,92, 14,7,1,130,16,105,110,102,111,0, 131,0,50,92,11,7,2,14,16,226, 154,153,239,184,143,0,67,1,0,1, 63,8,0,16,25,21,130,1,1,11, 61,30,1,28,129,0,51,12,10,6, 1,0,66,105,103,0,129,0,54,19, 5,2,1,0,66,79,88,0,67,0, 3,12,43,5,1,31,26,21,67,0, 3,17,43,5,1,31,26,21,67,0, 24,27,8,4,1,31,27,4,129,0, 3,27,21,4,1,29,68,97,121,32, 111,102,32,114,117,110,58,0,131,0, 17,92,31,7,3,131,16,84,69,78, 84,83,0,129,0,48,77,2,6,2, 16,58,0,129,0,24,77,2,6,2, 16,45,0,129,0,13,77,2,6,2, 16,45,0,129,0,40,73,8,3,2, 16,104,111,117,114,115,0,129,0,52, 73,6,3,2,16,109,105,110,0,129, 0,6,73,5,3,2,16,100,97,121, 0,129,0,15,73,9,3,2,16,109, 111,110,116,104,0,129,0,27,73,7, 3,2,16,121,101,97,114,0,1,3, 3,13,57,6,2,44,16,115,101,116, 32,116,105,109,101,32,119,97,116,99, 104,0,130,1,1,12,61,32,3,28, 2,0,3,14,34,7,3,5,26,31, 31,73,78,0,78,80,75,0,2,0, 3,23,34,7,3,41,26,31,31,79, 85,84,0,78,80,75,0,70,35,39, 14,15,16,3,26,133,39,34,1,3, 26,28,34,6,2,128,16,115,101,116, 32,100,97,116,101,32,111,102,32,114, 117,110,0,67,5,26,22,34,5,2, 16,27,13,130,0,24,21,1,14,2, 28,130,0,61,11,1,79,2,28,130, 0,2,35,59,1,2,28,130,0,2, 20,59,1,2,28,129,0,3,31,27, 4,1,29,76,97,115,116,32,119,97, 116,101,114,105,110,103,58,0,67,0, 25,23,27,4,1,31,30,11,130,0, 2,53,59,1,2,28,130,0,1,11, 1,79,2,28,1,3,3,45,57,7, 2,5,16,115,101,116,32,119,97,116, 101,114,105,110,103,32,116,105,109,101, 32,98,105,103,32,98,111,120,0,67, 5,5,26,16,8,2,16,27,4,129, 0,6,22,14,3,2,30,68,97,121, 32,111,102,32,114,117,110,0,67,5, 3,37,57,7,2,16,27,21,130,0, 2,11,59,1,2,28,7,21,39,77, 9,7,2,16,27,2,7,21,50,77, 9,7,2,16,27,2,7,21,4,77, 9,7,2,16,27,2,7,21,15,77, 9,7,2,16,27,2,7,21,26,77, 9,7,2,16,27,2,129,0,28,85, 6,3,2,16,48,45,57,57,0,129, 0,17,85,6,3,2,16,49,45,49, 50,0,129,0,6,85,6,3,2,16, 49,45,51,49,0,129,0,52,85,6, 3,2,16,48,45,53,57,0,129,0, 41,85,6,3,2,16,48,45,50,51, 0,129,0,3,35,27,4,1,29,78, 101,120,116,32,119,97,116,101,114,105, 110,103,58,0,130,1,1,45,61,26, 3,28,70,19,43,47,10,10,3,26, 133,2,2,0,3,47,38,10,3,5, 26,31,31,73,78,0,78,80,75,0, 67,5,3,55,57,7,2,16,27,21, 1,3,3,63,57,7,2,5,16,115, 101,116,32,119,97,116,101,114,105,110, 103,32,116,105,109,101,32,108,105,116, 108,101,32,98,111,120,0,130,0,2, 71,59,1,2,28,67,0,30,31,22, 4,1,31,26,21,67,0,30,35,22, 4,1,31,26,21,130,1,1,43,61, 23,1,28,129,0,54,49,5,2,1, 0,66,79,88,0,129,0,51,44,10, 5,1,0,76,105,116,108,101,0,129, 0,3,55,27,4,1,29,76,97,115, 116,32,119,97,116,101,114,105,110,103, 58,0,129,0,3,60,27,4,1,29, 78,101,120,116,32,119,97,116,101,114, 105,110,103,58,0,67,0,30,55,21, 4,1,31,26,21,67,0,30,60,21, 4,1,31,26,21,67,0,3,44,43, 5,1,31,26,21,67,0,3,49,43, 5,1,31,26,21,129,0,3,23,18, 4,1,29,68,97,116,101,32,111,102, 32,114,117,110,58,0,129,0,56,13, 5,3,3,0,66,105,103,0,129,0, 55,46,6,3,3,0,76,105,116,108, 101,0,130,2,2,32,59,11,3,0, 2,1,5,34,43,7,3,0,26,31, 31,77,73,88,0,78,80,75,0,70, 18,51,34,7,7,3,26,31,2,130, 2,2,59,59,11,3,0,2,1,5, 61,43,7,3,0,26,31,31,77,73, 88,0,78,80,75,0,70,18,51,61, 7,7,3,26,31,2,70,35,51,19, 2,2,1,26,133,39,34,70,19,51, 49,2,2,1,26,133,2,70,18,59, 19,2,2,1,26,31,2,70,18,59, 49,2,2,1,26,31,2,129,0,57, 16,4,2,3,0,66,79,88,0,129, 0,57,49,5,2,3,0,66,79,88, 0,130,0,2,89,59,1,2,28 }; // структура определяет все переменные и события вашего интерфейса управления struct { // input variables uint8_t button_set_time_watch; // =1 если кнопка нажата, иначе =0 uint8_t switch_npk_in; // =1 если переключатель включен и =0 если отключен uint8_t switch_npk_out; // =1 если переключатель включен и =0 если отключен uint8_t button_set_date_of_start; // =1 если кнопка нажата, иначе =0 uint8_t button_set_watering_time_big; // =1 если кнопка нажата, иначе =0 int16_t edit_time_h; // 32767.. +32767 int16_t edit_time_m; // 32767.. +32767 int16_t edit_time_D; // 32767.. +32767 int16_t edit_time_M; // 32767.. +32767 int16_t edit_time_Y; // 32767.. +32767 uint8_t switch_npk_litle; // =1 если переключатель включен и =0 если отключен uint8_t button_set_watering_time_litle; // =1 если кнопка нажата, иначе =0 uint8_t switch_mix_big; // =1 если переключатель включен и =0 если отключен uint8_t switch_mix_litle; // =1 если переключатель включен и =0 если отключен // output variables char text_watch_all[21]; // =строка UTF8 оканчивающаяся нулем char text_H_Big[21]; // =строка UTF8 оканчивающаяся нулем char text_T_Big[21]; // =строка UTF8 оканчивающаяся нулем char text_day_of_run[4]; // =строка UTF8 оканчивающаяся нулем uint8_t led_npk_big; // led state 0 .. 2 char text_date_of_startDUBLE[13]; // =строка UTF8 оканчивающаяся нулем char text_date_of_start[11]; // =строка UTF8 оканчивающаяся нулем char text_day_of_runDUBLE[4]; // =строка UTF8 оканчивающаяся нулем char text_watering_time_bigDUBLE[21]; // =строка UTF8 оканчивающаяся нулем uint8_t led_npk_litle; // led state 0 .. 1 char text_watering_time_litleDUBLE[21]; // =строка UTF8 оканчивающаяся нулем char text_last_watering_big[21]; // =строка UTF8 оканчивающаяся нулем char text_watering_time_big[21]; // =строка UTF8 оканчивающаяся нулем char text_last_watering_litle[21]; // =строка UTF8 оканчивающаяся нулем char text_watering_time_litle[21]; // =строка UTF8 оканчивающаяся нулем char text_H_Litle[21]; // =строка UTF8 оканчивающаяся нулем char text_T_Litle[21]; // =строка UTF8 оканчивающаяся нулем uint8_t led_mix_big; // led state 0 .. 1 uint8_t led_mix_litle; // led state 0 .. 1 uint8_t led_npk_bigD; // led state 0 .. 2 uint8_t led_npk_litleD; // led state 0 .. 1 uint8_t led_mix_bigD; // led state 0 .. 1 uint8_t led_mix_litleD; // led state 0 .. 1 // other variable uint8_t connect_flag; // =1 if wire connected, else =0 } RemoteXY; #pragma pack(pop) void setup(){ //читаем с SD card имя сети, пароль сети и токен RemoteXY для подключения Serial.begin(115200); while (!Serial) { ; } if (!SD.begin(53)) { while (1); } //имя сети myFile = SD.open("ssid.txt"); if (myFile) { int i = 0; while (myFile.available()) { char buff = myFile.read(); ssidStr[i] = buff; i++; } ssidStr[i] = 0; REMOTEXY_WIFI_SSID = ssidStr; } myFile.close(); //пароль сети myFile = SD.open("pass.txt"); if (myFile) { int i = 0; while (myFile.available()) { char buff = myFile.read(); passwStr[i] = buff; i++; } passwStr[i] = 0; REMOTEXY_WIFI_PASSWORD = passwStr; } myFile.close(); //токен RemoteXY myFile = SD.open("token.txt"); if (myFile) { int i = 0; while (myFile.available()) { char buff = myFile.read(); tokenStr[i] = buff; i++; } tokenStr[i] = 0; REMOTEXY_CLOUD_TOKEN = tokenStr; } myFile.close(); //подключаемся remotexy = new CRemoteXY ( RemoteXY_CONF_PROGMEM, &RemoteXY, "", new CRemoteXYConnectionCloud ( new CRemoteXYComm_ESP8266 ( new CRemoteXYStream_HardSerial ( &Serial1, 115200),REMOTEXY_WIFI_SSID, REMOTEXY_WIFI_PASSWORD),REMOTEXY_CLOUD_SERVER,6376,REMOTEXY_CLOUD_TOKEN)); //инициируем модуль RTC watch.begin(); //определяемся с пинами //полив большая палатка pinMode (PIN_SWITCH_NPK_IN, OUTPUT); digitalWrite(PIN_SWITCH_NPK_IN, HIGH); pinMode (PIN_DETECT_IN_BIG, INPUT_PULLUP); //слив большая палатка pinMode (PIN_SWITCH_NPK_OUT, OUTPUT); digitalWrite(PIN_SWITCH_NPK_OUT, HIGH); pinMode (PIN_DETECT_OUT_BIG, INPUT_PULLUP); //перемешивание большая бочка pinMode (PIN_BUTTON_BLEND_BIG, OUTPUT); digitalWrite(PIN_BUTTON_BLEND_BIG, HIGH); //полив малая палатка pinMode (PIN_SWITCH_NPK_LITLE, OUTPUT); digitalWrite(PIN_SWITCH_NPK_LITLE, HIGH); pinMode (PIN_DETECT_LITLE, INPUT_PULLUP); //перемешивание малая бочка pinMode (PIN_BUTTON_BLEND_LITLE, OUTPUT); digitalWrite(PIN_BUTTON_BLEND_LITLE, HIGH); //выводим сохраненные установки PrintNextWateringBig(); PrintNextWateringLitle(); PrintLastWateringBig(); PrintLastWateringLitle(); PrintStartDateBig(); PrintDayOfRun(); } void loop() { RemoteXY_Handler (); UpdatePeriodUno(); UpdatePeriodDuo(); UpdatePeriodNextWatering(); Blend(); SetTimeWatch(); SetDateOfStart(); SetSaveNextWateringBig(); SetSaveNextWateringLitle(); SwitchINnpk(); SwitchOUTnpk(); SwitchINlitle(); } //установка времени void UpdateTimeWatch() { ReadEditTime(); watch.settime(-1, m, h, D, M, Y); } //автополив большой палатки по дате и времени void UnixTimeWateringBig(){ watch.gettime(); int god = watch.year; int mes = watch.month; int den = watch.day; int chas = watch.Hours; int minut = watch.minutes; int godnew = EEPROM.read(adres_next_watering_big_Y); int mesnew = EEPROM.read(adres_next_watering_big_M); int dennew = EEPROM.read(adres_next_watering_big_D); int chasnew = EEPROM.read(adres_next_watering_big_h); int minutnew = EEPROM.read(adres_next_watering_big_m); if (god == godnew && mes == mesnew && den == dennew && chas == chasnew && minut == minutnew){ RemoteXY.switch_npk_in = 1; UpdateNextWateringBig(); } } ////автополив малой палатки по дате и времени void UnixTimeWateringLitle(){ watch.gettime(); int god = watch.year; int mes = watch.month; int den = watch.day; int chas = watch.Hours; int minut = watch.minutes; int godn = EEPROM.read(adres_next_watering_litle_Y); int mesn = EEPROM.read(adres_next_watering_litle_M); int denn = EEPROM.read(adres_next_watering_litle_D); int chasn = EEPROM.read(adres_next_watering_litle_h); int minutn = EEPROM.read(adres_next_watering_litle_m); if (god == godn && mes == mesn && den == denn && chas == chasn && minut == minutn){ UpdateNextWateringLitle(); RemoteXY.switch_npk_litle = 1; } } //устанавливаем следующий полив большой палатки через 3 дня void UpdateNextWateringBig(){ watch.gettime(); int newMont, dayPlus; if (watch.month == 2) { newMont = 28; } else if (watch.month == 1 || watch.month == 3 || watch.month == 5 || watch.month == 7 || watch.month == 8 || watch.month == 10 || watch.month == 12) { newMont = 31; } else newMont = 30; int newD = watch.day; int newM = watch.month; int newY = watch.year; newD = newD+3; if (newD>newMont){ newD = newD - newMont; newM = newM+1; if (newM>12){ newM = 1; newY = newY+1; } } EEPROM.update(adres_next_watering_big_Y,newY); EEPROM.update(adres_next_watering_big_M,newM); EEPROM.update(adres_next_watering_big_D,newD); PrintNextWateringBig(); } //устанавливаем следующий полив малой палатки через 3 дня void UpdateNextWateringLitle(){ watch.gettime(); int newMont, dayPlus; if (watch.month == 2) { newMont = 28; } else if (watch.month == 1 || watch.month == 3 || watch.month == 5 || watch.month == 7 || watch.month == 8 || watch.month == 10 || watch.month == 12) { newMont = 31; } else newMont = 30; int newD = watch.day; int newM = watch.month; int newY = watch.year; newD = newD+3; if (newD>newMont){ newD = newD - newMont; newM = newM+1; if (newM>12){ newM = 1; newY = newY+1; } } EEPROM.update(adres_next_watering_litle_Y,newY); EEPROM.update(adres_next_watering_litle_M,newM); EEPROM.update(adres_next_watering_litle_D,newD); PrintNextWateringLitle(); } //обновляем отображаемое время и данные датчиков температуры и влажности void UpdatePeriodUno(){ if (millis() - timer_uno >= PERIOD_UNO) { WatchTime(); UpdateDHT(); do { timer_uno += PERIOD_UNO; if (timer_uno < PERIOD_UNO) break; } while (timer_uno < millis() - PERIOD_UNO); } } //обновляем количество дней прошедшее от установленной даты старта void UpdatePeriodDuo(){ if (millis() - timer_PrintDayOfRun >= PERIOD_PrintDayOfRun) { PrintDayOfRun(); do { timer_PrintDayOfRun += PERIOD_PrintDayOfRun; if (timer_PrintDayOfRun < PERIOD_PrintDayOfRun) break; } while (timer_PrintDayOfRun < millis() - PERIOD_PrintDayOfRun); } } //проверяем не пора ли включить автополив void UpdatePeriodNextWatering(){ if (millis() - timer_unix >= PERIOD_UNIX) { UnixTimeWateringBig(); UnixTimeWateringLitle(); do { timer_unix += PERIOD_UNIX; if (timer_unix < PERIOD_UNIX) break; } while (timer_unix < millis() - PERIOD_UNIX); } } //считываем инфу с датчиков темп. и влаж. void UpdateDHT(){ dhtbig.read(); if (dhtbig.getState() == DHT_OK) { String valueHumBIGstring(dhtbig.getHumidity(), 1); const char * valueHumBIG = valueHumBIGstring.c_str(); sprintf(RemoteXY.text_H_Big, "Humidity: %s%%" , valueHumBIG); String valueTempBIGstring(dhtbig.getTemperatureC(), 1); const char * valueTempBIG = valueTempBIGstring.c_str(); sprintf(RemoteXY.text_T_Big, "Temperature: %s°" , valueTempBIG); } else { sprintf(RemoteXY.text_H_Big, "NO"); sprintf(RemoteXY.text_T_Big, "SENSOR"); } dhtlitle.read(); if (dhtlitle.getState() == DHT_OK) { String valueHumLITLEstring(dhtlitle.getHumidity(), 1); const char * valueHumLITLE = valueHumLITLEstring.c_str(); sprintf(RemoteXY.text_H_Litle, "Humidity: %s%%" , valueHumLITLE); String valueTempLITLEstring(dhtlitle.getTemperatureC(), 1); const char * valueTempLITLE = valueTempLITLEstring.c_str(); sprintf(RemoteXY.text_T_Litle, "Temperature: %s°" , valueTempLITLE); } else { sprintf(RemoteXY.text_H_Litle, "NO"); sprintf(RemoteXY.text_T_Litle, "SENSOR"); } } //перемешивание большой и малой бочки void Blend(){ switch(RemoteXY.switch_mix_big){ case 0: digitalWrite(PIN_BUTTON_BLEND_BIG, HIGH); RemoteXY.led_mix_big = 0; RemoteXY.led_mix_bigD = 0; break; case 1: digitalWrite(PIN_BUTTON_BLEND_BIG, LOW); RemoteXY.led_mix_big = 1; RemoteXY.led_mix_bigD = 1; break; } switch(RemoteXY.switch_mix_litle){ case 0: digitalWrite(PIN_BUTTON_BLEND_LITLE, HIGH); RemoteXY.led_mix_litle = 0; RemoteXY.led_mix_litleD = 0; break; case 1: digitalWrite(PIN_BUTTON_BLEND_LITLE, LOW); RemoteXY.led_mix_litle = 1; RemoteXY.led_mix_litleD = 1; break; } } //сохраняем последний полив большой палатки void SaveLastWateringBig() { watch.gettime(); EEPROM.update(adres_last_watering_big_Y, watch.year); EEPROM.update(adres_last_watering_big_M, watch.month); EEPROM.update(adres_last_watering_big_D, watch.day); EEPROM.update(adres_last_watering_big_h, watch.Hours); EEPROM.update(adres_last_watering_big_m, watch.minutes); } //сохраняем последний полив малой палатки void SaveLastWateringLitle() { watch.gettime(); EEPROM.update(adres_last_watering_litle_Y, watch.year); EEPROM.update(adres_last_watering_litle_M, watch.month); EEPROM.update(adres_last_watering_litle_D, watch.day); EEPROM.update(adres_last_watering_litle_h, watch.Hours); EEPROM.update(adres_last_watering_litle_m, watch.minutes); } //сохраняем следующий полив большой палатки void SaveNextWateringBig() { ReadEditTime(); EEPROM.update(adres_next_watering_big_Y, Y); EEPROM.update(adres_next_watering_big_M, M); EEPROM.update(adres_next_watering_big_D, D); EEPROM.update(adres_next_watering_big_h, h); EEPROM.update(adres_next_watering_big_m, m); } //сохраняем следующий полив малой палатки void SaveNextWateringLitle() { ReadEditTime(); EEPROM.update(adres_next_watering_litle_Y, Y); EEPROM.update(adres_next_watering_litle_M, M); EEPROM.update(adres_next_watering_litle_D, D); EEPROM.update(adres_next_watering_litle_h, h); EEPROM.update(adres_next_watering_litle_m, m); } //сохраняем дату старта большой палатки void SaveStartDateBig() { ReadEditTime(); EEPROM.update(adres_Date_of_start_Y, Y); EEPROM.update(adres_Date_of_start_M, M); EEPROM.update(adres_Date_of_start_D, D); } //кнопка установки времени void SetTimeWatch() { bool button_set_time_watch = RemoteXY.button_set_time_watch; if (button_set_time_watch && !flag_button_set_time_watch) { flag_button_set_time_watch = true; UpdateTimeWatch(); } if (!button_set_time_watch && flag_button_set_time_watch) { flag_button_set_time_watch = false; } } //кнопка установки даты начала цикла void SetDateOfStart() { bool button_set_date_of_start = RemoteXY.button_set_date_of_start; if (button_set_date_of_start && !flag_button_set_date_of_start) { flag_button_set_date_of_start = true; SaveStartDateBig(); PrintStartDateBig(); PrintDayOfRun(); } if (!button_set_date_of_start && flag_button_set_date_of_start) { flag_button_set_date_of_start = false; } } //кнопка установки даты и времени следующего полива большой палатки void SetSaveNextWateringBig() { bool button_set_watering_time_big = RemoteXY.button_set_watering_time_big; if (button_set_watering_time_big && !flag_button_set_watering_time_big) { flag_button_set_watering_time_big = true; SaveNextWateringBig(); PrintNextWateringBig(); } if (!button_set_watering_time_big && flag_button_set_watering_time_big) { flag_button_set_watering_time_big = false; } } //кнопка установки даты и времени следующего полива малой палатки void SetSaveNextWateringLitle() { bool button_set_watering_time_litle = RemoteXY.button_set_watering_time_litle; if (button_set_watering_time_litle && !flag_button_set_watering_time_litle) { flag_button_set_watering_time_litle = true; SaveNextWateringLitle(); PrintNextWateringLitle(); } if (!button_set_watering_time_litle && flag_button_set_watering_time_litle) { flag_button_set_watering_time_litle = false; } } //Cloud переключатель полива большой палатки void SwitchINnpk() { switch (RemoteXY.switch_npk_in) { case 0: { digitalWrite(PIN_SWITCH_NPK_IN, HIGH); if (RemoteXY.switch_npk_out == 0) { RemoteXY.led_npk_big = 0; RemoteXY.led_npk_bigD = 0; } break; } case 1: { if (RemoteXY.switch_npk_out == 1){ RemoteXY.switch_npk_in = 0; break; }else if (RemoteXY.switch_npk_out == 0){ digitalWrite(PIN_SWITCH_NPK_IN, LOW); RemoteXY.led_npk_big = 1; RemoteXY.led_npk_bigD = 1; if (DETECT_IN_BIG()){ SaveLastWateringBig(); PrintLastWateringBig(); UpdateNextWateringBig(); RemoteXY.switch_npk_in = 0; RemoteXY.switch_npk_out = 1; } } break; } } } //читаем датчик уровня полива большой палатки bool DETECT_IN_BIG(){ bool IN_BIG; if (digitalRead(PIN_DETECT_IN_BIG)==1){ IN_BIG = false; }else if (digitalRead(PIN_DETECT_IN_BIG)==0){ IN_BIG = true; } return IN_BIG; } //Cloud переключатель слива большой палатки void SwitchOUTnpk() { switch (RemoteXY.switch_npk_out) { case 0: { digitalWrite(PIN_SWITCH_NPK_OUT, HIGH); if (RemoteXY.switch_npk_in == 0) { RemoteXY.led_npk_big = 0; RemoteXY.led_npk_bigD = 0; break; } break; } case 1: { if (RemoteXY.switch_npk_in == 1){ RemoteXY.switch_npk_out = 0; break; }else if (RemoteXY.switch_npk_in == 0){ digitalWrite(PIN_SWITCH_NPK_OUT, LOW); RemoteXY.led_npk_big = 2; RemoteXY.led_npk_bigD = 2; if (DETECT_OUT_BIG()){ digitalWrite(PIN_SWITCH_NPK_OUT, HIGH); RemoteXY.switch_npk_out = 0; RemoteXY.led_npk_big = 0; RemoteXY.led_npk_bigD = 0; break; } break; } } } } //читаем датчик уровня слива большой палатки bool DETECT_OUT_BIG(){ bool OUT_BIG; if (digitalRead(PIN_DETECT_OUT_BIG)==1){ OUT_BIG = false; }else if (digitalRead(PIN_DETECT_OUT_BIG)==0){ OUT_BIG = true; } return OUT_BIG; } //Cloud переключатель полива малой палатки void SwitchINlitle() { switch (RemoteXY.switch_npk_litle) { case 0: digitalWrite(PIN_SWITCH_NPK_LITLE , HIGH); RemoteXY.led_npk_litle = 0; RemoteXY.led_npk_litleD = 0; break; case 1: { if (DETECT_LITLE()){ SaveLastWateringLitle(); PrintLastWateringLitle(); UpdateNextWateringLitle(); RemoteXY.switch_npk_litle = 0; RemoteXY.led_npk_litle = 0; RemoteXY.led_npk_litleD = 0; break; } digitalWrite(PIN_SWITCH_NPK_LITLE, LOW); RemoteXY.led_npk_litle = 1; RemoteXY.led_npk_litleD = 1; break; } } } //читаем датчик уровня полива малой палатки bool DETECT_LITLE(){ bool DETECTED_LITLE; if (digitalRead(PIN_DETECT_LITLE)==1){ DETECTED_LITLE = false; }else if (digitalRead(PIN_DETECT_LITLE)==0){ DETECTED_LITLE = true; } return DETECTED_LITLE; } //отображаем время и дату последнего полива большой палатки void PrintLastWateringBig() { int LastWatYear = EEPROM.read(adres_last_watering_big_Y) + 2000; if (EEPROM.read(adres_last_watering_big_D) >= 10 && EEPROM.read(adres_last_watering_big_M) >= 10) { if (EEPROM.read(adres_last_watering_big_h) >= 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_big, "%d:%d %d-%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_h) < 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_big, "0%d:%d %d-%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_h) >= 10 && EEPROM.read(adres_last_watering_big_m) < 10) { sprintf (RemoteXY.text_last_watering_big, "%d:0%d %d-%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else sprintf (RemoteXY.text_last_watering_big, "0%d:0%d %d-%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_D) >= 10 && EEPROM.read(adres_last_watering_big_M) <= 9) { if (EEPROM.read(adres_last_watering_big_h) >= 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_big, "%d:%d %d-0%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_h) < 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_big, "0%d:%d %d-0%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_h) >= 10 && EEPROM.read(adres_last_watering_big_m) < 10) { sprintf (RemoteXY.text_last_watering_big, "%d:0%d %d-0%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else sprintf (RemoteXY.text_last_watering_big, "0%d:0%d %d-0%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_D) <= 9 && EEPROM.read(adres_last_watering_big_M) >= 10) { if (EEPROM.read(adres_last_watering_big_h) >= 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_big, "%d:%d 0%d-%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_h) < 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_big, "0%d:%d 0%d-%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_h) >= 10 && EEPROM.read(adres_last_watering_big_m) < 10) { sprintf (RemoteXY.text_last_watering_big, "%d:0%d 0%d-%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else sprintf (RemoteXY.text_last_watering_big, "0%d:0%d %0%d-%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_D) <= 9 && EEPROM.read(adres_last_watering_big_M) <= 9) { if (EEPROM.read(adres_last_watering_big_h) >= 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_big, "%d:%d 0%d-0%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_h) < 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_big, "0%d:%d 0%d-0%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_big_h) >= 10 && EEPROM.read(adres_last_watering_big_m) < 10) { sprintf (RemoteXY.text_last_watering_big, "%d:0%d 0%d-0%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } else sprintf (RemoteXY.text_last_watering_big, "0%d:0%d 0%d-0%d-%d", EEPROM.read(adres_last_watering_big_h), EEPROM.read(adres_last_watering_big_m), EEPROM.read(adres_last_watering_big_D), EEPROM.read(adres_last_watering_big_M), LastWatYear); } } //отображаем время и дату последнего полива малой палатки void PrintLastWateringLitle() { int LastWatYear = EEPROM.read(adres_last_watering_litle_Y) + 2000; if (EEPROM.read(adres_last_watering_litle_D) >= 10 && EEPROM.read(adres_last_watering_litle_M) >= 10) { if (EEPROM.read(adres_last_watering_litle_h) >= 10 && EEPROM.read(adres_last_watering_litle_m) >= 10) { sprintf (RemoteXY.text_last_watering_litle, "%d:%d %d-%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_h) < 10 && EEPROM.read(adres_last_watering_litle_m) >= 10) { sprintf (RemoteXY.text_last_watering_litle, "0%d:%d %d-%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_h) >= 10 && EEPROM.read(adres_last_watering_litle_m) < 10) { sprintf (RemoteXY.text_last_watering_litle, "%d:0%d %d-%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else sprintf (RemoteXY.text_last_watering_litle, "0%d:0%d %d-%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_D) >= 10 && EEPROM.read(adres_last_watering_litle_M) <= 9) { if (EEPROM.read(adres_last_watering_litle_h) >= 10 && EEPROM.read(adres_last_watering_litle_m) >= 10) { sprintf (RemoteXY.text_last_watering_litle, "%d:%d %d-0%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_h) < 10 && EEPROM.read(adres_last_watering_litle_m) >= 10) { sprintf (RemoteXY.text_last_watering_litle, "0%d:%d %d-0%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_h) >= 10 && EEPROM.read(adres_last_watering_litle_m) < 10) { sprintf (RemoteXY.text_last_watering_litle, "%d:0%d %d-0%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else sprintf (RemoteXY.text_last_watering_litle, "0%d:0%d %d-0%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_D) <= 9 && EEPROM.read(adres_last_watering_litle_M) >= 10) { if (EEPROM.read(adres_last_watering_litle_h) >= 10 && EEPROM.read(adres_last_watering_litle_m) >= 10) { sprintf (RemoteXY.text_last_watering_litle, "%d:%d 0%d-%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_h) < 10 && EEPROM.read(adres_last_watering_litle_m) >= 10) { sprintf (RemoteXY.text_last_watering_litle, "0%d:%d 0%d-%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_h) >= 10 && EEPROM.read(adres_last_watering_litle_m) < 10) { sprintf (RemoteXY.text_last_watering_litle, "%d:0%d 0%d-%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else sprintf (RemoteXY.text_last_watering_litle, "0%d:0%d %0%d-%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_D) <= 9 && EEPROM.read(adres_last_watering_litle_M) <= 9) { if (EEPROM.read(adres_last_watering_litle_h) >= 10 && EEPROM.read(adres_last_watering_litle_m) >= 10) { sprintf (RemoteXY.text_last_watering_litle, "%d:%d 0%d-0%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_h) < 10 && EEPROM.read(adres_last_watering_big_m) >= 10) { sprintf (RemoteXY.text_last_watering_litle, "0%d:%d 0%d-0%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else if (EEPROM.read(adres_last_watering_litle_h) >= 10 && EEPROM.read(adres_last_watering_litle_m) < 10) { sprintf (RemoteXY.text_last_watering_litle, "%d:0%d 0%d-0%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } else sprintf (RemoteXY.text_last_watering_litle, "0%d:0%d 0%d-0%d-%d", EEPROM.read(adres_last_watering_litle_h), EEPROM.read(adres_last_watering_litle_m), EEPROM.read(adres_last_watering_litle_D), EEPROM.read(adres_last_watering_litle_M), LastWatYear); } } //отображаем время и дату следующего полива малой палатки void PrintNextWateringLitle() { int NextWYear = EEPROM.read(adres_next_watering_litle_Y) + 2000; if (EEPROM.read(adres_next_watering_litle_D) >= 10 && EEPROM.read(adres_next_watering_litle_M) >= 10) { if (EEPROM.read(adres_next_watering_litle_h) >= 10 && EEPROM.read(adres_next_watering_litle_m) >= 10) { sprintf (RemoteXY.text_watering_time_litle, "%d:%d %d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "%d:%d %d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else if (EEPROM.read(adres_next_watering_litle_h) < 10 && EEPROM.read(adres_next_watering_litle_m) >= 10) { sprintf (RemoteXY.text_watering_time_litle, "0%d:%d %d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "0%d:%d %d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else if (EEPROM.read(adres_next_watering_litle_h) >= 10 && EEPROM.read(adres_next_watering_litle_m) < 10) { sprintf (RemoteXY.text_watering_time_litle, "%d:0%d %d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "%d:0%d %d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else { sprintf (RemoteXY.text_watering_time_litle, "0%d:0%d %d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "0%d:0%d %d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } } else if (EEPROM.read(adres_next_watering_litle_D) >= 10 && EEPROM.read(adres_next_watering_litle_M) <= 9) { if (EEPROM.read(adres_next_watering_litle_h) >= 10 && EEPROM.read(adres_next_watering_litle_m) >= 10) { sprintf (RemoteXY.text_watering_time_litle, "%d:%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "%d:%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else if (EEPROM.read(adres_next_watering_litle_h) < 10 && EEPROM.read(adres_next_watering_litle_m) >= 10) { sprintf (RemoteXY.text_watering_time_litle, "0%d:%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "0%d:%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else if (EEPROM.read(adres_next_watering_litle_h) >= 10 && EEPROM.read(adres_next_watering_litle_m) < 10) { sprintf (RemoteXY.text_watering_time_litle, "%d:0%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "%d:0%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else { sprintf (RemoteXY.text_watering_time_litle, "0%d:0%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "0%d:0%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } } else if (EEPROM.read(adres_next_watering_litle_D) <= 9 && EEPROM.read(adres_next_watering_litle_M) >= 10) { if (EEPROM.read(adres_next_watering_litle_h) >= 10 && EEPROM.read(adres_next_watering_litle_m) >= 10) { sprintf (RemoteXY.text_watering_time_litle, "%d:%d 0%d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "%d:%d 0%d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else if (EEPROM.read(adres_next_watering_litle_h) < 10 && EEPROM.read(adres_next_watering_litle_m) >= 10) { sprintf (RemoteXY.text_watering_time_litle, "0%d:%d 0%d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "0%d:%d 0%d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else if (EEPROM.read(adres_next_watering_litle_h) >= 10 && EEPROM.read(adres_next_watering_litle_m) < 10) { sprintf (RemoteXY.text_watering_time_litle, "%d:0%d 0%d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "%d:0%d 0%d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else { sprintf (RemoteXY.text_watering_time_litle, "0%d:0%d 0%d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "0%d:0%d 0%d-%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } } else if (EEPROM.read(adres_next_watering_litle_D) <= 9 && EEPROM.read(adres_next_watering_litle_M) <= 9) { if (EEPROM.read(adres_next_watering_litle_h) >= 10 && EEPROM.read(adres_next_watering_litle_m) >= 10) { sprintf (RemoteXY.text_watering_time_litle, "%d:%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "%d:%d %d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else if (EEPROM.read(adres_next_watering_litle_h) < 10 && EEPROM.read(adres_next_watering_litle_m) >= 10) { sprintf (RemoteXY.text_watering_time_litle, "0%d:%d 0%d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "0%d:%d 0%d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else if (EEPROM.read(adres_next_watering_litle_h) >= 10 && EEPROM.read(adres_next_watering_litle_m) < 10) { sprintf (RemoteXY.text_watering_time_litle, "%d:0%d 0%d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "%d:0%d %0%d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } else { sprintf (RemoteXY.text_watering_time_litle, "0%d:0%d 0%d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); sprintf (RemoteXY.text_watering_time_litleDUBLE, "0%d:0%d 0%d-0%d-%d",EEPROM.read(adres_next_watering_litle_h), EEPROM.read(adres_next_watering_litle_m), EEPROM.read(adres_next_watering_litle_D), EEPROM.read(adres_next_watering_litle_M), NextWYear); } } } //отображаем время и дату следующего полива большой палатки void PrintNextWateringBig() { int NextWYear = EEPROM.read(adres_next_watering_big_Y) + 2000; if (EEPROM.read(adres_next_watering_big_D) >= 10 && EEPROM.read(adres_next_watering_big_M) >= 10) { if (EEPROM.read(adres_next_watering_big_h)>=10&&EEPROM.read(adres_next_watering_big_m)>=10){ sprintf (RemoteXY.text_watering_time_big, "%d:%d %d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "%d:%d %d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else if (EEPROM.read(adres_next_watering_big_h)<10&&EEPROM.read(adres_next_watering_big_m)>=10){ sprintf (RemoteXY.text_watering_time_big, "0%d:%d %d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "0%d:%d %d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else if (EEPROM.read(adres_next_watering_big_h)>=10&&EEPROM.read(adres_next_watering_big_m)<10){ sprintf (RemoteXY.text_watering_time_big, "%d:0%d %d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "%d:0%d %d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else { sprintf (RemoteXY.text_watering_time_big, "0%d:0%d %d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "0%d:0%d %d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); } } else if (EEPROM.read(adres_next_watering_big_D) >= 10 && EEPROM.read(adres_next_watering_big_M) <= 9) { if (EEPROM.read(adres_next_watering_big_h)>=10&&EEPROM.read(adres_next_watering_big_m)>=10){ sprintf (RemoteXY.text_watering_time_big, "%d:%d %d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "%d:%d %d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else if (EEPROM.read(adres_next_watering_big_h)<10&&EEPROM.read(adres_next_watering_big_m)>=10){ sprintf (RemoteXY.text_watering_time_big, "0%d:%d %d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "0%d:%d %d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else if (EEPROM.read(adres_next_watering_big_h)>=10&&EEPROM.read(adres_next_watering_big_m)<10){ sprintf (RemoteXY.text_watering_time_big, "%d:0%d %d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "%d:0%d %d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else { sprintf (RemoteXY.text_watering_time_big, "0%d:0%d %d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "0%d:0%d %d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); } } else if (EEPROM.read(adres_next_watering_big_D) <= 9 && EEPROM.read(adres_next_watering_big_M) >= 10) { if (EEPROM.read(adres_next_watering_big_h)>=10&&EEPROM.read(adres_next_watering_big_m)>=10){ sprintf (RemoteXY.text_watering_time_big, "%d:%d 0%d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "%d:%d 0%d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else if (EEPROM.read(adres_next_watering_big_h)<10&&EEPROM.read(adres_next_watering_big_m)>=10){ sprintf (RemoteXY.text_watering_time_big, "0%d:%d 0%d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "0%d:%d 0%d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else if (EEPROM.read(adres_next_watering_big_h)>=10&&EEPROM.read(adres_next_watering_big_m)<10){ sprintf (RemoteXY.text_watering_time_big, "%d:0%d 0%d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "%d:0%d 0%d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else { sprintf (RemoteXY.text_watering_time_big, "0%d:0%d 0%d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "0%d:0%d 0%d-%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); } } else if (EEPROM.read(adres_next_watering_big_D) <= 9 && EEPROM.read(adres_next_watering_big_M) <= 9) { if (EEPROM.read(adres_next_watering_big_h)>=10&&EEPROM.read(adres_next_watering_big_m)>=10){ sprintf (RemoteXY.text_watering_time_big, "%d:%d 0%d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "%d:%d 0%d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else if (EEPROM.read(adres_next_watering_big_h)<10&&EEPROM.read(adres_next_watering_big_m)>=10){ sprintf (RemoteXY.text_watering_time_big, "0%d:%d 0%d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "0%d:%d 0%d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else if (EEPROM.read(adres_next_watering_big_h)>=10&&EEPROM.read(adres_next_watering_big_m)<10){ sprintf (RemoteXY.text_watering_time_big, "%d:0%d 0%d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "%d:0%d 0%d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); }else { sprintf (RemoteXY.text_watering_time_big, "0%d:0%d 0%d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); sprintf (RemoteXY.text_watering_time_bigDUBLE, "0%d:0%d 0%d-0%d-%d", EEPROM.read(adres_next_watering_big_h), EEPROM.read(adres_next_watering_big_m), EEPROM.read(adres_next_watering_big_D), EEPROM.read(adres_next_watering_big_M), NextWYear); } } } //отображаем выставленную дату старта цикла void PrintStartDateBig() { if ((EEPROM.read(adres_Date_of_start_D) < 10) && (EEPROM.read(adres_Date_of_start_M) < 10)) { sprintf (RemoteXY.text_date_of_start, "0%d-0%d-%d", EEPROM.read(adres_Date_of_start_D), EEPROM.read(adres_Date_of_start_M), (2000 + EEPROM.read(adres_Date_of_start_Y))); sprintf (RemoteXY.text_date_of_startDUBLE, "0%d-0%d-%d", EEPROM.read(adres_Date_of_start_D), EEPROM.read(adres_Date_of_start_M), (2000 + EEPROM.read(adres_Date_of_start_Y))); } else if ((EEPROM.read(adres_Date_of_start_D) < 10) && (EEPROM.read(adres_Date_of_start_M) >= 10)) { sprintf (RemoteXY.text_date_of_start, "0%d-%d-%d", EEPROM.read(adres_Date_of_start_D), EEPROM.read(adres_Date_of_start_M), (2000 + EEPROM.read(adres_Date_of_start_Y))); sprintf (RemoteXY.text_date_of_startDUBLE, "0%d-%d-%d", EEPROM.read(adres_Date_of_start_D), EEPROM.read(adres_Date_of_start_M), (2000 + EEPROM.read(adres_Date_of_start_Y))); } else if ((EEPROM.read(adres_Date_of_start_D) >= 10) && (EEPROM.read(adres_Date_of_start_M) < 10)) { sprintf (RemoteXY.text_date_of_start, "%d-0%d-%d", EEPROM.read(adres_Date_of_start_D), EEPROM.read(adres_Date_of_start_M), (2000 + EEPROM.read(adres_Date_of_start_Y))); sprintf (RemoteXY.text_date_of_startDUBLE, "%d-0%d-%d", EEPROM.read(adres_Date_of_start_D), EEPROM.read(adres_Date_of_start_M), (2000 + EEPROM.read(adres_Date_of_start_Y))); } else { sprintf(RemoteXY.text_date_of_start, "%d-%d-%d", EEPROM.read(adres_Date_of_start_D), EEPROM.read(adres_Date_of_start_M), (2000 + EEPROM.read(adres_Date_of_start_Y))); sprintf(RemoteXY.text_date_of_startDUBLE, "%d-%d-%d", EEPROM.read(adres_Date_of_start_D), EEPROM.read(adres_Date_of_start_M), (2000 + EEPROM.read(adres_Date_of_start_Y))); } } //отображаем количество дней прошедших со старта void PrintDayOfRun() { watch.gettime(); int UnixDate_of_start = ((watch.year * 365) - (EEPROM.read(adres_Date_of_start_Y) * 365)) + ((watch.month * 30) - (EEPROM.read(adres_Date_of_start_M) * 30)) + (watch.day - EEPROM.read(adres_Date_of_start_D)); sprintf (RemoteXY.text_day_of_run, "%d", UnixDate_of_start); sprintf (RemoteXY.text_day_of_runDUBLE, "%d", UnixDate_of_start); } //отображаем RTC время и дату void WatchTime() { sprintf (RemoteXY.text_watch_all, watch.gettime("d-m-Y H:i")); } //считываем цифры с полей ввода void ReadEditTime() { int monthDay; Y = RemoteXY.edit_time_Y; M = RemoteXY.edit_time_M; D = RemoteXY.edit_time_D; h = RemoteXY.edit_time_h; m = RemoteXY.edit_time_m; if (Y > 99) { Y = 99; } if (Y<0){ Y = 0; } if (M > 12) { M = 12; } if (M <1){ M = 1; } if (M == 2) { monthDay = 28; } if (M == 1 || M == 3 || M == 5 || M == 7 || M == 8 || M == 10 || M == 12) { monthDay = 31; } if (M == 2 || M == 4 || M == 6 || M == 9 || M == 11){ monthDay = 30; } if (D > monthDay) { D = monthDay; } if (D < 1){ D = 1; } if (h > 23) { h = 23; } if (h < 0) { h = 0; } if (m > 59) { m = 59; } if (m < 0) { m = 0; } }
много видел гавнокода, но такое первый раз....
Ровно половина из тысячи строк - чтение из ЕЕПРОМа 2х переменных?
Вот этот кусок повторяется в коде 96 раз. ДЕВЯНОСТО ШЕСТЬ, КАРЛ!!!!!
О процедурах никогда не слыхали?
и после этого вы полезли что-то советовать ветку про реле?
Умные люди еще и код длиннее 20 строк под спойлер прячут.
Я сразу написал что новичек.
Вы хотите сказать что нужно делать как то так?
Вы хотите сказать что нужно делать как то так?
именно. И код станет на 500 строк короче, и , ГЛАВНОЕ!!! - опасность насажать ошибок снизиться раз в 20
Начал читать тему, дошёл до "Новичков прошу не лезть" и понял, что мне запрещено... Я протестую!!!
Лезь лезь) Только советы уверенные нужны, а не что бы сломать мою голову)
Начал читать тему, дошёл до "Новичков прошу не лезть" и понял, что мне запрещено... Я протестую!!!
мы все в этой жизни новички...
Спасибо)
Подскажите если не сложно, как делают нормальные люди вместо этой части кода
Я всего то добавляю 0 перед однозначными цифрами. Можно как то проще это делать?
Можно как то проще это делать?
Главноая ошибка - не пытайтесь делать это в одно действие.
Прочитали из ЕЕПРОМ одно значение, например час, добавили ноль, если надо, записали в строчку. Перешли к минутам
Так у вас, как минимум, число чтений из ЕЕПРОМ и число преобразований строк станет равным числу переменных - в вашем случае пять. Если посмотреть на код выше - только в этом обрывке таких кусков двадцать - то есть уже экономия в 4 раа
Нормальные люди, тупень, еще и время хранят в нормализованном виде. Если нужно с точностью до минут, то в сутках 1440 минут, хранить можно как
uint16_t PackedTime = Hours*60U+Minutes;
Лезь лезь) Только советы уверенные нужны, а не что бы сломать мою голову)
Чтоб дать совет, надо видеть интерфейс, тип вводимых данных - целое, дробное или строка. Ну и т.д.
А пока пошёл дальше заземление делать. 10 кг кувалдой махать это вам не по клавишам стучать))
Пидец, короче. Код почитал
Дело в том, что вывожу эти часы минуты день месяц год в одну строку char, а храню и получаю значения от модуля RTC в виде int. То есть я не могу напечатать минуты и потом еще подумать какие цифры дальше. Нужно отправить полную строку всю сразу... Или я не правильно понял направление ваших мыслей?
Нормальные люди, тупень, еще и время хранят в нормализованном виде. Если нужно с точностью до минут, то в сутках 1440 минут, хранить можно как
uint16_t PackedTime = Hours*60U+Minutes;
Хотелось бы, что бы нормальные люди еще и нормально объясняли.
Не понимаю что за "60U"...
Интерфейс RemoteXY
типы вводимых данных написаны в этом месте. Вывод данных то же со своими правилами..
Дело в том, что вывожу эти часы минуты день месяц год в одну строку char, а храню и получаю значения от модуля RTC в виде int. То есть я не могу напечатать минуты и потом еще подумать какие цифры дальше. Нужно отправить полную строку всю сразу... Или я не правильно понял направление ваших мыслей?
Хорошо, можешь хранить время в Unix формате, как uint32_t. Зачитай чонить за библиотеку time.h.
Впрочем, я к гуру не отношусь, можешь игнорировать мою писанину.
Пытался хранить в unix формате. Но когда начинал, испытывал сложности с ковертацией. Собственно сейчас изучаю эту тему глубже.
Спасибо.
То есть я не могу напечатать минуты и потом еще подумать какие цифры дальше. Нужно отправить полную строку всю сразу... Или я не правильно понял направление ваших мыслей?
И еще - отдельный совет - посмотрите мануал на printf. узнаете много нового
Я имел в виду графический интерфейс на телефоне. Расположение кнопок, полей...
Вот например код
Что он делает? Таких кусков много.
Еще у тебя есть 5 полей ввода для установки времени и даты. Можно сделать одно поле ввода и отправлять строку вида часы:минуты/день/месяц/год. На стороне ардуино разобрать эту строку.
Больше не смотрел.
Глянул библиотеку time.h которая почему то timelib.h хе) и оказалась что она сама ставит 0, да и вообще больше плюшек в ней удобных. Буду ее пробовать. Спасибо за совет, я её и правда ни разу не видел)
блин, ставить 0 вообще не задача, это делается в одну строчку. Почитайте описание printf
А вы тут развели...
Какая разница как выглядит интерфейс? Код что вы отметили запускает функцию через определенный промежуток времени и обновляет показания датчиков и происходящее. Вернее вы отметили нижнюю его часть, где защита от пропуска при переполнении усилонга..
это дурость, а не защита. Да и не нужна тут никакая защита
да и вообще, чем больше смотрю код - тем больше тошнит от него.
Spee, по-моему единственная техника, которую вы освоили в совершенстве - это копи-пасте. Пишете одну процедуру, а потом копируете ее 3, 5, 10 раз...
Запомните - если один и тот же код повторяется в программе два раза - это уже признак плохого программиста. А если три и более - это говнокод.
У вас половину программы нужно переписать с использованием циклов, функций и процедур
Коллеги! Вы реально что-то советуете человеку, который просит БЕСПЛАТНО оценить 998 строк говнокода??? Ну он-то охренел, это ясно, но вы то серьезные пожилые люди!
ТС, дорогой, ты только НИКОМУ И НИКОГДА не говори, что тебе этот код на arduino.ru смотрели, ОК? И тогда все нормально у тебя в жизни будет. Ну и жениха тебе хорошего и всё такое прочее!
--------------------------
Пятница, вечер. Всем Шаббат шалом!
Ок понял, спасибо. Как сделаю, скину, что бы понять к чему привели советы))
Коллеги! Вы реально что-то советуете человеку, который просит БЕСПЛАТНО оценить 998 строк говнокода??? Ну он-то охренел, это ясно, но вы то серьезные пожилые люди!
ТС, дорогой, ты только НИКОМУ И НИКОГДА не говори, что тебе этот код на arduino.ru смотрели, ОК? И тогда все нормально у тебя в жизни будет. Ну и жениха тебе хорошего и всё такое прочее!
--------------------------
Пятница, вечер. Всем Шаббат шалом!
Странный вы человека, я сказал что это первое что я сделал, и кстати этот говнокод работает. У меня нет образования инженера, меня ни кто не учил этому, небыло ни курсов ни уроков в школе.
По моему было изначально понятно, что будет говнокод. Я по этому сюда и пришел.
Что мои говнознания толкнуть в правильную сторону.
А вас попрошу впредь заходить в вашу любимую тему про деньги, а не про знания для чайников.
Ну или закусывать...
PS: главное что бы я никому не сказал, что мне на arduino.ru ничего не посоветовали...
Просить отрецензировать 998 строк кода неприлично. Это превышает объем услуг, которые оказывают на дружеских условиях. Неужели это непонятно?
Ты не прав не потому, что новичок. А потому, что вывалил для рецензии 998 строк. И без внятных вопросов о том, что тебе непонятно?
Ну вот же до вас человек заметил, что я повторяю одно и то же действие, вместо того, что бы делать это через функцию. Изменив код, он стал занимает меньше места, наверное и исполняется легче. Такого рода замечания я и ждал. Не думаю, что кто то будет читать все. Однако мне кажется, беглым но ОПЫТНЫМ взглядом, какие то нюансы заметить не должно быть сложно... Если по другому сформулировать то что мне нужно, почему этот код, неприятно читать опытному программисту. Потому, что так делать глупо, нормальные люди берут да и делают так то...
Spee, подобные знания принято черпать из учебной литературы. Тем более, что почитать об этом Вам было бы в любом случае полезно. А вот для тех, у кого есть опыт, ковыряться в плохо написанном коде - совершенно бесполезно. Почему Вы сделали не так, как: 1. Общепринято 2. Наиболее полезно ?
Почему написали на форум вместо того, чтобы читать учебную литературу?
Собственно, это и есть та бестактность, которая Выдает в Вас халявщика. А здесь таких не любят.
Соглашусь с вами. Бестактно и нагло. Так как общепринято не сделал, потому что не знаю как принято. Обучаясь у интернета, он часто даёт общую информацию, которая без азов трудно применима. У меня есть жена ребенок собака работа которые мне просто не позволяют найти столько времени, да и денег(если вы понимаете о чем я) на то что бы нормально обучиться, на курсах или у репетитора.
По этому извиняюсь за дерзость. Однако я получил ту критику которую просил.
И она толкнула в правильную сторону. Почитал про функции и printf иии... Код уже стал меньше в два раза. В ДВА РАЗА КАРЛ! Я в шоке и одновременно счастлив не знаю почему) но мне нравится происходящее) просто мне это нравится) когда приеду код в состояние "не стыдно" выложу здесь всем с полным описанием. Может кому-то понадобится)
И еще - отдельный совет - посмотрите мануал на printf. узнаете много нового
Этот совет сделал из 60 строк 4... Я как сделал, даже покраснел от стыда. Всего два символа в строку добавил, 12 строк удалил... Жесть
Вы не учились в школе?
Обучаясь у интернета, он часто даёт общую информацию, которая без азов трудно применима.
"у интернета" обучаться невозможно. Хотя бы ввиду того, что он (Интернет) для этого не предназначен и, соответственно, не имеет необходимых функций.
Хотя польза для обучения от Интернета есть, и не малая: можно, не выходя из дома, получить практически любой учебник. Но именно учебник, а не "обучающее видео", которое непонятно, кто снимал, но, зачастую, понятен уровень квалификации этого "специалиста".
...когда приеду код в состояние "не стыдно" выложу здесь всем с полным описанием. Может кому-то понадобится)
Честно говоря, не разделяю Вашего оптимизма. Тут каждый второй новичок обещает выложить финальный код "вдруг кому понадобится". Больше половины, к счастью, не выкладывают, а на остальные попытки без слез взглянуть нельзя. Но, ничего не утверждаю, возможно Вы - исключение из правил.
Я всего то добавляю 0 перед однозначными цифрами. Можно как то проще это делать?
Почитать про спецификаторы sprintf предлагать ?
В конкретном данном случае будет "%02d" , а не 0%d.
Уже прочитал, и уже обомлел)))
Переписал... Но все время в голове нет внятного принципа построения всей программы. Не разобрался как передать имя переменной в функцию..и надо ли в принципе так поступать. Мало прочитано...
У меня в принципе все происходит одно и то же для большой и малой палатки, и я по два раза пишу одно и то же для насоса лампочки перемешивателя одной палатки, и все то же самое но для другой. Отличия лишь в том, что в малой слив не дедлается, а происходит самотеком. Переменные разные а действия в принципе все одни и те же.
уже лучше, но есть еще очень много что почистить. Дублирования по пять-десять раз нет, но по два три раза осталось