Advertisement
Guest User

Untitled

a guest
Oct 25th, 2018
203
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 62.66 KB | None | 0 0
  1.  
  2. #include <Wire.h>
  3. #include <DallasTemperature.h>
  4. #include <OneWire.h>
  5. #include <DS1307.h>
  6. #include <RTClib.h>
  7. #include <TimeLib.h>
  8. #include <MenuBackend.h>
  9.  
  10. #include <LiquidCrystal.h>
  11.  
  12.  
  13. MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent); // konstruktor
  14.  
  15. MenuItem P1 = MenuItem("USTBAZOWE",1);
  16. MenuItem P11 = MenuItem("-GODZINA",2);
  17. MenuItem P12 = MenuItem("-DATA",2);
  18. MenuItem P13 = MenuItem("-PWM_1",2);
  19. MenuItem P14 = MenuItem("-PWM_2",2);
  20. MenuItem P15 = MenuItem("-GRZALKA",2);
  21. MenuItem P16 = MenuItem("-WENTYLATOR",2);
  22. MenuItem P17 = MenuItem("-KARMNIK",2);
  23. MenuItem P171 = MenuItem("-KARMNIK_1",3);
  24. MenuItem P172 = MenuItem("-KARMNIK_2",3);
  25. MenuItem P173 = MenuItem("-KARMNIK_3",3);
  26.  
  27. MenuItem P2 = MenuItem("KONFIGURACJA",1);
  28. MenuItem P21 = MenuItem("PWM_1",2);
  29. MenuItem P211 = MenuItem("SWIT1",3);
  30. MenuItem P212 = MenuItem("DZIEN1",3);
  31. MenuItem P213 = MenuItem("STAN1",3);
  32. MenuItem P22 = MenuItem("PWM_2",2);
  33. MenuItem P221 = MenuItem("SWIT2",3);
  34. MenuItem P222 = MenuItem("DZIEN2",3);
  35. MenuItem P223 = MenuItem("STAN2",3);
  36. MenuItem P23 = MenuItem("GRZALKA",2);
  37. MenuItem P231 = MenuItem("TEMP_ZADANA",3);
  38. MenuItem P232 = MenuItem("MIN_SPADEK",3);
  39. MenuItem P24 = MenuItem(" WENTYLATOR",2);
  40. MenuItem P241 = MenuItem("TEMP_ZADANA",3);
  41. MenuItem P242 = MenuItem("MAX_WZROST",3);
  42. MenuItem P25 = MenuItem("KARMNIK1",2);
  43. MenuItem P251 = MenuItem("GODZINA1",3);
  44. MenuItem P252 = MenuItem("DAWKA1",3);
  45. MenuItem P26 = MenuItem("KARMNIK2",2);
  46. MenuItem P261 = MenuItem("GODZINA2",3);
  47. MenuItem P262 = MenuItem("DAWKA2",3);
  48. MenuItem P27 = MenuItem("KARMNIK3",2);
  49. MenuItem P271 = MenuItem("GODZINA3",3);
  50. MenuItem P272 = MenuItem("DAWKA3",3);
  51.  
  52.  
  53. uint8_t arrowUpDown[8] = {0x4,0xe,0x15,0x4,0x15,0xe,0x4};
  54. uint8_t arrowDown[8] = {0x4,0x4,0x4,04,0x15,0xe,0x4};
  55. uint8_t arrowRight[8] = {0x0,0x4,0x2,0x1f,0x2,0x4,0x0};
  56. uint8_t arrowLeft[8] = {0x0,0x4,0x8,0x1f,0x8,0x4,0x0};
  57. uint8_t arrowBack[8] = {0x1,0x1,0x5,0x9,0x1f,0x8,0x4};
  58.  
  59. volatile int zm =-1; // to dla kontroli zmiany stanu klawiatury
  60. volatile int x=-1; // zmienna pomocnicza
  61. volatile int stan_Analog; // wartość na wejściu Analogowym dla klawiaturki analogowej
  62. char *linia1; // pierwsza linia wyświetlanego tekstu na LCD
  63. char *linia2; // druga linia wyświetlanego tekstu na LCD
  64.  
  65.  
  66.  
  67.  
  68. LiquidCrystal_I2C lcd(0x27,8,9,4,5,6,7);
  69.  
  70.  
  71. RTC_DS1307 rtc;
  72. char czass[20];
  73.  
  74. #define ONE_WIRE_BUS 2
  75. OneWire oneWire(ONE_WIRE_BUS);
  76. DallasTemperature sensors(&oneWire);
  77.  
  78. #define DS1307_ADDRESS 0x68 //adres zegara
  79.  
  80. int silnik_krokowy_L1 = 8;
  81. int silnik_krokowy_L2 = 9;
  82. int silnik_krokowy_L3 = 10;
  83. int silnik_krokowy_L4 = 11;
  84.  
  85. int ilosc_cykli_1; //ustawiane z menu opcji wyswietlacz
  86. int karmienie_hh_1; //ustawiane z menu opcji wyswietlacz
  87. int karmienie_mm_1; //ustawiane z menu opcji wyswietlacz
  88.  
  89. int ilosc_cykli_2; //ustawiane z menu opcji wyswietlacz
  90. int karmienie_hh_2; //ustawiane z menu opcji wyswietlacz
  91. int karmienie_mm_2; //ustawiane z menu opcji wyswietlacz
  92.  
  93. int ilosc_cykli_3; //ustawiane z menu opcji wyswietlacz
  94. int karmienie_hh_3; //ustawiane z menu opcji wyswietlacz
  95. int karmienie_mm_3; //ustawiane z menu opcji wyswietlacz
  96.  
  97.  
  98.  
  99.  
  100.  
  101. #define PWM_1 3
  102. #define PWM_2 5
  103. #define sunrise1 3600
  104. int sunries_hh_1; //ustawiane z menu opcji wyswietlacz
  105. int sunrise_mm_1; //ustawiane z menu opcji wyswietlacz
  106. #define sunrise2 3600
  107. int sunries_hh_2; //ustawiane z menu opcji wyswietlacz
  108. int sunrise_mm_2; //ustawiane z menu opcji wyswietlacz
  109. #define lightingTime1 //ustawiane z menu opcji wyswietlacz 36000
  110. #define lightingTime2 //ustawiane z menu opcji wyswietlacz 32400
  111. #define sunset1 3600
  112. #define sunset2 3600
  113. #define maxPower1 100
  114. #define maxPower2 100
  115. #define pwm1Invert false //ustawiane z menu opcji wyswietlacz falese/true
  116. #define pwm2Invert false //ustawiane z menu opcji wyswietlacz falese/true
  117. #define pwm1Delay 1
  118. #define pwm2Delay 1
  119. long counter = 0;
  120.  
  121.  
  122.  
  123. int Feeder_button = 6;
  124.  
  125. String napisON = "ON";
  126. String napisOFF = "OFF";
  127. String napisFANsave;
  128. String napisHEATERsave;
  129. String napisPWM1save;
  130. String napisPWM2save;
  131. String napisKARMNIK1save;
  132. String napisKARMNIK2save;
  133. String napisKARMNIK3save;
  134.  
  135. int statusFAN;
  136. String napisFAN;
  137. int statusHEATER;
  138. String napisHEATER;
  139. int Zadana_TEMP; //ustawiane z menu opcji wyswietlacz =23
  140. int Min_spad_TEMP; //ustawiane z menu opcji wyswietlacz =2
  141. int Max_wzr_TEMP; //ustawiane z menu opcji wyswietlacz =3
  142. int FAN = 4;
  143. int HEATER = 12;
  144. int TEMP_SENSOR = 2;
  145. float tempC;
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152. int delaysilnik = 10;
  153.  
  154.  
  155. //int GODZ;
  156. //int MIN;
  157. //int SEC;
  158.  
  159.  
  160. //joystick
  161. //const int SW_pin = 7; // digital pin connected to switch output
  162. //const int X_pin = 0; // analog pin connected to X output
  163. //const int Y_pin = 1; // analog pin connected to Y output
  164.  
  165.  
  166. void setup()
  167.  
  168. {
  169.  
  170. //
  171. Wire.begin();
  172. Serial.begin(9600);
  173. sensors.begin();
  174. sensors.requestTemperatures();
  175. //digitalWrite(SW_pin, HIGH);
  176.  
  177. //zegar
  178. //RTC.stop();
  179. //RTC.set(DS1307_MIN,00); //MINUTY -USTAW PRZED WGRANIEM
  180. //RTC.set(DS1307_HR,00); //GODZINY-USTAW PRZED WGRANIEM
  181. //RTC.start();
  182. rtc.begin();
  183. rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  184. //zegar
  185.  
  186.  
  187. //deklaracjapinów
  188. pinMode(silnik_krokowy_L1, OUTPUT); //silnik_krokowy_L1
  189. pinMode(silnik_krokowy_L2, OUTPUT); //silnik_krokowy_L2
  190. pinMode(silnik_krokowy_L3, OUTPUT); //silnik_krokowy_L3
  191. pinMode(silnik_krokowy_L4, OUTPUT); //silnik_krokowy_L4
  192. pinMode(FAN, OUTPUT); //FAN
  193. pinMode(HEATER, OUTPUT); //HEATER
  194. pinMode(TEMP_SENSOR, INPUT); //TEMP_SENSOR
  195. pinMode(PWM_1, OUTPUT); //PWM_1
  196. pinMode(PWM_2, OUTPUT); //PWM_2
  197. //pinMode(SW_pin, INPUT);
  198. pinMode(Feeder_button, INPUT_PULLUP); //Feeder_button
  199. //deklaracjapinów
  200.  
  201.  
  202.  
  203. linia1=new char[16]; // zainicjowanie dynamicznego wskaźnika do tekstu
  204. linia2=new char[16]; // to BARDZO WAŻNE, bo wskażnik dynamiczny musi wskazywać na
  205. //lcd.init(); //initialize the lcd
  206. lcd.begin(16, 2); // inicjacja LCD
  207. //lcd.backlight();
  208. lcd.createChar(3,arrowLeft); // tworzymy w pamięci LCD 5 własnych znaków dla strzałek
  209. lcd.createChar(4,arrowRight);
  210. lcd.createChar(5,arrowDown);
  211. lcd.createChar(6,arrowBack);
  212. lcd.createChar(7,arrowUpDown);
  213. menuSetup(); // funkcja klasy MenuBackend - tu tak naprawdę tworzymy nasze menu
  214. menu.moveDown(); // idziemy do pierwszej opcji
  215.  
  216.  
  217.  
  218.  
  219.  
  220. }
  221.  
  222.  
  223.  
  224.  
  225.  
  226.  
  227. void loop()
  228.  
  229. {
  230.  
  231.  
  232. x=czytaj_1(0);delay(30); // odczytujemy stan klawiatury:
  233.  
  234. if(zm!=x) // jeśli była zmiana stanu to :
  235. {
  236. switch(x) // sprawdzamy co naciśnięto
  237. {
  238. case 0: menu.moveRight();break; // jeśli naciśnięto klawisz w Prawo to przesuń menu w prawo
  239. case 1: menu.moveUp();break; // menu do góry
  240. case 2: menu.moveDown();break; // menu w dół
  241. case 3: menu.moveLeft();break; // menu w lewo
  242. case 4: menu.use();break; // wciśnięto OK więc skok do funkcji menuUseEvent(MenuUseEvend used)
  243. // to w tej funkcji właśnie obsługujemy nasze Menu, tu sprawdzamy
  244. // jaką opcję wybrano i tutaj tworzymy kod do obsługi zdarzenia.
  245. }
  246. } zm=x; // przypisanie zmiennej zm wartości x po to, aby dłuższe wciskanie tego
  247. // samego klawisza nie powodowało ponownej generacji zdarzenia.
  248. // program reaguje na zmianę stanu klawiatury.
  249.  
  250.  
  251. while (digitalRead(Feeder_button) == LOW) //Jeśli przycisk jest wciśnięty cykl karmienia
  252. {
  253. lcd.setCursor(0,0);lcd.write(7);
  254. lcd.print(" ");lcd.setCursor(1,0);lcd.print("KARMIENIE RECZNE ");
  255. Karmienie_cykl1_64();
  256. //delay(25); w przypadku zakłuceń
  257. }
  258.  
  259. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  260. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  261.  
  262.  
  263. zegar();
  264. // Serial.print(GODZ + ":" + MIN);
  265. Serial.println(czass);
  266.  
  267. termometr();
  268. Serial.print(tempC + "C");
  269.  
  270.  
  271.  
  272. PWM1();
  273.  
  274. PWM2();
  275.  
  276.  
  277. grzalka();
  278. Serial.print("HEATER: " + napisHEATER );
  279.  
  280.  
  281. wentylator();
  282. Serial.print("FAN: " + napisFAN );
  283.  
  284.  
  285.  
  286. karmnik();
  287.  
  288.  
  289.  
  290. }
  291.  
  292.  
  293. void PWM1()
  294. {
  295.  
  296. if(napisPWM1save==napisON)
  297.  
  298. {
  299. if((sunries_hh_1== tm.Hour)&&(nt sunrise_mm_1==tm.Minute))
  300. {
  301. if ( timeExecute(1000,millis()) )
  302. {
  303. counter++;
  304. PWM(PWM_1, sunrise1, lightingTime1, sunset1, maxPower1, pwm1Invert, pwm1Delay );
  305. }
  306. }
  307.  
  308. else
  309.  
  310. {
  311. if (pwm1Invert) analogWrite(PWM_1,low);
  312. if (!pwm1Invert) analogWrite(PWM_1,High);
  313. lcd.setCursor(0,0);lcd.write(7);
  314. lcd.print(" ");lcd.setCursor(1,0);lcd.print(" PWN1 OFF");delay(2000);
  315. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  316. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  317. }
  318.  
  319.  
  320.  
  321. }
  322. }
  323.  
  324.  
  325.  
  326.  
  327. void PWM2()
  328. {
  329.  
  330. if(napisPWM2save==napisON)
  331.  
  332. {
  333. if((sunries_hh_1==tm.Hour)&&(nt sunrise_mm_1==tm.Minute)&&(napisPWM2save==napisON)
  334. {
  335. if ( timeExecute(1000,millis()) )
  336. {
  337. counter++;
  338. PWM(PWM_2, sunrise2, lightingTime2, sunset2, maxPower2, pwm2Invert, pwm2Delay );
  339.  
  340. }
  341. }
  342.  
  343. else
  344.  
  345. {
  346. if (pwm2Invert) analogWrite(PWM_2,low);
  347. if (!pwm2Invert) analogWrite(PWM_2,High);
  348. lcd.setCursor(0,0);lcd.write(7);
  349. lcd.print(" ");lcd.setCursor(1,0);lcd.print(" PWN2 OFF");delay(2000);
  350. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  351. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  352. }
  353.  
  354.  
  355. }
  356.  
  357. }
  358.  
  359.  
  360.  
  361. boolean timeExecute(int interval, unsigned long currentMillis)
  362. {
  363. static unsigned long counterExeLastMillis = 0;
  364. if (currentMillis - counterExeLastMillis >= interval)
  365. {
  366. counterExeLastMillis = currentMillis;
  367. return true;
  368. }
  369. return false;
  370. }
  371.  
  372. byte PWM(byte pwmPin, long sunrise, long lightingTime, long sunset, int maxPower, bool invert, long pwmDelay)
  373. {
  374. byte low=0, high=255;
  375. long count = counter - pwmDelay;
  376. maxPower = map(maxPower, 0,100,0,255);
  377. if (invert) { low = 255; high = 0;}
  378. if (!invert) { low = 0; high = 255;}
  379. int pwm = low;
  380.  
  381. if (count < 0) { analogWrite(pwmPin,low); return low;}
  382.  
  383. if (count<=sunrise) {
  384. pwm = (maxPower*count/sunrise);
  385. if (pwm>maxPower) { pwm=maxPower; }
  386. pwm = map(pwm,0,255,low,high);
  387. analogWrite(pwmPin,pwm);
  388. return pwm;
  389. }
  390.  
  391. if ( (count > sunrise) && (count <= sunrise + lightingTime) ) {
  392. pwm=maxPower;
  393. pwm = map(pwm,0,255,low,high);
  394. analogWrite(pwmPin,pwm);
  395. return pwm;
  396. }
  397.  
  398. if ( (count > sunrise + lightingTime) && (count <= sunrise + lightingTime + sunset) ) {
  399. pwm = (count-(sunrise+lightingTime))*(-maxPower)/sunset+maxPower;
  400. pwm = map(pwm,0,255,low,high);
  401. analogWrite(pwmPin,pwm);
  402. return pwm;
  403. }
  404. if (count > sunrise + lightingTime + sunset) {
  405. analogWrite(pwmPin,low);
  406. }
  407.  
  408. }
  409.  
  410.  
  411.  
  412. void zegar()
  413. {
  414. // GODZ = (RTC.get(DS1307_HR,true)); //godzina pobierana z RTC
  415. // MIN = (RTC.get(DS1307_MIN,true)); //minuta pobierana z RTC
  416. // SEC = (RTC.get(DS1307_SEC,true)); //sekundy pobierana z RTC
  417. // delay(50);
  418. DateTime now = rtc.now();
  419. sprintf(czass, "%02d:%02d %02d/%02d/%02d". now.hour(), now.minute(), now.day(), now.mont(), now.year());
  420.  
  421. }
  422.  
  423.  
  424. void termometr()
  425. {
  426. sensors.requestTemperatures();
  427. tempC = (sensors.getTempCByIndex(1),0);
  428. delay(50);
  429. }
  430.  
  431.  
  432.  
  433. void grzalka()
  434. {
  435.  
  436. if(napisHEATERsave==napisON)
  437.  
  438. {
  439. if(tempC<=(Zadana_TEMP-Min_spad_TEMP))
  440. {
  441. statusHEATER =1;
  442. }
  443. else if((Zadana_TEMP)<=tempC)
  444. {
  445. statusHEATER =0;
  446. }
  447. else
  448. {
  449. }
  450.  
  451. if(statusHEATER>0)
  452. {
  453. digitalWrite(HEATER,HIGH);
  454. napisHEATER = "ON";
  455. }
  456. else
  457. {
  458. digitalWrite(HEATER,LOW);
  459. napisHEATER = "OFF";
  460. }
  461. delay(50);
  462.  
  463. else
  464.  
  465. {
  466. digitalWrite(HEATER,LOW);
  467. lcd.setCursor(0,0);lcd.write(7);
  468. lcd.print(" ");lcd.setCursor(1,0);lcd.print(" HEATER OFF");delay(2000);
  469. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  470. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  471.  
  472. }
  473.  
  474.  
  475.  
  476. }
  477.  
  478.  
  479. void wentylator()
  480. {
  481.  
  482. if(napisFANsave==napisON)
  483.  
  484. {
  485. if((Zadana_TEMP+Max_wzr_TEMP)<=tempC)
  486. {
  487. statusFAN =1;
  488. }
  489. else if(tempC<=(Zadana_TEMP+Max_wzr_TEMP-1))
  490. {
  491. statusFAN =0;
  492. }
  493. else
  494. {
  495. }
  496. if(statusFAN>0)
  497. {
  498. digitalWrite(FAN,HIGH);
  499. napisFAN = "ON";
  500. }
  501. else
  502. {
  503. digitalWrite(FAN,LOW);
  504. napisFAN = "OFF";
  505. }
  506. delay(50);
  507.  
  508.  
  509. else
  510.  
  511. {
  512. digitalWrite(FAN,LOW);
  513. lcd.setCursor(0,0);lcd.write(7);
  514. lcd.print(" ");lcd.setCursor(1,0);lcd.print(" FAN OFF");delay(2000);
  515. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  516. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  517.  
  518. }
  519. }
  520.  
  521.  
  522.  
  523.  
  524. void Karmienie_cykl1_64();
  525.  
  526. {
  527. digitalWrite(silnik_krokowy_L1, HIGH);
  528. digitalWrite(silnik_krokowy_L2, LOW);
  529. digitalWrite(silnik_krokowy_L3, LOW);
  530. digitalWrite(silnik_krokowy_L4, LOW);
  531. delay(delaysilnik);
  532. digitalWrite(silnik_krokowy_L1, LOW);
  533. digitalWrite(silnik_krokowy_L2, HIGH);
  534. digitalWrite(silnik_krokowy_L3, LOW);
  535. digitalWrite(silnik_krokowy_L4, LOW);
  536. delay(delaysilnik);
  537. digitalWrite(silnik_krokowy_L1, LOW);
  538. digitalWrite(silnik_krokowy_L2, LOW);
  539. digitalWrite(silnik_krokowy_L3, HIGH);
  540. digitalWrite(silnik_krokowy_L4, LOW);
  541. delay(delaysilnik);
  542. digitalWrite(silnik_krokowy_L1, LOW);
  543. digitalWrite(silnik_krokowy_L2, LOW);
  544. digitalWrite(silnik_krokowy_L3, LOW);
  545. digitalWrite(silnik_krokowy_L4, HIGH);
  546. delay(delaysilnik);
  547. }
  548.  
  549.  
  550.  
  551. void Karmienie_cykl_1_4();
  552.  
  553. {
  554. for (int w = 0; w < 16; w++)
  555. {
  556. digitalWrite(silnik_krokowy_L1, HIGH);
  557. digitalWrite(silnik_krokowy_L2, LOW);
  558. digitalWrite(silnik_krokowy_L3, LOW);
  559. digitalWrite(silnik_krokowy_L4, LOW);
  560. delay(delaysilnik);
  561. digitalWrite(silnik_krokowy_L1, LOW);
  562. digitalWrite(silnik_krokowy_L2, HIGH);
  563. digitalWrite(silnik_krokowy_L3, LOW);
  564. digitalWrite(silnik_krokowy_L4, LOW);
  565. delay(delaysilnik);
  566. digitalWrite(silnik_krokowy_L1, LOW);
  567. digitalWrite(silnik_krokowy_L2, LOW);
  568. digitalWrite(silnik_krokowy_L3, HIGH);
  569. digitalWrite(silnik_krokowy_L4, LOW);
  570. delay(delaysilnik);
  571. digitalWrite(silnik_krokowy_L1, LOW);
  572. digitalWrite(silnik_krokowy_L2, LOW);
  573. digitalWrite(silnik_krokowy_L3, LOW);
  574. digitalWrite(silnik_krokowy_L4, HIGH);
  575. delay(delaysilnik);
  576. }
  577. }
  578.  
  579.  
  580.  
  581. void karmnik();
  582.  
  583.  
  584. if(napisKARMNIK1save==napisON)
  585.  
  586. {
  587.  
  588. {
  589. if((karmienie_hh_1==tm.Hour)&&(karmienie_mm_1==tm.Minute))
  590. {
  591. for (int s = 0; s < ilosc_cykli_1; s++)
  592. {
  593. Karmienie_cykl_1_4()
  594. }
  595. }
  596. else
  597.  
  598. {
  599. lcd.setCursor(0,0);lcd.write(7);
  600. lcd.print(" ");lcd.setCursor(1,0);lcd.print(" KARMNIK1 OFF");delay(2000);
  601. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  602. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  603.  
  604. }
  605.  
  606. }
  607.  
  608.  
  609.  
  610. else if(napisKARMNIK2save==napisON)
  611.  
  612. {
  613.  
  614. {
  615. if((karmienie_hh_2==tm.Hour)&&(karmienie_mm_2==tm.Minute))
  616. {
  617. for (int g = 0; g < ilosc_cykli_2; g++)
  618. {
  619. Karmienie_cykl_1_4()
  620. }
  621. }
  622. else
  623.  
  624. {
  625. lcd.setCursor(0,0);lcd.write(7);
  626. lcd.print(" ");lcd.setCursor(1,0);lcd.print(" KARMNIK2 OFF");delay(2000);
  627. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  628. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  629.  
  630. }
  631.  
  632. }
  633.  
  634.  
  635.  
  636. else if(napisKARMNIK3save==napisON)
  637.  
  638. {
  639.  
  640. {
  641. if((karmienie_hh_3==tm.Hour)&&(karmienie_mm_3==tm.Minute))
  642. {
  643. for (int h = 0; h < ilosc_cykli_3; h++)
  644. {
  645. Karmienie_cykl_1_4()
  646. }
  647. }
  648. else
  649.  
  650. {
  651. lcd.setCursor(0,0);lcd.write(7);
  652. lcd.print(" ");lcd.setCursor(1,0);lcd.print(" KARMNIK3 OFF");delay(2000);
  653. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  654. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  655.  
  656. }
  657.  
  658. }
  659.  
  660.  
  661.  
  662. delay(50);
  663.  
  664. }
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672. void menuSetup()
  673. {
  674. menu.getRoot().add(P1);
  675.  
  676. P1.add(P11);
  677.  
  678. P11.add(P12);P11.addLeft(P1);
  679. P12.add(P13);P12.addLeft(P1);
  680. P13.add(P14);P13.addLeft(P1);
  681. P14.add(P15);P14.addLeft(P1);
  682. P15.add(P16);P15.addLeft(P1);
  683. P16.add(P17);P16.addLeft(P1);
  684. P17.addRight(P171);
  685. P171.add(P172);P171.addLeft(P17);
  686. P172.add(P173);P172.addLeft(P17);
  687. P173.addLeft(P17);P173.add(P171);
  688.  
  689. P1.addRight(P2);
  690. P2.add(P21);
  691.  
  692. P21.addRight(P211);
  693. P211.add(P212);P21.addLeft(P21);
  694. P212.add(P213);P212.addLeft(P21);
  695. P213.add(P21);P212.addLeft(P211);
  696. P21.addLeft(P2);
  697.  
  698. P21.add(P22);
  699.  
  700. P22.addRight(P221);
  701. P221.add(P222);P22.addLeft(P22);
  702. P222.add(P223);P222.addLeft(P22);
  703. P223.add(P22);P222.addLeft(P221);
  704. P22.addLeft(P2);
  705.  
  706. P22.add(P23);
  707.  
  708. P23.addRight(P231);
  709. P231.add(P232);P23.addLeft(P23);
  710. P232.add(P23);P232.addLeft(P231);
  711. P23.addLeft(P2);
  712.  
  713. P23.add(P24);
  714.  
  715.  
  716. P24.addRight(P241);
  717. P241.add(P242);P24.addLeft(P24);
  718. P242.add(P42);P242.addLeft(P241);
  719. P24.addLeft(P2);
  720.  
  721. P24.add(P25);
  722.  
  723. P25.addRight(P231);
  724. P251.add(P252);P25.addLeft(P25);
  725. P252.add(P25);P252.addLeft(P251);
  726. P25.addLeft(P2);
  727.  
  728. P25.add(P26);
  729.  
  730. P26.addRight(P261);
  731. P241.add(P262);P26.addLeft(P26);
  732. P242.add(P26);P262.addLeft(P261);
  733. P26.addLeft(P2);
  734.  
  735. P26.add(P27);
  736.  
  737. P27.addRight(P271);
  738. P251.add(P272);P25.addLeft(P27);
  739. P252.add(P27);P252.addLeft(P271);
  740. P27.addRight(P1);
  741. }
  742.  
  743.  
  744.  
  745. // --- wersja dla klawiatury 5-cio przyciskowej DFRobot --------------------------------------
  746. int czytaj_1(int analog)
  747. {
  748. int stan_Analog = analogRead(analog);delay(30);//Serial.println(stan_Analog);
  749. if (stan_Analog > 1000) return -1; // dla wartosci poza zakresem
  750. if (stan_Analog < 50) return 0; // w prawo
  751. if (stan_Analog < 150) return 1; // do gĂłry
  752. if (stan_Analog < 300) return 2; // w dół
  753. if (stan_Analog < 500) return 3; // w lewo
  754. if (stan_Analog < 700) return 4; // OK
  755. return -1; // nic nie wcisnieto
  756. }
  757.  
  758.  
  759. // --- wersja dla joysticka (2 wejscia analogowe + pin cyfrowy -------------------------------
  760.  
  761. //int czytaj_2(int poziom, int pion, int pinD)
  762. //{
  763.  
  764. // poziom - nr wejścia analogowego do którego podłączona jest manetka joysticka dla ruchu lewo-prawo
  765. // pion - nr wejścia analogowego do którego podłączona jest manetka joysticka dla ruchu góra-dół
  766. // pinD - nr pinu cyfrowego do którego podłączony jest przycisk OK w joysticku
  767.  
  768. //int stan1= analogRead(pion); {delay(60);if(stan1>0)stan1=(stan1+50)/1024+1;}
  769. // int stan2= analogRead(poziom); {delay(60);if(stan2>0)stan2=(stan2+50)/1024+1;}
  770. // int stanD=digitalRead(pinD);
  771. // if(stanD==LOW) return 4; // OK
  772. // if(stan1==0) return 2; // w dół
  773. // if(stan1==2) return 1; // do gĂłry
  774. // if(stan2==0) return 3; // w lewo
  775. if(stan2==2) return 0; // w prawo
  776. // return -1; // nic nie wcisnieto
  777. //}
  778.  
  779.  
  780. void menuChangeEvent(MenuChangeEvent changed) // funkcja klasy MenuBackend
  781. {
  782. /* tak naprawdę to tylko tutaj przydaje się ów shortkey i służy przede wszystkim do wzbogacenia menu
  783. o symbole strzałek w zależności co wybrano. Wszystko co tutaj się wyprawia jest pokazywane na LCD.
  784. */
  785. int c=changed.to.getShortkey(); // pobieramy shortkey (1,2,3, lub4)
  786. lcd.clear(); // bez komentarza
  787. lcd.setCursor(0,0);
  788. if(c==1) // jeśli to menu głowne (shortkey=1) to:
  789. {
  790. lcd.write(3); // strzałka w lewo
  791. strcpy(linia1,changed.to.getName()); // tworzymy napis w pierwszej linii
  792. lcd.print(linia1); // wyświetlamy ją
  793. lcd.setCursor(15,0);lcd.write(4); // strzałka w prawo
  794. lcd.setCursor(0,1);lcd.write(5); // strzałka w dół
  795. lcd.setCursor(15,1);lcd.write(5); // strzałka w dół
  796. }
  797. if(c==2) // jeśli to podmenu dla dziecka - (shortkey=2) to:
  798. {
  799. lcd.print("*"); // rysujemy gwiazdkę
  800. strcpy(linia2,changed.to.getName()); // tworzymy napis w pierwszej linii
  801. lcd.print(linia1); // wyświetlamy ją
  802. lcd.setCursor(15,0);lcd.print("*"); // gwiazdka
  803. lcd.setCursor(0,1);lcd.write(6); // druga linia i strzałka powrotu (arrowBack)
  804. lcd.print(changed.to.getName()); // wyświetlamy nazwe "dziecka"
  805. lcd.setCursor(15,1);lcd.write(7); // strzałka góra-dół
  806. }
  807. if(c==3) // jeśli dziecko ma dziecko - (shortkey =3) to:
  808. {
  809. lcd.print("*"); // gwiazdka
  810. strcpy(linia2,changed.to.getName()); // kopiujemy akt. nazwe opcji menu do zmiennej linia2
  811. lcd.print(linia1); // i wyświetlamy pierwszą linię
  812. lcd.setCursor(15,0);lcd.print("*"); // gwiazdka
  813. lcd.setCursor(0,1);lcd.write(6); // druga linia i strzałka arrowBack
  814. lcd.print(changed.to.getName()); // wyświetlamy wnuka w drugiej linii
  815. lcd.setCursor(15,1);lcd.write(4); // strzałka w prawo bo są wnuki
  816. }
  817.  
  818. if(c==4) // jeśli to wnuk (shortkey =4) to:
  819. {
  820. lcd.print("*"); // gwaizdka
  821. lcd.print(linia2); // w pierwszej linii wyświetlamy dziecko ( czyli rodzica wnuka)
  822. lcd.setCursor(15,0);lcd.print("*"); // gwaizdka
  823. lcd.setCursor(0,1);lcd.write(6); // druga linia i strzałka arrowBack
  824. lcd.print(changed.to.getName()); // wyświetlamy wnuka
  825. lcd.setCursor(15,1);lcd.write(7); // strzałka góra-dół
  826. }
  827. }
  828.  
  829.  
  830.  
  831.  
  832. void menuUseEvent(MenuUseEvent used) // funkcja klasy MenuBackend - reakcja na wciśnięcie OK
  833. // tutaj właśnie oddajemy menu na rzecz akcji obsługi klawisza OK
  834. {
  835.  
  836.  
  837.  
  838.  
  839.  
  840. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  841. // TERAZ KONFIGURACJA USTAWIEN BAZOWYCH
  842. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  843.  
  844. if (used.item.getName() == "-WENTYLATOR")
  845. {
  846.  
  847. lcd.setCursor(0,0);lcd.write(7);
  848. lcd.print(" ");lcd.setCursor(1,0);lcd.print("STAN = ");
  849. lcd.setCursor(8,0);lcd.print(napisFANsave); // wyświetlamy stan
  850. int akcja=-1;delay(1000);
  851.  
  852. while(akcja!=4)
  853. {
  854. zm=-1;
  855. akcja=czytaj_1(0);//delay(300);
  856.  
  857. if(zm!=akcja)
  858. {
  859. if (akcja==1) {napisFANsave=napisON;lcd.setCursor(8,0);lcd.print(napisON);delay(300);}
  860.  
  861. if(akcja==2) {napisFANsave=napisOFF;lcd.setCursor(8,0);lcd.print(napisOFF);delay(300);}
  862. if(akcja==4) // jeśli wciśnieto OK
  863. {
  864.  
  865.  
  866. if(napisFANsave==napisON)
  867. {
  868.  
  869. lcd.setCursor(0,0);lcd.print("*START_FAN");delay(2000); // pokazujemy OK przez 2 sek.
  870. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  871. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  872. }
  873.  
  874. if(napisFANsave==napisOFF)
  875. {
  876.  
  877. lcd.setCursor(0,0);lcd.print("*STOP_FAN");delay(2000); // pokazujemy OK przez 2 sek.
  878. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  879. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  880. }
  881.  
  882. }
  883. }
  884. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  885. }
  886.  
  887.  
  888.  
  889.  
  890.  
  891. if (used.item.getName() == "-GRZALKA")
  892. {
  893.  
  894. lcd.setCursor(0,0);lcd.write(7);
  895. lcd.print(" ");lcd.setCursor(1,0);lcd.print("STAN = ");
  896. lcd.setCursor(8,0);lcd.print(napisHEATERsave); // wyświetlamy stan
  897. int akcja=-1;delay(1000);
  898.  
  899. while(akcja!=4)
  900. {
  901. zm=-1;
  902. akcja=czytaj_1(0);//delay(300);
  903.  
  904. if(zm!=akcja)
  905. {
  906. if (akcja==1) {napisHEATERsave=napisON;lcd.setCursor(8,0);lcd.print(napisON);delay(300);}
  907.  
  908. if(akcja==2) {napisHEATERsave=napisOFF;lcd.setCursor(8,0);lcd.print(napisOFF);delay(300);}
  909. if(akcja==4) // jeśli wciśnieto OK
  910. {
  911.  
  912.  
  913. if(napisHEATERsave==napisON)
  914. {
  915.  
  916. lcd.setCursor(0,0);lcd.print("*START_GRZALKA");delay(2000); // pokazujemy OK przez 2 sek.
  917. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  918. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  919. }
  920.  
  921. if(napisHEATERsave==napisOFF)
  922. {
  923.  
  924. lcd.setCursor(0,0);lcd.print("*STOP_GRZALKA");delay(2000); // pokazujemy OK przez 2 sek.
  925. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  926. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  927. }
  928.  
  929. }
  930. }
  931. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  932. }
  933.  
  934.  
  935.  
  936. if (used.item.getName() == "-PWM_1")
  937. {
  938.  
  939. lcd.setCursor(0,0);lcd.write(7);
  940. lcd.print(" ");lcd.setCursor(1,0);lcd.print("STAN = ");
  941. lcd.setCursor(8,0);lcd.print(napisHEATERsave); // wyświetlamy stan
  942. int akcja=-1;delay(1000);
  943.  
  944. while(akcja!=4)
  945. {
  946. zm=-1;
  947. akcja=czytaj_1(0);//delay(300);
  948.  
  949. if(zm!=akcja)
  950. {
  951. if (akcja==1) {napisPWM1save=napisON;lcd.setCursor(8,0);lcd.print(napisON);delay(300);}
  952.  
  953. if(akcja==2) {napisPWM1save=napisOFF;lcd.setCursor(8,0);lcd.print(napisOFF);delay(300);}
  954. if(akcja==4) // jeśli wciśnieto OK
  955. {
  956.  
  957.  
  958. if(napisPWM1save==napisON)
  959. {
  960.  
  961. lcd.setCursor(0,0);lcd.print("*START_PWM1");delay(2000); // pokazujemy OK przez 2 sek.
  962. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  963. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  964. }
  965.  
  966. if(napisHEATERsave==napisOFF)
  967. {
  968.  
  969. lcd.setCursor(0,0);lcd.print("*STOP_PWM1");delay(2000); // pokazujemy OK przez 2 sek.
  970. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  971. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  972. }
  973.  
  974. }
  975. }
  976. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  977. }
  978.  
  979.  
  980.  
  981. if (used.item.getName() == "-PWM_2")
  982. {
  983.  
  984. lcd.setCursor(0,0);lcd.write(7);
  985. lcd.print(" ");lcd.setCursor(1,0);lcd.print("STAN = ");
  986. lcd.setCursor(8,0);lcd.print(napisHEATERsave); // wyświetlamy stan
  987. int akcja=-1;delay(1000);
  988.  
  989. while(akcja!=4)
  990. {
  991. zm=-1;
  992. akcja=czytaj_1(0);//delay(300);
  993.  
  994. if(zm!=akcja)
  995. {
  996. if (akcja==1) {napisPWM2save=napisON;lcd.setCursor(8,0);lcd.print(napisON);delay(300);}
  997.  
  998. if(akcja==2) {napisPWM2save=napisOFF;lcd.setCursor(8,0);lcd.print(napisOFF);delay(300);}
  999. if(akcja==4) // jeśli wciśnieto OK
  1000. {
  1001.  
  1002.  
  1003. if(napisPWM2save==napisON)
  1004. {
  1005.  
  1006. lcd.setCursor(0,0);lcd.print("*START_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1007. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1008. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1009. }
  1010.  
  1011. if(napisHEATERsave==napisOFF)
  1012. {
  1013.  
  1014. lcd.setCursor(0,0);lcd.print("*STOP_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1015. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1016. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1017. }
  1018.  
  1019. }
  1020. }
  1021. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1022. }
  1023.  
  1024.  
  1025.  
  1026.  
  1027. if (used.item.getName() == "-PWM_2")
  1028. {
  1029.  
  1030. lcd.setCursor(0,0);lcd.write(7);
  1031. lcd.print(" ");lcd.setCursor(1,0);lcd.print("STAN = ");
  1032. lcd.setCursor(8,0);lcd.print(napisHEATERsave); // wyświetlamy stan
  1033. int akcja=-1;delay(1000);
  1034.  
  1035. while(akcja!=4)
  1036. {
  1037. zm=-1;
  1038. akcja=czytaj_1(0);//delay(300);
  1039.  
  1040. if(zm!=akcja)
  1041. {
  1042. if (akcja==1) {napisPWM2save=napisON;lcd.setCursor(8,0);lcd.print(napisON);delay(300);}
  1043.  
  1044. if(akcja==2) {napisPWM2save=napisOFF;lcd.setCursor(8,0);lcd.print(napisOFF);delay(300);}
  1045. if(akcja==4) // jeśli wciśnieto OK
  1046. {
  1047.  
  1048.  
  1049. if(napisPWM2save==napisON)
  1050. {
  1051.  
  1052. lcd.setCursor(0,0);lcd.print("*START_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1053. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1054. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1055. }
  1056.  
  1057. if(napisHEATERsave==napisOFF)
  1058. {
  1059.  
  1060. lcd.setCursor(0,0);lcd.print("*STOP_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1061. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1062. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1063. }
  1064.  
  1065. }
  1066. }
  1067. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1068. }
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075. if (used.item.getName() == "-KARMNIK_1")
  1076. {
  1077.  
  1078. lcd.setCursor(0,0);lcd.write(7);
  1079. lcd.print(" ");lcd.setCursor(1,0);lcd.print("STAN = ");
  1080. lcd.setCursor(8,0);lcd.print(napisHEATERsave); // wyświetlamy stan
  1081. int akcja=-1;delay(1000);
  1082.  
  1083. while(akcja!=4)
  1084. {
  1085. zm=-1;
  1086. akcja=czytaj_1(0);//delay(300);
  1087.  
  1088. if(zm!=akcja)
  1089. {
  1090. if (akcja==1) {napisKARMNIK1save=napisON;lcd.setCursor(8,0);lcd.print(napisON);delay(300);}
  1091.  
  1092. if(akcja==2) {napisKARMNIK1save=napisOFF;lcd.setCursor(8,0);lcd.print(napisOFF);delay(300);}
  1093. if(akcja==4) // jeśli wciśnieto OK
  1094. {
  1095.  
  1096.  
  1097. if(napisKARMNIK1save==napisON)
  1098. {
  1099.  
  1100. lcd.setCursor(0,0);lcd.print("*START_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1101. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1102. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1103. }
  1104.  
  1105. if(napisKARMNIK1save==napisOFF)
  1106. {
  1107.  
  1108. lcd.setCursor(0,0);lcd.print("*STOP_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1109. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1110. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1111. }
  1112.  
  1113. }
  1114. }
  1115. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1116. }
  1117.  
  1118.  
  1119.  
  1120.  
  1121. if (used.item.getName() == "-KARMNIK_2")
  1122. {
  1123.  
  1124. lcd.setCursor(0,0);lcd.write(7);
  1125. lcd.print(" ");lcd.setCursor(1,0);lcd.print("STAN = ");
  1126. lcd.setCursor(8,0);lcd.print(napisHEATERsave); // wyświetlamy stan
  1127. int akcja=-1;delay(1000);
  1128.  
  1129. while(akcja!=4)
  1130. {
  1131. zm=-1;
  1132. akcja=czytaj_1(0);//delay(300);
  1133.  
  1134. if(zm!=akcja)
  1135. {
  1136. if (akcja==1) {napisKARMNIK2save=napisON;lcd.setCursor(8,0);lcd.print(napisON);delay(300);}
  1137.  
  1138. if(akcja==2) {napisKARMNIK2save=napisOFF;lcd.setCursor(8,0);lcd.print(napisOFF);delay(300);}
  1139. if(akcja==4) // jeśli wciśnieto OK
  1140. {
  1141.  
  1142.  
  1143. if(napisKARMNIK2save==napisON)
  1144. {
  1145.  
  1146. lcd.setCursor(0,0);lcd.print("*START_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1147. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1148. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1149. }
  1150.  
  1151. if(napisKARMNIK2save==napisOFF)
  1152. {
  1153.  
  1154. lcd.setCursor(0,0);lcd.print("*STOP_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1155. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1156. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1157. }
  1158.  
  1159. }
  1160. }
  1161. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1162. }
  1163.  
  1164.  
  1165.  
  1166.  
  1167.  
  1168.  
  1169.  
  1170. if (used.item.getName() == "-KARMNIK_3")
  1171. {
  1172.  
  1173. lcd.setCursor(0,0);lcd.write(7);
  1174. lcd.print(" ");lcd.setCursor(1,0);lcd.print("STAN = ");
  1175. lcd.setCursor(8,0);lcd.print(napisHEATERsave); // wyświetlamy stan
  1176. int akcja=-1;delay(1000);
  1177.  
  1178. while(akcja!=4)
  1179. {
  1180. zm=-1;
  1181. akcja=czytaj_1(0);//delay(300);
  1182.  
  1183. if(zm!=akcja)
  1184. {
  1185. if (akcja==1) {napisKARMNIK3save=napisON;lcd.setCursor(8,0);lcd.print(napisON);delay(300);}
  1186.  
  1187. if(akcja==2) {napisKARMNIK3save=napisOFF;lcd.setCursor(8,0);lcd.print(napisOFF);delay(300);}
  1188. if(akcja==4) // jeśli wciśnieto OK
  1189. {
  1190.  
  1191.  
  1192. if(napisKARMNIK3save==napisON)
  1193. {
  1194.  
  1195. lcd.setCursor(0,0);lcd.print("*START_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1196. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1197. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1198. }
  1199.  
  1200. if(napisKARMNIK3save==napisOFF)
  1201. {
  1202.  
  1203. lcd.setCursor(0,0);lcd.print("*STOP_PWM2");delay(2000); // pokazujemy OK przez 2 sek.
  1204. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1205. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1206. }
  1207.  
  1208. }
  1209. }
  1210. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1211. }
  1212.  
  1213.  
  1214.  
  1215.  
  1216.  
  1217. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  1218. // KONIEC KONFIGURACJA USTAWIEN BAZOWYCH
  1219. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  1220.  
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  
  1227.  
  1228.  
  1229.  
  1230.  
  1231.  
  1232. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  1233. // KONFIGURACJA USTAWIEN
  1234. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  1235.  
  1236.  
  1237.  
  1238. // ZMIANA TEMPERATURY ZADANEJ TERMOSTATU
  1239. // w tym przykładzie programik czeka aż ustawisz jakąś temperaturę i po wciśnięciu OK wraca do pętli głównej
  1240.  
  1241.  
  1242. if (used.item.getName() == "TEMP_ZADANA") // dokładnie taki sam ciąg " Temperatura"
  1243. {
  1244.  
  1245. lcd.setCursor(0,0);lcd.write(7); // wyswietlamy nasz symbol strzałki góra-dół
  1246. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.temp. = "); // tekst dla użytkownika
  1247. lcd.setCursor(13,0);lcd.print(Zadana_TEMP); // wyświetlamy akt. temperaturę
  1248. int akcja=-1;delay(1000); // zmienna pomocnicza, sterująca dla petli while
  1249. // jesli nie puścisz klawisza OK w ciągu 1 sek. to powrót do menu
  1250. while(akcja!=4) // ta pętla trwa tak długo aż wciśniesz klawisz OK
  1251. {
  1252. zm=-1;
  1253. akcja=czytaj_1(0);//delay(300); // odczyt stanu klawiatury - funkcja czytaj_1 lub czytaj_2 lub czytaj_3
  1254. // opis poniżej przy 3 różnych definicjach funkcji czytaj
  1255. if(zm!=akcja) // ruszamy do pracy tylko wtedy gdy zmienił sie stan klawiatury
  1256. {
  1257. if (akcja==1) {Zadana_TEMP++;if(Zadana_TEMP>99)Zadana_TEMP=99;lcd.setCursor(13,0);lcd.print(Zadana_TEMP);delay(300);}
  1258. // jesli akcja=1 (czyli wciśnieto klawisz w górę to zwiększono temperaturę
  1259. // ustawiono max próg i wyświetlono obecną temperaturę
  1260. if(akcja==2) {Zadana_TEMP-;if(Zadana_TEMP<1)Zadana_TEMP=1;lcd.setCursor(13,0);lcd.print(Zadana_TEMP);delay(300);}
  1261. // jesli akcja=2 (czyli wciśnięto klawisz w dół to mniejszono temperaturę
  1262. // ustawiono min próg i wyświetlono obecną temperaturę
  1263. if(akcja==4) // jeśli wciśnieto OK
  1264. {
  1265. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1266. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1267. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1268. }
  1269. }
  1270. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1271. // tu WAŻNY MOMENT - kończy się pętla while i zwracamy sterowanie do głównej pętli loop()
  1272. }
  1273.  
  1274.  
  1275.  
  1276.  
  1277. // ZMIANA minimalnej temperatury
  1278.  
  1279.  
  1280. if (used.item.getName() == "MIN_SPADEK")
  1281. {
  1282.  
  1283. lcd.setCursor(0,0);lcd.write(7);
  1284. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.temp. = ");
  1285. lcd.setCursor(13,0);lcd.print(Min_spad_TEMP); // wyświetlamy akt. temperaturę
  1286. int akcja=-1;delay(1000);
  1287.  
  1288. while(akcja!=4)
  1289. {
  1290. zm=-1;
  1291. akcja=czytaj_1(0);//delay(300);
  1292.  
  1293. if(zm!=akcja)
  1294. {
  1295. if (akcja==1) {Min_spad_TEMP++;if(Min_spad_TEMP>99)Min_spad_TEMP=99;lcd.setCursor(13,0);lcd.print(Min_spad_TEMP);delay(300);}
  1296.  
  1297. if(akcja==2) {Min_spad_TEMP--;if(Min_spad_TEMP<1)Min_spad_TEMP=1;lcd.setCursor(13,0);lcd.print(Min_spad_TEMP);delay(300);}
  1298. if(akcja==4) // jeśli wciśnieto OK
  1299. {
  1300. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1301. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1302. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1303. }
  1304. }
  1305. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1306. }
  1307.  
  1308.  
  1309.  
  1310. // ZMIANA maxymalnej temperatury
  1311.  
  1312.  
  1313. if (used.item.getName() == "MAX_WZROST")
  1314. {
  1315.  
  1316. lcd.setCursor(0,0);lcd.write(7);
  1317. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.temp. = ");
  1318. lcd.setCursor(13,0);lcd.print(Max_wzr_TEMP); // wyświetlamy akt. temperaturę
  1319. int akcja=-1;delay(1000);
  1320.  
  1321. while(akcja!=4)
  1322. {
  1323. zm=-1;
  1324. akcja=czytaj_1(0);//delay(300);
  1325.  
  1326. if(zm!=akcja)
  1327. {
  1328. if (akcja==1) {Max_wzr_TEMP++;if(Max_wzr_TEMP>99)Max_wzr_TEMP=99;lcd.setCursor(13,0);lcd.print(Max_wzr_TEMP);delay(300);}
  1329.  
  1330. if(akcja==2) {Max_wzr_TEMP--;if(Max_wzr_TEMP<1)Max_wzr_TEMP=1;lcd.setCursor(13,0);lcd.print(Max_wzr_TEMP);delay(300);}
  1331. if(akcja==4) // jeśli wciśnieto OK
  1332. {
  1333. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1334. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1335. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1336. }
  1337. }
  1338. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1339. }
  1340.  
  1341.  
  1342. // ZMIANA GODZINY SWIT1
  1343.  
  1344.  
  1345. if (used.item.getName() == "SWIT1")
  1346. {
  1347.  
  1348. lcd.setCursor(0,0);lcd.write(7);
  1349. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.GODZ = ");
  1350. lcd.setCursor(13,0);lcd.print(sunries_hh_1 + ":" + sunrise_mm_1); // wyświetlamy akt. godzinę
  1351. int akcja=-1;delay(1000);
  1352.  
  1353. while(akcja!=4) // ta pętla trwa tak długo aż wciśniesz klawisz OK
  1354. {
  1355. zm=-1;
  1356. akcja=czytaj_1(0);//delay(300);
  1357.  
  1358. if(zm!=akcja)
  1359. {
  1360.  
  1361.  
  1362. if (akcja==1) {sunries_hh_1++;if(sunries_hh_1>23)sunries_hh_1=23;lcd.setCursor(13,0);lcd.print(sunries_hh_1);delay(300);}
  1363. // jesli akcja=1 (czyli wciśnieto klawisz w górę to zwiększono temperaturę
  1364. // ustawiono max próg i wyświetlono obecną temperaturę
  1365. if(akcja==2) {sunries_hh_1-;if(sunries_hh_1<0)sunries_hh_1=0;lcd.setCursor(13,0);lcd.print(sunries_hh_1);delay(300);}
  1366. // jesli akcja=2 (czyli wciśnięto klawisz w dół to mniejszono temperaturę
  1367. // ustawiono min próg i wyświetlono obecną temperaturę
  1368.  
  1369. if (akcja==0) {sunrise_mm_1++;if(sunrise_mm_1>59)sunrise_mm_1=59;lcd.setCursor(13,0);lcd.print(sunrise_mm_1);delay(300);}
  1370. // jesli akcja=0 (czyli wciśnieto klawisz w prawo to zwiększono minuty
  1371. // ustawiono max próg i wyświetlono obecną temperaturę
  1372. if(akcja==3) {sunrise_mm_1-;if(sunrise_mm_1<0)sunrise_mm_1=0;lcd.setCursor(13,0);lcd.print(sunrise_mm_1);delay(300);}
  1373. // jesli akcja=3 (czyli wciśnięto klawisz w lewo to mniejszono minuty
  1374. // ustawiono min próg i wyświetlono obecną temperaturę
  1375.  
  1376.  
  1377.  
  1378.  
  1379. if(akcja==4) // jeśli wciśnieto OK
  1380. {
  1381. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1382. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1383. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1384. }
  1385.  
  1386.  
  1387.  
  1388. }
  1389. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1390. }
  1391.  
  1392.  
  1393. // ZMIANA GODZINY SWIT2
  1394.  
  1395.  
  1396. if (used.item.getName() == "SWIT2")
  1397. {
  1398.  
  1399. lcd.setCursor(0,0);lcd.write(7);
  1400. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.GODZ = ");
  1401. lcd.setCursor(13,0);lcd.print(sunries_hh_2 + ":" + sunrise_mm_2); // wyświetlamy akt. godzinę
  1402. int akcja=-1;delay(1000);
  1403.  
  1404. while(akcja!=4) // ta pętla trwa tak długo aż wciśniesz klawisz OK
  1405. {
  1406. zm=-1;
  1407. akcja=czytaj_1(0);//delay(300);
  1408.  
  1409. if(zm!=akcja)
  1410. {
  1411.  
  1412. if (akcja==1) {sunries_hh_2++;if(sunries_hh_2>23)sunries_hh_2=23;lcd.setCursor(13,0);lcd.print(sunries_hh_2);delay(300);}
  1413. // jesli akcja=1 (czyli wciśnieto klawisz w górę to zwiększono temperaturę
  1414. // ustawiono max próg i wyświetlono obecną temperaturę
  1415. if(akcja==2) {sunries_hh_2-;if(sunries_hh_2<0)sunries_hh_2=0;lcd.setCursor(13,0);lcd.print(sunries_hh_2);delay(300);}
  1416. // jesli akcja=2 (czyli wciśnięto klawisz w dół to mniejszono temperaturę
  1417. // ustawiono min próg i wyświetlono obecną temperaturę
  1418.  
  1419. if (akcja==0) {sunrise_mm_2++;if(sunrise_mm_2>59)sunrise_mm_2=59;lcd.setCursor(13,0);lcd.print(sunrise_mm_2);delay(300);}
  1420. // jesli akcja=0 (czyli wciśnieto klawisz w prawo to zwiększono minuty
  1421. // ustawiono max próg i wyświetlono obecną temperaturę
  1422. if(akcja==3) {sunrise_mm_2-;if(sunrise_mm_2<0)sunrise_mm_2=0;lcd.setCursor(13,0);lcd.print(sunrise_mm_2);delay(300);}
  1423. // jesli akcja=3 (czyli wciśnięto klawisz w lewo to mniejszono minuty
  1424. // ustawiono min próg i wyświetlono obecną temperaturę
  1425.  
  1426.  
  1427. if(akcja==4) // jeśli wciśnieto OK
  1428. {
  1429. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1430. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1431. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1432. }
  1433.  
  1434. }
  1435. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1436. }
  1437.  
  1438.  
  1439. // ZMIANA długości dnia 1h swit + DŁUGOŚĆ DNIA + zmierzch
  1440.  
  1441.  
  1442. if (used.item.getName() == "DZIEN1")
  1443. {
  1444.  
  1445. lcd.setCursor(0,0);lcd.write(7);
  1446. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.czas. = ");
  1447. lcd.setCursor(13,0);lcd.print(lightingTime1); // wyświetlamy akt. czas swiecenia
  1448. int akcja=-1;delay(1000);
  1449.  
  1450. while(akcja!=4)
  1451. {
  1452. zm=-1;
  1453. akcja=czytaj_1(0);//delay(300);
  1454.  
  1455. if(zm!=akcja)
  1456. {
  1457. if (akcja==1) {lightingTime1++;if(lightingTime1>23)lightingTime1=23;lcd.setCursor(13,0);lcd.print(lightingTime1);delay(300);}
  1458.  
  1459. if(akcja==2) {lightingTime1--;if(lightingTime1<1)lightingTime1=1;lcd.setCursor(13,0);lcd.print(lightingTime1);delay(300);}
  1460. if(akcja==4) // jeśli wciśnieto OK
  1461. {
  1462. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1463. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1464. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1465. }
  1466. }
  1467. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1468. }
  1469.  
  1470.  
  1471.  
  1472. // ZMIANA długości dnia 1h swit + DŁUGOŚĆ DNIA + zmierzch
  1473.  
  1474.  
  1475. if (used.item.getName() == "DZIEN2")
  1476. {
  1477.  
  1478. lcd.setCursor(0,0);lcd.write(7);
  1479. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.czas. = ");
  1480. lcd.setCursor(13,0);lcd.print(lightingTime2); // wyświetlamy akt. czas swiecenia
  1481. int akcja=-1;delay(1000);
  1482.  
  1483. while(akcja!=4)
  1484. {
  1485. zm=-1;
  1486. akcja=czytaj_1(0);//delay(300);
  1487.  
  1488. if(zm!=akcja)
  1489. {
  1490. if (akcja==1) {lightingTime2++;if(lightingTime2>23)lightingTime2=23;lcd.setCursor(13,0);lcd.print(lightingTime2);delay(300);}
  1491.  
  1492. if(akcja==2) {lightingTime2--;if(lightingTime2<1)lightingTime2=1;lcd.setCursor(13,0);lcd.print(lightingTime2);delay(300);}
  1493. if(akcja==4) // jeśli wciśnieto OK
  1494. {
  1495. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1496. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1497. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1498. }
  1499. }
  1500. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1501. }
  1502.  
  1503.  
  1504.  
  1505. // ZMIANA true / false PWM1
  1506.  
  1507.  
  1508. if (used.item.getName() == "STAN1")
  1509. {
  1510.  
  1511. lcd.setCursor(0,0);lcd.write(7);
  1512. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.stan. = ");
  1513. lcd.setCursor(13,0);lcd.print(pwm1Invert); // wyświetlamy akt. czas swiecenia
  1514. int akcja=-1;delay(1000);
  1515.  
  1516. while(akcja!=4)
  1517. {
  1518. zm=-1;
  1519. akcja=czytaj_1(0);//delay(300);
  1520.  
  1521. if(zm!=akcja)
  1522. {
  1523. if (akcja==1) {!pwm1Invert;lcd.setCursor(13,0);lcd.print(pwm1Invert);delay(300);}
  1524.  
  1525. if(akcja==2) {!pwm1Invert;lcd.setCursor(13,0);lcd.print(pwm1Invert);delay(300);}
  1526. if(akcja==4) // jeśli wciśnieto OK
  1527. {
  1528. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1529. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1530. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1531. }
  1532. }
  1533. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1534. }
  1535.  
  1536.  
  1537. // ZMIANA true / false PWM2
  1538.  
  1539.  
  1540. if (used.item.getName() == "STAN2")
  1541. {
  1542.  
  1543. lcd.setCursor(0,0);lcd.write(7);
  1544. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.stan. = ");
  1545. lcd.setCursor(13,0);lcd.print(pwm2Invert); // wyświetlamy akt. czas swiecenia
  1546. int akcja=-1;delay(1000);
  1547.  
  1548. while(akcja!=4)
  1549. {
  1550. zm=-1;
  1551. akcja=czytaj_1(0);//delay(300);
  1552.  
  1553. if(zm!=akcja)
  1554. {
  1555. if (akcja==1) {!pwm2Invert;lcd.setCursor(13,0);lcd.print(pwm2Invert);delay(300);}
  1556.  
  1557. if(akcja==2) {!pwm2Invert;lcd.setCursor(13,0);lcd.print(pwm2Invert);delay(300);}
  1558. if(akcja==4) // jeśli wciśnieto OK
  1559. {
  1560. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1561. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1562. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1563. }
  1564. }
  1565. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1566. }
  1567.  
  1568.  
  1569.  
  1570. // ZMIANA GODZINY karmienie 1
  1571.  
  1572.  
  1573. if (used.item.getName() == "GODZINA1")
  1574. {
  1575.  
  1576. lcd.setCursor(0,0);lcd.write(7);
  1577. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.GODZ = ");
  1578. lcd.setCursor(13,0);lcd.print(karmienie_hh_1 + ":" + karmienie_mm_1); // wyświetlamy akt. godzinę
  1579. int akcja=-1;delay(1000);
  1580.  
  1581. while(akcja!=4) // ta pętla trwa tak długo aż wciśniesz klawisz OK
  1582. {
  1583. zm=-1;
  1584. akcja=czytaj_1(0);//delay(300);
  1585.  
  1586. if(zm!=akcja)
  1587. {
  1588.  
  1589. if (akcja==1) {karmienie_hh_1++;if(karmienie_hh_1>23)karmienie_hh_1=23;lcd.setCursor(13,0);lcd.print(karmienie_hh_1);delay(300);}
  1590. // jesli akcja=1 (czyli wciśnieto klawisz w górę to zwiększono temperaturę
  1591. // ustawiono max próg i wyświetlono obecną temperaturę
  1592. if(akcja==2) {karmienie_hh_1-;if(karmienie_hh_1<0)karmienie_hh_1=0;lcd.setCursor(13,0);lcd.print(karmienie_hh_1);delay(300);}
  1593. // jesli akcja=2 (czyli wciśnięto klawisz w dół to mniejszono temperaturę
  1594. // ustawiono min próg i wyświetlono obecną temperaturę
  1595.  
  1596. if (akcja==0) {karmienie_mm_1++;if(karmienie_mm_1>59)karmienie_mm_1=59;lcd.setCursor(13,0);lcd.print(karmienie_mm_1);delay(300);}
  1597. // jesli akcja=0 (czyli wciśnieto klawisz w prawo to zwiększono minuty
  1598. // ustawiono max próg i wyświetlono obecną temperaturę
  1599. if(akcja==3) {karmienie_mm_1-;if(karmienie_mm_1<0)karmienie_mm_1=0;lcd.setCursor(13,0);lcd.print(karmienie_mm_1);delay(300);}
  1600. // jesli akcja=3 (czyli wciśnięto klawisz w lewo to mniejszono minuty
  1601. // ustawiono min próg i wyświetlono obecną temperaturę
  1602.  
  1603.  
  1604. if(akcja==4) // jeśli wciśnieto OK
  1605. {
  1606. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1607. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1608. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1609. }
  1610.  
  1611. }
  1612. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1613. }
  1614.  
  1615.  
  1616.  
  1617. // ZMIANA GODZINY karmienie 2
  1618.  
  1619.  
  1620. if (used.item.getName() == "GODZINA2")
  1621. {
  1622.  
  1623. lcd.setCursor(0,0);lcd.write(7);
  1624. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.GODZ = ");
  1625. lcd.setCursor(13,0);lcd.print(karmienie_hh_2 + ":" + karmienie_mm_2); // wyświetlamy akt. godzinę
  1626. int akcja=-1;delay(1000);
  1627.  
  1628. while(akcja!=4) // ta pętla trwa tak długo aż wciśniesz klawisz OK
  1629. {
  1630. zm=-1;
  1631. akcja=czytaj_1(0);//delay(300);
  1632.  
  1633. if(zm!=akcja)
  1634. {
  1635.  
  1636. if (akcja==1) {karmienie_hh_2++;if(karmienie_hh_2>23)karmienie_hh_2=23;lcd.setCursor(13,0);lcd.print(karmienie_hh_2);delay(300);}
  1637. // jesli akcja=1 (czyli wciśnieto klawisz w górę to zwiększono temperaturę
  1638. // ustawiono max próg i wyświetlono obecną temperaturę
  1639. if(akcja==2) {karmienie_hh_2-;if(karmienie_hh_2<0)karmienie_hh_2=0;lcd.setCursor(13,0);lcd.print(karmienie_hh_2);delay(300);}
  1640. // jesli akcja=2 (czyli wciśnięto klawisz w dół to mniejszono temperaturę
  1641. // ustawiono min próg i wyświetlono obecną temperaturę
  1642.  
  1643. if (akcja==0) {karmienie_mm_2++;if(karmienie_mm_2>59)karmienie_mm_2=59;lcd.setCursor(13,0);lcd.print(karmienie_mm_2);delay(300);}
  1644. // jesli akcja=0 (czyli wciśnieto klawisz w prawo to zwiększono minuty
  1645. // ustawiono max próg i wyświetlono obecną temperaturę
  1646. if(akcja==3) {karmienie_mm_2-;if(karmienie_mm_2<0)karmienie_mm_2=0;lcd.setCursor(13,0);lcd.print(karmienie_mm_2);delay(300);}
  1647. // jesli akcja=3 (czyli wciśnięto klawisz w lewo to mniejszono minuty
  1648. // ustawiono min próg i wyświetlono obecną temperaturę
  1649.  
  1650.  
  1651. if(akcja==4) // jeśli wciśnieto OK
  1652. {
  1653. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1654. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1655. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1656. }
  1657.  
  1658. }
  1659. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1660. }
  1661.  
  1662.  
  1663.  
  1664. // ZMIANA GODZINY karmienie 3
  1665.  
  1666.  
  1667. if (used.item.getName() == "GODZINA3")
  1668. {
  1669.  
  1670. lcd.setCursor(0,0);lcd.write(7);
  1671. lcd.print(" ");lcd.setCursor(1,0);lcd.print("Ust.GODZ = ");
  1672. lcd.setCursor(13,0);lcd.print(karmienie_hh_3 + ":" + karmienie_mm_3); // wyświetlamy akt. godzinę
  1673. int akcja=-1;delay(1000);
  1674.  
  1675. while(akcja!=4) // ta pętla trwa tak długo aż wciśniesz klawisz OK
  1676. {
  1677. zm=-1;
  1678. akcja=czytaj_1(0);//delay(300);
  1679.  
  1680. if(zm!=akcja)
  1681. {
  1682.  
  1683. if (akcja==1) {karmienie_hh_3++;if(karmienie_hh_3>23)karmienie_hh_2=23;lcd.setCursor(13,0);lcd.print(karmienie_hh_3);delay(300);}
  1684. // jesli akcja=1 (czyli wciśnieto klawisz w górę to zwiększono temperaturę
  1685. // ustawiono max próg i wyświetlono obecną temperaturę
  1686. if(akcja==2) {karmienie_hh_3-;if(karmienie_hh_3<0)karmienie_hh_3=0;lcd.setCursor(13,0);lcd.print(karmienie_hh_3);delay(300);}
  1687. // jesli akcja=2 (czyli wciśnięto klawisz w dół to mniejszono temperaturę
  1688. // ustawiono min próg i wyświetlono obecną temperaturę
  1689.  
  1690. if (akcja==0) {karmienie_mm_3++;if(karmienie_mm_3>59)karmienie_mm_3=59;lcd.setCursor(13,0);lcd.print(karmienie_mm_3);delay(300);}
  1691. // jesli akcja=0 (czyli wciśnieto klawisz w prawo to zwiększono minuty
  1692. // ustawiono max próg i wyświetlono obecną temperaturę
  1693. if(akcja==3) {karmienie_mm_3-;if(karmienie_mm_3<0)karmienie_mm_3=0;lcd.setCursor(13,0);lcd.print(karmienie_mm_3);delay(300);}
  1694. // jesli akcja=3 (czyli wciśnięto klawisz w lewo to mniejszono minuty
  1695. // ustawiono min próg i wyświetlono obecną temperaturę
  1696.  
  1697.  
  1698. if(akcja==4) // jeśli wciśnieto OK
  1699. {
  1700. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1701. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1702. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1703. }
  1704.  
  1705. }
  1706. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1707. }
  1708.  
  1709.  
  1710.  
  1711.  
  1712. // ZMIANA maxymalnej DAWKA1
  1713.  
  1714.  
  1715. if (used.item.getName() == "DAWKA1")
  1716. {
  1717.  
  1718. lcd.setCursor(0,0);lcd.write(7);
  1719. lcd.print(" ");lcd.setCursor(1,0);lcd.print("ust.cykl. = ");
  1720. lcd.setCursor(13,0);lcd.print(ilosc_cykli_1); // wyświetlamy ust ilosc cykli
  1721. int akcja=-1;delay(1000);
  1722.  
  1723. while(akcja!=4)
  1724. {
  1725. zm=-1;
  1726. akcja=czytaj_1(0);//delay(300);
  1727.  
  1728. if(zm!=akcja)
  1729. {
  1730. if (akcja==1) {ilosc_cykli_1++;if(ilosc_cykli_1>999)ilosc_cykli_1=999;lcd.setCursor(13,0);lcd.print(ilosc_cykli_1);delay(300);}
  1731.  
  1732. if(akcja==2) {ilosc_cykli_1--;if(ilosc_cykli_1<1)ilosc_cykli_1=1;lcd.setCursor(13,0);lcd.print(ilosc_cykli_1);delay(300);}
  1733. if(akcja==4) // jeśli wciśnieto OK
  1734. {
  1735. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1736. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1737. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1738. }
  1739. }
  1740. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1741. }
  1742.  
  1743.  
  1744.  
  1745. // ZMIANA maxymalnej DAWKA2
  1746.  
  1747.  
  1748. if (used.item.getName() == "DAWKA2")
  1749. {
  1750.  
  1751. lcd.setCursor(0,0);lcd.write(7);
  1752. lcd.print(" ");lcd.setCursor(1,0);lcd.print("ust.cykl. = ");
  1753. lcd.setCursor(13,0);lcd.print(ilosc_cykli_2); // wyświetlamy ust ilosc cykli
  1754. int akcja=-1;delay(1000);
  1755.  
  1756. while(akcja!=4)
  1757. {
  1758. zm=-1;
  1759. akcja=czytaj_1(0);//delay(300);
  1760.  
  1761. if(zm!=akcja)
  1762. {
  1763. if (akcja==1) {ilosc_cykli_2++;if(ilosc_cykli_2>999)ilosc_cykli_2=999;lcd.setCursor(13,0);lcd.print(ilosc_cykli_2);delay(300);}
  1764.  
  1765. if(akcja==2) {ilosc_cykli_2--;if(ilosc_cykli_2<1)ilosc_cykli_2=1;lcd.setCursor(13,0);lcd.print(ilosc_cykli_2);delay(300);}
  1766. if(akcja==4) // jeśli wciśnieto OK
  1767. {
  1768. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1769. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1770. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1771. }
  1772. }
  1773. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1774. }
  1775.  
  1776.  
  1777. // ZMIANA maxymalnej DAWKA3
  1778.  
  1779.  
  1780. if (used.item.getName() == "DAWKA3")
  1781. {
  1782.  
  1783. lcd.setCursor(0,0);lcd.write(7);
  1784. lcd.print(" ");lcd.setCursor(1,0);lcd.print("ust.cykl. = ");
  1785. lcd.setCursor(13,0);lcd.print(ilosc_cykli_3); // wyświetlamy ust ilosc cykli
  1786. int akcja=-1;delay(1000);
  1787.  
  1788. while(akcja!=4)
  1789. {
  1790. zm=-1;
  1791. akcja=czytaj_1(0);//delay(300);
  1792.  
  1793. if(zm!=akcja)
  1794. {
  1795. if (akcja==1) {ilosc_cykli_3++;if(ilosc_cykli_3>999)ilosc_cykli_3=999;lcd.setCursor(13,0);lcd.print(ilosc_cykli_3);delay(300);}
  1796.  
  1797. if(akcja==2) {ilosc_cykli_3--;if(ilosc_cykli_3<1)ilosc_cykli_3=1;lcd.setCursor(13,0);lcd.print(ilosc_cykli_3);delay(300);}
  1798. if(akcja==4) // jeśli wciśnieto OK
  1799. {
  1800. lcd.setCursor(0,0);lcd.print("*ZMIANA OK");delay(2000); // pokazujemy OK przez 2 sek.
  1801. lcd.setCursor(1,0);lcd.print(" "); // czyścimy linię
  1802. lcd.setCursor(1,0);lcd.print(linia1); // odtwarzamy poprzedni stan na LCD
  1803. }
  1804. }
  1805. } zm=akcja; // aktualizacja zmiennej zm, po to aby reagować tylko na zmiany stanu klawiatury
  1806. }
  1807.  
  1808.  
  1809.  
  1810. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  1811. // KONFIGURACJA USTAWIEN
  1812. //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  1813.  
  1814. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement