dragolice Napisano Luty 27, 2023 Udostępnij Napisano Luty 27, 2023 Cześć, chciałbym napisać takie menu, polecacie jakąś metodę, kod przykładowy? Jakoś ciężko mi to przenieść na kod. Link do komentarza Share on other sites More sharing options...
SOYER Luty 28, 2023 Udostępnij Luty 28, 2023 Funkcja switch, poczytaj o niej. O samym robieniu menu ekranowego też było sporo na forum. Link do komentarza Share on other sites More sharing options...
ethanak Luty 28, 2023 Udostępnij Luty 28, 2023 1 godzinę temu, SOYER napisał: Funkcja switch instrukcja... pliz... Link do komentarza Share on other sites More sharing options...
SOYER Luty 28, 2023 Udostępnij Luty 28, 2023 17 minut temu, ethanak napisał: instrukcja... pliz... Tak oczywiście, instrukcja warunkowa switch. 2 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
dragolice Luty 28, 2023 Autor tematu Udostępnij Luty 28, 2023 Tak tylko pojawia się problem z przyciskiem return, nie wiem czy mój schemat został w ogóle przeczytamy. Każdy poziom powinien pozwolić na wejscie poziom wyżej, a nie jak w przypadku switch case dojście do pewnego momentu i loop od nowa od samej góry. Link do komentarza Share on other sites More sharing options...
_LM_ Luty 28, 2023 Udostępnij Luty 28, 2023 (edytowany) http://www.embeddeddev.pl/menu-na-lcd-wprowadzenie/ zapoznaj się z tym artykułem. W ogóle przy tak rozwiniętym menu nie bawiłbym się w switche bo się w nich zaplączesz a utrzymanie takiego kodu będzie koszmarem. Moim zdaniem lepszym rozwiązaniem jest utworzenie struktur odwołujących się do siebie i tablic z opisami poszczególnych pozycji. Mnóstwo pisania z ręki ale kod jest czytelny. Podobne rozwiązanie menu było zaprezentowane w książce Tomasza Francuza "Język C dla mikrokontrolerów AVR" Edytowano Luty 28, 2023 przez _LM_ poprawiłem link Link do komentarza Share on other sites More sharing options...
SOYER Luty 28, 2023 Udostępnij Luty 28, 2023 (edytowany) 3 godziny temu, dragolice napisał: Tak tylko pojawia się problem z przyciskiem return, nie wiem czy mój schemat został w ogóle przeczytamy. Każdy poziom powinien pozwolić na wejscie poziom wyżej, a nie jak w przypadku switch case dojście do pewnego momentu i loop od nowa od samej góry. Mylisz się, instrukcja switch tak nie działa, z dowolnego case możesz przejść do dowolnego innego case. Innymi słowy w case: 8 możesz wpisać by np. po spełnieniu jakiegoś warunku(przycisk?) następny był wykonywany case: 2. Poczytaj więcej o tej instrukcji, bo jie wiem czy ten temat został w ogóle(!piszemy osobno) przez Ciebie przeczytany;) Edytowano Luty 28, 2023 przez SOYER Link do komentarza Share on other sites More sharing options...
ethanak Luty 28, 2023 Udostępnij Luty 28, 2023 Instrukcja switch to nie magia co robi jakieś zaklecia, tylko taki bardziej fajny if. A wejście od nowa w loop to normalny sposób programowania mikrokontrolerów (mi już się znudziło przypominanie wszystkim o maszynie stanów) Link do komentarza Share on other sites More sharing options...
dragolice Luty 28, 2023 Autor tematu Udostępnij Luty 28, 2023 switch(PRZYCISK) { case 1: Zrób to tak; switch(PRZYCISK) { case 1: Zrób w ten sposób; case 2: Ato w ten; } case 2: chce do case 1 w switchu w case 1 tego switcha; } Czyli tak da radę? Maszyna stanów dobre podejście, polecasz jakiś przykład? Link oczywiście przestudiuję, dzięki! Link do komentarza Share on other sites More sharing options...
SOYER Luty 28, 2023 Udostępnij Luty 28, 2023 Oczywiście, że cały czas leci pętla, ale to nie tak jak kolega napisał, że kiedy już pętla dotrze do switch to zawsze na początek wchodzi case1, potem 2 itd. To nie tak. Maszyna stanów to bardzo dobry temat, również omawiany na tym forum. @dragolice nawet ładnie ją rozrysował sobie, teraz musi w końcu przeczytać jak działa instrukcja switch i ruszy z kopyta. Chyba, że kolega @_LM_ podpowie cos więcej, sam się chętnie nauczę, jak za pomocą struktur zrobić fajne menu. Link do komentarza Share on other sites More sharing options...
ethanak Luty 28, 2023 Udostępnij Luty 28, 2023 Przykład bez sensu. Jeśli w momencie wywolania switcha PRZYCISK ma wartość N, to jest mała szansa, aby w switchu w gałęzi odpowiadającej wartości N mial wartośc M (gdzie M != N) Link do komentarza Share on other sites More sharing options...
SOYER Luty 28, 2023 Udostępnij Luty 28, 2023 (edytowany) @dragolice źle... Źle, za bardzo kombinujesz. switch(PRZYCISK) { case 1: Zrób to tak; break case 2: Ato w ten; break case 3: jak( coś){ to wtedy przycisk=2} break } EDIT: Powinno być: to wtedy PRZYCISK=2 Edytowano Luty 28, 2023 przez SOYER Link do komentarza Share on other sites More sharing options...
dragolice Luty 28, 2023 Autor tematu Udostępnij Luty 28, 2023 PRZYCISK = POBIERZ_PRZYCISK(); switch(PRZYCISK) { case 1: Zrób to tak; PRZYCISK = POBIERZ_PRZYCISK(); switch(PRZYCISK) { case 1: Zrób w ten sposób; case 2: Ato w ten; } case 2: chce do case 1 w switchu w case 1 tego switcha; } int POBIERZ_PRZYCISK(void) { int PRZYCISK = BRAK; while (PRZYCISK != PRZYCISK1 && PRZYCISK != PRZYCISK2 && PRZYCISK != PRZYCISK3 && PRZYCISK != PRZYCISK4) { if (digitalRead(2) == LOW) { PRZYCISK = PRZYCISK1; } if (digitalRead(3) == LOW) { PRZYCISK = PRZYCISK2; } if (digitalRead(4) == LOW) { PRZYCISK = PRZYCISK3; } if (digitalRead(5) == LOW) { PRZYCISK = PRZYCISK4; } } while (digitalRead(2) == LOW || digitalRead(3) == LOW || digitalRead(4) == LOW || digitalRead(5) == LOW); return PRZYCISK; } Tak nie przejdzie? Link do komentarza Share on other sites More sharing options...
SOYER Luty 28, 2023 Udostępnij Luty 28, 2023 Jeszcze wyjaśnij co to jest PRZYCISK, żebyśmy sie na pewno dobrze rozumieli i co on ma wspólnego z case. Będziemy też wiedzieć czy cos przeczytałeś o tej instrukcji. Link do komentarza Share on other sites More sharing options...
SOYER Luty 28, 2023 Udostępnij Luty 28, 2023 2 minuty temu, dragolice napisał: PRZYCISK = POBIERZ_PRZYCISK(); switch(PRZYCISK) { case 1: Zrób to tak; PRZYCISK = POBIERZ_PRZYCISK(); switch(PRZYCISK) { case 1: Zrób w ten sposób; case 2: Ato w ten; } case 2: chce do case 1 w switchu w case 1 tego switcha; } int POBIERZ_PRZYCISK(void) { int PRZYCISK = BRAK; while (PRZYCISK != PRZYCISK1 && PRZYCISK != PRZYCISK2 && PRZYCISK != PRZYCISK3 && PRZYCISK != PRZYCISK4) { if (digitalRead(2) == LOW) { PRZYCISK = PRZYCISK1; } if (digitalRead(3) == LOW) { PRZYCISK = PRZYCISK2; } if (digitalRead(4) == LOW) { PRZYCISK = PRZYCISK3; } if (digitalRead(5) == LOW) { PRZYCISK = PRZYCISK4; } } while (digitalRead(2) == LOW || digitalRead(3) == LOW || digitalRead(4) == LOW || digitalRead(5) == LOW); return PRZYCISK; } Tak nie przejdzie? Nie. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »