szczepulek Napisano Październik 27, 2019 Udostępnij Napisano Październik 27, 2019 W osobnym temacie samo menu do wykorzystania z wyświetlaczami 7 segmentowymi, pozwala się przełączać pomiędzy kolejnymi "stronami" w pętli np.: 1 - 2 - 3 - 4 - 1 - 2 - 3 -... Button podpięty pod PIN w przykładzie 4 (INPUT_PULLUP) i zwierający z masą GND. #include <TM1637Display.h> /* Napisał: Szczepulek * UWAGA MODYFIKACJA KODU Z LCD NA LED 7 segmentowy 4-digit * kod oryginalny dla cieklokrystalicznych https://github.com/FritzenLab/LCD-Screen-Menu-System/tree/master/LCD-Screen-Menu * Clovis Fritzen in 05/06/2017 */ #define CLK1 5 //wyswietlacz nr1 8segm.4-cz #define DIO1 6 //wyswietlacz nr1 8segm.4-cz int WhichScreen =1; // Nr strony przechowywany w zmiennej //This variable stores the current Screen number boolean hasChanged = true; const int buttonPin = 4; // PIN dla przycisku // the number of the pushbutton pin int buttonState; // status przycisku obecny - odczyt // the current reading from the input pin int lastButtonState = LOW; // poprzedni stan na przycisku unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers TM1637Display display_1(CLK1, DIO1); // ustawienia wyjsc dla wyswietlacza na tm1637 uint8_t wysw1LED[] = { 0x00, 0x00, 0x00, 0x00 }; //Dla LEDDispl4digit //wyswietlenie segmentow dla AL const uint8_t disp_alarm[] = { SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G , // A SEG_D | SEG_E | SEG_F // L }; //wyswietlenie segmentow dla L const uint8_t disp_linia[] = { SEG_D | SEG_E | SEG_F ,// L 0 // O }; void setup() { pinMode(buttonPin, INPUT_PULLUP); display_1.setBrightness(0x0a); //LED7Seg jasnosc Serial.begin(9600); WhichScreen = 0; //aby przy starcie zaczynało na pierwszej opcji menu } void loop() { if (hasChanged == true) { switch(WhichScreen) { case 1: { firstScreen(); } break; case 2: { secondScreen(); } break; case 3: { thirdScreen(); } break; /* Dla wiekszej ilosci wyswietlania pozycji menu * case 4: { fourthScreen(); } break; case 5: { fifthScreen(); } break; case 6: { sixthScreen(); } break; */ case 0: //konczacy zapis menu { } break; } } //------------------------------- // BEGIN of the switch debouncing code int reading = digitalRead(buttonPin); if (reading != lastButtonState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: // if the button state has changed: if (reading != buttonState) { buttonState = reading; // only toggle the LED if the new button state is HIGH if (buttonState == HIGH) { hasChanged = true; WhichScreen++; } } else { hasChanged = false; } } lastButtonState = reading; // END of the switch Debouncing code // -------------------------------------- if (WhichScreen > 3){ // UWAGA! jesli masz wiecej stron niz 3, musiasz zmienic warunek wpisujac wartosc rowna ilosci stron WhichScreen = 1; } } void firstScreen() { display_1.clear(); Serial.println("glowny ekran"); // test w serial display_1.showNumberDec(99, false, 2, 2); } void secondScreen() { display_1.clear(); //konieczne by nie nakladaly sie na siebie znaki/liczby z poprzedniego menu int alarmHigh = 30; display_1.setSegments(disp_alarm, 2, 0); display_1.showNumberDec(alarmHigh, false, 2, 2); Serial.print("alarm:"); // test w serial Serial.println(alarmHigh); } void thirdScreen() { display_1.clear(); int liniaNr = 7; display_1.showNumberDecEx(liniaNr,0, true); display_1.setSegments(disp_linia, 2, 0); Serial.print("linia nr:"); // test w serial Serial.println(liniaNr); } /* dla większej ilosci przejsc miedzy wyswietlanymi informacjami/stronami !!! void fourthScreen() { //tresc 4 strony } void fifthScreen() { //tresc 5 strony } void sixthScreen() { //tresc 6 strony } */ 1 Cytuj Link do komentarza Share on other sites More sharing options...
szczepulek Październik 27, 2019 Autor tematu Udostępnij Październik 27, 2019 okej, nie jest to rozwiązanie satysfakcjonujące, jeśli ma byś statyczne wyświetlanie ok. W momencie gdy dodam np. int value = analogRead(2); Serial.print(F("Wejscie analogowe 2 ma wartosc: ")); Serial.println(value) w pętli loop. to będzie sobie wyświetlać serial w monitorze wartości, lecz wyswietlając w case1 (1 strona) te zmienna value, nie zmienia się, nie odświeża jej nawet po przeskoczeniu przez wszystkie strony. No to się pocieszyłem 🙂 Cytuj Link do komentarza Share on other sites More sharing options...
szczepulek Październik 28, 2019 Autor tematu Udostępnij Październik 28, 2019 Poprawiony kod... po dodaniu klawisza przełączającego zmienną pokazMenu na true/false, oraz warunku if..else uwzględniającego tą zmienną i powodującą wykonanie kodu dla programu właściwego .. np wyświetlanie wartości na wejściu analogowym (przy pokazMenu=0) lub kodu dla menu (pokazMenu=1). Domyślnie po starcie wartość zmiennej jest zapisana jako 0. #include <TM1637Display.h> /* Napisał: Szczepulek * UWAGA MODYFIKACJA KODU Z LCD NA LED 7 segmentowy 4-digit * kod oryginalny dla cieklokrystalicznych https://github.com/FritzenLab/LCD-Screen-Menu-System/tree/master/LCD-Screen-Menu * Clovis Fritzen in 05/06/2017 */ #define CLK1 5 //wyswietlacz nr1 8segm.4-cz #define DIO1 6 //wyswietlacz nr1 8segm.4-cz int WhichScreen =1; // Nr strony przechowywany w zmiennej //This variable stores the current Screen number boolean hasChanged = true; boolean pokazMenu = 0; // zmienna do przelaczania miedzy menu a reszta programu const int buttonPin = 4; // PIN dla przycisku // the number of the pushbutton pin const int buttonMenu = 5; // wywolanie menu z przycisku do GND int buttonState; // status przycisku obecny - odczyt // the current reading from the input pin int lastButtonState = LOW; // poprzedni stan na przycisku unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers TM1637Display display_1(CLK1, DIO1); // ustawienia wyjsc dla wyswietlacza na tm1637 uint8_t wysw1LED[] = { 0x00, 0x00, 0x00, 0x00 }; //Dla LEDDispl4digit //wyswietlenie segmentow dla AL const uint8_t disp_alarm[] = { SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G , // A SEG_D | SEG_E | SEG_F // L }; //wyswietlenie segmentow dla L const uint8_t disp_linia[] = { SEG_D | SEG_E | SEG_F ,// L 0 // O }; void setup() { pinMode(buttonPin, INPUT_PULLUP); pinMode(buttonMenu, INPUT_PULLUP); display_1.setBrightness(0x0a); //LED7Seg jasnosc Serial.begin(9600); WhichScreen = 0; //aby przy starcie zaczynało na pierwszej opcji menu } void loop() { int value = analogRead(2); // pomiar na analogowym wejsciu losowej if (digitalRead(33) == LOW) // sprawdza czy na pinie 33 stan LOW niski, jesli tak to .. { delay(250); pokazMenu = !pokazMenu; // ..zmienia prawde logiczna w zmiennej typu boolean na przeciwna, czyli 1 na 0 lub 0 na 1 } /* pierwsza czesc programu , czyli robi co tam chcecie, pomiary, wyswietlanie w czasie rzeczywistym itp */ if (pokazMenu == 0) // jesli (domyslnie na starcie) mamy 0 to wykonaj program, wlasciwy..czy tez ten ktory ma sie glownie wykonywac { display_1.showNumberDec(value); //info domslna strona a raczej wyswietlacz, z w tym przypadku do testow wartoscia napiecia na analogowym pinie hasChanged = true; // ustawiam na true, aby po wlaczeniu na menu pojawila sie na wyswietlaczu strona ustawien, bez tego zostaje zamrozony wynik ostatniego pomiaru z wejscia analogowego } /* no a tutaj juz sam kod do menu */ else { if (hasChanged == true) { //wykonanie menu wszystko w dol switch(WhichScreen) { case 1: { firstScreen(); } break; case 2: { secondScreen(); } break; case 3: { thirdScreen(); } break; /* Dla wiekszej ilosci wyswietlania pozycji menu * case 4: { fourthScreen(); } break; case 5: { fifthScreen(); } break; case 6: { sixthScreen(); } break; */ case 0: //konczacy zapis menu { } break; } } //------------------------------- // BEGIN of the switch debouncing code int reading = digitalRead(buttonPin); if (reading != lastButtonState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: // if the button state has changed: if (reading != buttonState) { buttonState = reading; // only toggle the LED if the new button state is HIGH if (buttonState == HIGH) { hasChanged = true; WhichScreen++; } } else { hasChanged = false; } } lastButtonState = reading; // END of the switch Debouncing code // -------------------------------------- if (WhichScreen > 3){ // UWAGA! jesli masz wiecej stron niz 3, musiasz zmienic warunek wpisujac wartosc rowna ilosci stron WhichScreen = 1; } } } void firstScreen() { display_1.clear(); Serial.println("glowny ekran"); // test w serial display_1.showNumberDec(99, false, 2, 2); } void secondScreen() { display_1.clear(); //konieczne by nie nakladaly sie na siebie znaki/liczby z poprzedniego menu int alarmHigh = 30; display_1.setSegments(disp_alarm, 2, 0); display_1.showNumberDec(alarmHigh, false, 2, 2); Serial.print("alarm:"); // test w serial Serial.println(alarmHigh); } void thirdScreen() { display_1.clear(); int liniaNr = 7; display_1.showNumberDecEx(liniaNr,0, true); display_1.setSegments(disp_linia, 2, 0); Serial.print("linia nr:"); // test w serial Serial.println(liniaNr); } /* //dla większej ilosci przejsc miedzy wyswietlanymi informacjami/stronami !!! void fourthScreen() { //tresc 4 strony } void fifthScreen() { //tresc 5 strony } void sixthScreen() { //tresc 6 strony } */ Cytuj Link do komentarza Share on other sites More sharing options...
szczepulek Październik 28, 2019 Autor tematu Udostępnij Październik 28, 2019 (edytowany) Dodana kolejna funkcjonalność, dla zmiany parametrów dla danej zakładki / CASE i wyświetlenie parametrów zmiennej po zmianie. Aby uzyskać te udogodnienia należy zaraz po Cytat else { dodać następujący kod, /* deklarujemy z którego PINu ma być sygnał niski/LOW/0 oraz poprzez '&&' (warunek AND/ i) dodajemy WhichScreen, liczba 2 w tym wypadku mowi ze aby funkcja zadzialala MUSI byc atywna strona 2, dzieki temu dodane dzialania , funkcje, itp beda realizowane wylacznie dla tego okna, zapobiegajac przypadkowej edycji wartosci u mnie 'alarmHigh'. W innym wypadku bedac na stronie 3 niechcacy mozna by zmienic parametry alarmu */ if (digitalRead(31) == LOW && WhichScreen == 2) //pierwszy warunek dla wejscia PIN 31 = 0 i strony wyswietlanej 2 if (WhichScreen == 2) //drugi warunek wstawiony tylko dla pewnosci, bez niego podczas przeskakiwania miedzy funkcjami pomiaru i menu petla byla wykonywana { alarmHigh[1]++; //tutaj akurat podnosze o 1 wartosc alarmu, i zapisywane jest do tablicy hasChanged = true; // odswierza dana strone na ktorej sa wprowadzane zmiany poprawiajac wyswietlanie zmiennych } } Oczywiście dla wygody można użyć jednej tablicy do wszystkich stron, aby nie rozrastał się kod.. i tak oto pod zmienną s można przypisać numer strony wyświetlanej, oraz miejsce w tabeli.. No dobra, poniżej całkowity kod, z utworzoną tablicą dla parametrów każdej strony tabStrMenu[noleży_wpisać_ilosc_stron], Wykasowane nie potrzebne części kodu z testów. #include <TM1637Display.h> /* ! ! ! ! ! ! ! ! ! ! ! !! !! ! ! ! ! ! * UWAGA MODYFIKACJA KODU Z LCD NA LED 7 segmentowy 4-digit * * ! ! ! ! ! !! ! ! ! ! ! ! !! ! * * This code create a MENU structure on a 16x2 LCD screen. * Six (6) different screens are implemented, and you can travel * thru them by pressing a button on Arduino PIN 4. Each press * of the button advances one (1) screen. * * Made by Clovis Fritzen in 05/06/2017 * http://www.FritzenMaker.com * http://www.FritzenLab.com.br */ #define CLK1 5 //wyswietlacz nr1 8segm.4-cz #define DIO1 6 //wyswietlacz nr1 8segm.4-cz int WhichScreen =1; // This variable stores the current Screen number boolean hasChanged = true; boolean pokazMenu = 0; const int buttonPin = 37; // the number of the pushbutton pin const int buttonMenu = 33; // wywolanie menu const int buttonOk = 32; // zatwierdz/zapisz key OK const int buttonUp = 31; // edycja key UP const int buttonDn = 30; // edycja key DOWN int buttonState; // the current reading from the input pin int lastButtonState = LOW; // the previous reading from the input pin unsigned long lastDebounceTime = 0; // the last time the output pin was toggled unsigned long debounceDelay = 75; // the debounce time; increase if the output flickers /* tabStrMenu - przechowywanie poszczegolnych ustawien dla kolejnych stron, 0 - niewykozystane, 1 - dla 1 strony czyli ALARM, 2 - przechowywany numer LINII; mozna tez przypisac do stron przez 's-1' w linii funkci menu */ int tabStrMenu[3]; // dane ze stron/menu LED // ilosc deklarowana = ilosc stron + 1; int value; //testowe TM1637Display display_1(CLK1, DIO1); // ustawienia wyjsc dla wyswietlacza na tm1637 uint8_t wysw1LED[] = { 0x00, 0x00, 0x00, 0x00 }; //Dla LEDDispl4digit //wyswietlenie segmentow dla AL const uint8_t disp_alarm[] = { SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G , // A SEG_D | SEG_E | SEG_F // L }; //wyswietlenie segmentow dla L const uint8_t disp_linia[] = { SEG_D | SEG_E | SEG_F ,// L 0 // O }; /* int test[2]; // tylko gdy potrzebuesz wartosci do Case */ void setup() { // lcd.init(); // initialize the lcd 0x20 lub 0x38?? // lcd.backlight(); // z LCD pinMode(buttonPin, INPUT_PULLUP); pinMode(buttonMenu, INPUT_PULLUP); pinMode(buttonUp, INPUT_PULLUP); pinMode(buttonDn, INPUT_PULLUP); display_1.setBrightness(0x0b); //LED7Seg jasnosc Serial.begin(9600); tabStrMenu[1]=33; //do testow domyslna wartosc dla alarmu, domyslnie pobierane z EEPROM tabStrMenu[2]=8; //domyslnie z eeprom - pobranie numeru linii WhichScreen =0; // aby menu startowalo od 1 str. } void loop() { int value = analogRead(2); // pomiar na analogowym wejsciu losowej Serial.print(F("Wejscie analogowe 2 ma wartosc: ")); // to na nic tu nie potrzebne Serial.println(value); /* test[1] = value; //zapis do tablicy potrzebny aby w CASE mozna bylo odczytac wartosc, po wrzuceniu do warunku na poczatku funkcji loop nie porzebne. */ if (digitalRead(33) == LOW) // sprawdza czy na pinie 33 stan LOW niski, jesli tak to .. { pokazMenu = !pokazMenu; // ..zmienia prawde logiczna w zmiennej typu boolean na przeciwna, czyli 1 na 0 lub 0 na 1 delay(250); } // jesli (domyslnie na starcie) mamy 0 to wykonaj program, wlasciwy..czy tez ten ktory ma sie glownie wykonywac if (pokazMenu == 0) { //GLOWNY PROGRAM display_1.showNumberDec(value); //info domslna strona a raczej wyswietlacz, z w tym przypadku do testow wartoscia napiecia na analogowym pinie hasChanged = true; // ustawiam na true, aby po wlaczeniu na menu pojawila sie na wyswietlaczu strona ustawien, bez tego zostaje zamrozony wynik ostatniego pomiaru z wejscia analogowego } else // jesli zmienna pokazMenu ma wartosc inna niz zero.. w tym wypadku tylko moze byc to 1 wykonaj.. wyswietlenie menu { int s = WhichScreen; // UWAGA! nalezy zadeklarowac tablice o liczbie elementow nie mniejszej niz ilosc stron. if (digitalRead(31) == LOW && WhichScreen == s) // zmiana parametrow UP/dodaj { Serial.print("strona nr :"); Serial.println(WhichScreen); if (WhichScreen == s) { tabStrMenu[s]++; hasChanged = true; delay (25); } } if (digitalRead(30) == LOW && WhichScreen == s) // zmiana parametrow DOWN/odejmij { if (WhichScreen == s) { tabStrMenu[s]--; hasChanged = true; delay(25); } } if (hasChanged == true) { switch(WhichScreen) { case 1: { firstScreen(); } break; case 2: { secondScreen(); } break; /* Dla wiekszej ilosci wyswietlania pozycji menu * case 3: { thirdScreen(); } break; case 4: { fourthScreen(); } break; case 5: { fifthScreen(); } break; case 6: { sixthScreen(); } break; */ case 0: //konczacy zapis menu { } break; } } //------------------------------- // BEGIN of the switch debouncing code int reading = digitalRead(buttonPin); if (reading != lastButtonState) { // reset the debouncing timer lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > debounceDelay) { // whatever the reading is at, it's been there for longer // than the debounce delay, so take it as the actual current state: // if the button state has changed: if (reading != buttonState) { buttonState = reading; // only toggle the LED if the new button state is HIGH if (buttonState == HIGH) { hasChanged = true; WhichScreen++; } } else { hasChanged = false; } } lastButtonState = reading; // END of the switch Debouncing code // -------------------------------------- if (WhichScreen > 2){ //ilosc wszystkich stron WhichScreen = 1; } } } void firstScreen() // pierwsza strona opcji { display_1.clear(); //konieczne by nie nakladaly sie na siebie znaki/liczby z poprzedniego menu display_1.setSegments(disp_alarm, 2, 0); display_1.showNumberDec(tabStrMenu[1], false, 2, 2); //wyswietla graniczna temp. alarmu Serial.print("Alarm od:"); // test w serial Serial.println(tabStrMenu[1]); } void secondScreen() // druga str opcji itd itp { display_1.clear(); display_1.showNumberDecEx(tabStrMenu[2],0, true); // wartosc przechowywana dla Nr Linii display_1.setSegments(disp_linia, 2, 0); Serial.print("linia nr:"); // test w serial Serial.println(tabStrMenu[2]); } /* dla większej ilosci przejsc miedzy wyswietlanymi informacjami, ponizej rozpiska dla wyswietlacza LCD !!! void fourthScreen() { lcd.clear(); lcd.setCursor(0,0); // Column, line lcd.print("This is screen 4"); lcd.setCursor(0,1); lcd.print("Just press btn"); } void fifthScreen() { lcd.clear(); lcd.setCursor(0,0); // Column, line lcd.print(" Fifth screen"); lcd.setCursor(0,1); lcd.print("i2C LCD screen"); } void sixthScreen() { lcd.clear(); lcd.setCursor(0,0); // Column, line lcd.print("THE last screen"); lcd.setCursor(0,1); lcd.print(" Sixth and last"); } */ Myślę że tyle wystarczy w temacie MENU dla 4-Digits Display LED 🐵 Edytowano Październik 28, 2019 przez szczepulek 1 Cytuj Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
szczepulek Październik 28, 2019 Autor tematu Udostępnij Październik 28, 2019 (edytowany) a jednak, coś jeszcze :D.. dotychczasowy program wymagał przycisku by wejść w menu, wyjść z menu. przycisku by przeskakiwać pomiędzy stronami menu, przycisku do podnoszenia w górę zmiennych, i zmniejszających zmienne. w sumie 4, no nie ukrywam że 5 też dojdzie do zatwierdzania / zapisywania ustawień do eeprom. Tak czy inaczej można się pozbyć jednego do przeskakiwania po stronach i użyć do tego wyzwalającego menu. W chwili wciśnięcia zamiast zmieniać stan zapamiętany dla zmiennej pokazMenu, ustawiamy na 1. W wyniku czego ładuje się strona 1, nasłuchujemy zamiast buttonPin, nadal buttonMenu. po przyciśnięciu go zamiast wrócić do głównej cześci programu z manu, przeskakujemy na następną stronę drugą, trzecią itd.. w zależności ile ich ustawiono jeżeli jak ja używacie 2 stron, dodajemy jeszcze trzecią, i w linii case 3: //przykładowa ostatnia strona { pokazMenu = 0; //powracamy do głównej części programu } break; jak w przykładzie, wpisanie pokazMenu =0; ustawia warunek spełniający wymagania dla głównej części funkcji działającej domyślnie. by to działało należy zmienić jeszcze te części kodu: if (digitalRead(33) == LOW) // sprawdza czy na pinie 33 stan LOW niski, jesli tak to .. { pokazMenu = !pokazMenu; // ..zmienia prawde logiczna w zmiennej typu boolean na przeciwna, czyli 1 na 0 lub 0 na 1 delay(250); } na: if (digitalRead(33) == LOW) //pin buttonMenu { // pokazMenu = !pokazMenu; // ..zmienia prawde logiczna w zmiennej typu boolean na przeciwna, czyli 1 na 0 lub 0 na 1 pokazMenu = 1; //obsluga 1 przyciskiem, i ostatnia strona powrot do glownego programu delay(250); } i nasłuchujemy ten sam button dla zmiany stron int reading = digitalRead(buttonMenu); // obsluga jednym klawiszem do menu if (reading != lastButtonState) { Wstawiony film to prezentacja działania z osobnymi klawiszami do wejscia/wyjscia menu i osobnego do zmiany stron. vid-20191028-menuLED7seg.zip Edytowano Październik 28, 2019 przez szczepulek Cytuj Link do komentarza Share on other sites More sharing options...
szczepulek Październik 28, 2019 Autor tematu Udostępnij Październik 28, 2019 (edytowany) Uaktualnienie informacji, zastosowałem menu do swojego projektu pomiaru temperatur, w miedzyczsie dokonałem kilku jeszcze zmian. Dodano/zmieniono: alarmowanie o nie zapisaniu zmiennej w ustawieniach przez blink na PIN 13 (miganie przy użyciu millis(), nie jest to takie trudne jak na początku się wydawało) DZIEKI @RFM za motywację 🙂 próbowałem miganie na wyświetlaczach ale przez sposób ich sterowania efekt był mizerny. dodano regułkę podczas przebywania na jednej ze stron Menu i braku aktywności któregokolwiek z klawiszy przez określony czas (u mnie 15 sek, maks. 65 sek z zmienna typu WORD) samoczynnie powraca do funkcji podstawowej, czyli wyświetlania u mnie temperatur czujników. Cytat pracuję w tej chwili nad warunkiem, który sprawdza przy opuszczaniu menu czy zapisano nowe nastawy, jeśli nie. powrót do wartości z eepromu, obecnie po wyjściu z menu nadal działa blink, a nie pamiętając poprzednich nastaw (lub chcący je poznać) trzeba po kolei sprawdzać wartości ,aż zniknie miganie. ukończyłem, 2 minuty.. if(millis() - autoExitMenu > autoExitCzas) //warunek wyprowadza z menu, jesli brak aktywnosci podana ilosc czasu (ms) { if (eepromOdczyt[s] != tabStrMenu[s]) // jeśli wartość w pamięci, i w tablicy przechowujacej obecne nastawy są różne to... tabStrMenu[s] = eepromOdczyt[s]; // zapisz do tablicy odczyt z eeprom, pokazMenu = 0; // przejdz do glownej funkcji autoExitMenu = millis(); // kasowanie odliczania braku aktywnosci, a raczej zapisanie obecnego czasu dzialania do obliczania. } /* czas zapisu do EEPROM w arduino to chyba 3ms, nie wiem ile zamuje odczyt, na wszelki wypadek na poczatku petli glownej przypisalem do tablicy eepromOdczyt[] wartosci odczytane z EEPROM.read(); kilka razy odnosze sie w swoim kodzie do tych wartosci, wiec jesli to ma znaczenie to przyoszczedze kilka ms, jesli nie, to i tak nic sie nie stalo ;-P */ animacje przy zapisaniu do eeprom i zatwierdzeniu. Gdy skończę wcześniejszy projekt umieszczę kod ze zmianami.. Edytowano Październik 29, 2019 przez szczepulek kilka poprawek 1 Cytuj Link do komentarza Share on other sites More sharing options...
szczepulek Listopad 21, 2019 Autor tematu Udostępnij Listopad 21, 2019 rozwinięcie i wykorzystanie w praktyce.. zapraszam do tematu 1 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Dołącz do dyskusji, napisz odpowiedź!
Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!