Eric00x Napisano Grudzień 22, 2017 Udostępnij Napisano Grudzień 22, 2017 Witam, chciałem zrobić menu, aby sprawdzić swoje umiejętności z kursu. #include <LiquidCrystal.h> / #define czerwona 11 #define zolta 12 #define zielona 13 #define guziklewo 8 #define guzikprawo 9 #define guzikwyboru 19 LiquidCrystal lcd(2, 3, 4, 5, 6, 7); int Wybor = 1; int Menu = 1; void setup() { lcd.begin(16, 2); //Deklaracja typu lcd.clear(); lcd.setCursor(0, 0); lcd.print("==MENU=="); lcd.setCursor(0,1); lcd.print("Czerwona"); pinMode(czerwona, OUTPUT); pinMode(zolta, OUTPUT); pinMode(zielona, OUTPUT); pinMode (guziklewo, INPUT_PULLUP); pinMode (guzikprawo, INPUT_PULLUP); pinMode (guzikwyboru, INPUT_PULLUP); digitalWrite (czerwona, LOW); digitalWrite(zolta, LOW); // DIODY digitalWrite(zielona, LOW); } void loop() { if (Menu == 1){ if (digitalRead(guziklewo) == LOW){ if (Wybor == 1){ lcd.setCursor(0,1); lcd.print("Zielona"); Wybor = 3; delay (500); } else { if((Wybor - 1) == 2) lcd.setCursor(0,1); lcd.print("Zolta"); Wybor = 2; delay (500); } } else { if ((Wybor - 1) == 1) { lcd.setCursor(0,1); lcd.print("Czerwona"); Wybor = 1; delay (500); } } } if (digitalRead(guzikprawo) == LOW){ if (Wybor == 3){ lcd.setCursor(0,1); lcd.print("Czerwona"); Wybor = 1; delay (500); } else { if((Wybor + 1) == 2) lcd.setCursor(0,1); lcd.print("Zolta"); Wybor = 2; delay (500); } } else { if ((Wybor + 1) == 3) { lcd.setCursor(0,1); lcd.print("Zielona"); Wybor = 3; delay (500); } } if (digitalRead(guzikwyboru) == LOW){ if (Menu == 1){ Menu = 0; lcd.setCursor(0,0); lcd.print("Aby wylaczyc"); lcd.setCursor(0,1); lcd.print("wcisnij srodkG"); if (Wybor == 1){ digitalWrite(czerwona, HIGH); } else { if (Wybor == 2){ digitalWrite(zolta, HIGH); } else { digitalWrite(zielona, HIGH); } } } else { lcd.setCursor(0,1); lcd.print("==MENU=="); if (Wybor == 3){ lcd.setCursor(0,1); lcd.print("Czerwona"); Wybor = 1; } else { if((Wybor + 1) == 2) lcd.setCursor(0,1); lcd.print("Zolta"); Wybor = 2; } } } else { if ((Wybor + 1) == 3) { lcd.setCursor(0,1); lcd.print("Zielona"); Wybor = 3; } } delay (1000); } Schematu projektu na razie nie ma, gdyż nie pobrałem jeszcze Fritzing a(spróbuję chociaż). EKRAN JEST Z ZESTAWU, 2x16 Menu działa nie do końca, tzn. można przewijać prawym guzikiem tylko (na LCD zostają resztki po napisie Czerwona, np Zoltaona, Zielonaa), środkowy guzik (wyboru) włącza diodę, lecz nie da się jej wyłączyć środkowym guzikiem, tylko po wciśnięciu niego aktywuje się uszkodzone menu , które można przewijać środkowym i prawym guzikiem (lewy nic nie robi). Zawsze gdy chcę uzyskać żółtą diodę, menu przewija mi do zielonego. Lewym guzikiem nie da się przewijać, gdyż po przewinięciu jest na zielonej i nie da się przewinąć dalej (menu cofa). Co do konstrukcji, jest to wielki pająk (z zestawu zostały mi zaledwie 13 kable (jeden uszkodzony) ) i o dziwo wystarcza mu napięcie z USB. Potencjometr zwiększa/zmniejsza widoczność liter (gamma chyba) poprawnie. Wiem że wielki problem z takiej prostej rzeczy jest (no bynajmniej dla mnie), ale chyba warto spróbować własnymi siłami coś zrobić 🙄 . A i , ostatnie logi to : *ścieżka do folderu*\Arduino\Szkice\menu_diody_lcd_22_12_2017\menu_diody_lcd_22_12_2017.ino:1:28: warning: extra tokens at end of #include directive #include <LiquidCrystal.h> / ^ Szkic używa 2750 bajtów (8%) pamięci programu. Maksimum to 32256 bajtów. Zmienne globalne używają 109 bajtów (5%) pamięci dynamicznej, pozostawiając 1939 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów. Cytuj Link do komentarza Share on other sites More sharing options...
Treker (Damian Szymański) Grudzień 23, 2017 Udostępnij Grudzień 23, 2017 Eric00x, bez komentarzy dość ciężko "wgryźć się" w czyjś kod. Na pierwszy rzut oka podejrzane wydaje się te linie, gdzie wewnątrz sprawdzanego warunku dodajesz/odejmujesz coś od sprawdzanej wartości, np.: "if ((Wybor + 1) == 3) {". Dlaczego właśnie tak? Jeśli chodzi o "pozostałości" na wyświetlaczu. To jest to normalne zachowanie. Aby tego uniknąć musisz "ręcznie" czyścić najpierw miejsce, w którym chcesz pisać. W tym przypadku można to zrobić też łatwiej. Wystarczy, że wszystkie wypisywane ciągi znaków będą tej samej długości. Czyli, gdy wypisujesz "Czerwona", co ma 8 znaków, to w przypadku "Zolta" możesz dodać 3 znaki spacji i wypisywać "Zolta___". Nie będzie to eleganckie rozwiązanie, ale zadziała 😉 1 Cytuj Link do komentarza Share on other sites More sharing options...
Eric00x Grudzień 23, 2017 Autor tematu Udostępnij Grudzień 23, 2017 Jeżeli chodzi o wyrażenie Wybor , miało być to wyrażenie, które przechowuje opcję, która była wyświetlana na wyświetlaczu (np. czerwona = 1 , żółta = 2 itd.), a przy okazji można było zrobić tak, żeby ze stanu 3 po wciśnięciu prawego guzika przechodziło do 1ki. Sposób jest jaki jest, bynajmniej jakoś działa (ale "instalacja" została rozłożona - głównie ze względu na to , że dość dużo kabli poszło na nią i była głównie bezużyteczna) Komentarzy głównie nie piszę, bo głównie nie chce mi się. 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!