// Zjednodusene menu ovladane 3 tlacitky se signalizaci pomoci RGB LED //================================================ #ifdef signal_LED #define AUTOEXITMENULED 30000 // po jake dobe necinnosti se menu automaticky opusti (cislo udava pocet smycek, jedna smycka trva 10ms) unsigned int auto_exit_LED_menu; // v teto promenne se bude odecitat doba necinnosti unsigned long trvani_LED_stisku; // doba drzeni tlacitka OK v milisekundach v hlavnim menu unsigned long trvani_LED_stisku2; // doba drzeni tlacitka OK v milisekundach v podmenu int pozice_LED_menu1 = 1; // nalistovana pozice v hlavnim menu // 1x blik = vyblikani posledni zmerene hodnoty svetla // 2x blik = mereni jasu bez korekce // 3x blik = vyblikani casu HHMM // 4x blik = Zmena SEC/SELC //---------------------------------------------- // listovani v hlavnim menu a volba polozky void menu_LED(void) { auto_exit_LED_menu = AUTOEXITMENULED; // po 5 minutach bez stisku tlacitka se menu automaticky ukonci while (digitalRead( pin_tl_ok) == LOW) // do hlavniho menu se vstoupilo dlouhym stiskem tlacitka OK { // ted je nutne pockat na jeho uvolneni delay(20); } LED_R_onoff(false); delay(20); while (auto_exit_LED_menu) { interrupty(); // odskoceni na test, jestli neni nejaky pozadavek o komunikaci, nebo jestli neni cas spustit automaticke mereni if (millis()/100 % 30 == 1) { vyblikej_menu(pozice_LED_menu1); } if (digitalRead(pin_tl_up) == LOW) // listovani nahoru v hlavnim menu { delay(10); // odruseni zakmitu pozice_LED_menu1 --; if (pozice_LED_menu1 < 1) pozice_LED_menu1 = 1; while (digitalRead(pin_tl_up) == LOW) delay(10); // dokud je tlacitko stisknute, nic se nedeje auto_exit_LED_menu = AUTOEXITMENULED; } if (digitalRead(pin_tl_dn) == LOW) // listovani dolu v hlavnim menu { delay(10); // odruseni zakmitu pozice_LED_menu1 ++; if (pozice_LED_menu1 > 4) pozice_LED_menu1 = 4; while (digitalRead(pin_tl_dn) == LOW) delay(10); // dokud je tlacitko stisknute, nic se nedeje auto_exit_LED_menu = AUTOEXITMENULED; } if (digitalRead(pin_tl_ok) == LOW) // potvrzovaci tlacitko { delay(10); // odruseni zakmitu unsigned long startTime = millis(); while (digitalRead( pin_tl_ok) == LOW) // dokud je tlacitko stisknute, nic se nedeje { delay(20); trvani_LED_stisku = millis() - startTime; if (trvani_LED_stisku > 500) // stisk trval dele nez 0,5 sekundy { podmenu_LED(pozice_LED_menu1); // skoci se do podmenu - pri navratu z menu zustava nastavena promenna 'trvani_stisku' na vysokou hodnotu, takze se hlavni menu neopusti } } if (trvani_LED_stisku <= 500) // stisk tlacitka OK byl kratsi, nez 0,5 sekundy { auto_exit_LED_menu = 1; // pri kratkem stisku se opusti hlavni menu delay(200); // pauza pred opustenim menu } } auto_exit_LED_menu --; delay(10); } // kdyz je auto_exit_LED_menu = 0, menu se opousti } //---------------------------------------------- //---------------------------------------------- // Jedna ze 4 polozek ve zkracenem menu void podmenu_LED(byte pozice) { LED_R_onoff(true); while (digitalRead( pin_tl_ok) == LOW) // do podmenu se vstoupilo dlouhym stiskem tlacitka OK { // ted je nutne pockat na jeho uvolneni delay(20); } delay(20); LED_R_onoff(false); if (pozice == 1) // posledni zmerena hodnota { unsigned int pomprom = (pole_EEPROM[5] * 256) + pole_EEPROM[6]; vyblikej_cislo(pomprom); } if (pozice == 2) // kalibracni mereni { mereni(5); // prumeruje 10 vzorku, ale vystup vraci bez korekce } if (pozice == 3) // vyblikani aktualniho casu { zobraz_RTC(false); unsigned int pomprom = (LOC_hod * 100) + LOC_min; vyblikej_cislo(pomprom); } if (pozice == 4) // zmena casove zony SEC/SELC { unsigned int pomprom = EEPROM_read(8) + 1; while (digitalRead( pin_tl_ok) == HIGH) // z listovani se vraci stiskem tlacitka OK - dokud neni stisknute, beha tato smycka { delay(20); if (digitalRead( pin_tl_up) == LOW) pomprom = 1; // tlacitko nahoru nastavuje SELC if (digitalRead( pin_tl_dn) == LOW) pomprom = 0; // tlacitko dolu nastavuje SEC if (millis()/100 % 30 == 1) { for (byte i = 0; i <= pomprom ; i ++) { blik_Y_kratky(); } delay(200); } } EEPROM_update(8,pomprom); // posledni zvolena hodnota se ulozi do EEPROM // a nastavi se promenna 'leto' if (pomprom == 1) leto = true; else leto = false; while (digitalRead( pin_tl_ok) == LOW) // cekani na uvolneni OK tlacitka { LED_R_onoff(true); delay(20); } delay(20); LED_R_onoff(false); } delay(1000); auto_exit_LED_menu = 1; // po provedeni cinnosti v podmenu se vypadne z menu do hlavni smycky } //---------------------------------------------- #endif