bardgang Napisano Grudzień 14, 2020 Udostępnij Napisano Grudzień 14, 2020 (edytowany) Założenie mojego programu było takie: jeśli naciśniesz przycisk ma się coś stać a jeśli naciśniesz inny przycisk także, przyciski miały być naciskane po kolei ponieważ inaczej następujące po sobie czynności nie miały zostać wykonane. Program miał być w pętli while i wyglądał tak: while (digitalRead(40)==HIGH) {} A niech coś się stanie if (digitalRead(44)==HIGH) {} niech coś się stanie Da się wo gule robić coś takiego w pętli? Chciałem podkreślić że niezależnie od tego czy jest tam pętla while czy nie warunek nie chce działać. Edytowano Grudzień 14, 2020 przez bardgang Link do komentarza Share on other sites More sharing options...
Cydek Grudzień 14, 2020 Udostępnij Grudzień 14, 2020 7 minut temu, bardgang napisał: Chciałem podkreślić że niezależnie od tego czy jest tam pętla while czy nie warunek nie chce działać Możesz sprecyzować? Link do komentarza Share on other sites More sharing options...
Belferek Grudzień 14, 2020 Udostępnij Grudzień 14, 2020 (edytowany) 51 minut temu, bardgang napisał: A niech coś się stanie W pętli while nie dzieje się nic. W skrajnym przypadku program może w niej utknąć, a jak nie utknie to 51 minut temu, bardgang napisał: A niech coś się stanie Wykona się zawsze. Podobnie z warunkiem if. Przeanalizuj rozmieszczenie swoich nawiasów. Edytowano Grudzień 14, 2020 przez Belferek Link do komentarza Share on other sites More sharing options...
aerograf7 Grudzień 14, 2020 Udostępnij Grudzień 14, 2020 @bardgang 1 godzinę temu, Belferek napisał: Przeanalizuj rozmieszczenie swoich nawiasów. Klamrowych 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
bardgang Grudzień 14, 2020 Autor tematu Udostępnij Grudzień 14, 2020 @Belferek Jak to w pętli while nie dzieje się nic? @Cydek Tak mogę sprecyzować, chodziło mi o to że jeśli mamy pętle while a w niej ifa to przykładowo mamy program: jeśli naciśniesz guzik coś ma się stać i to jest pętla a potem if, jeśli naciśniesz guzik też ma sie coś stać. Rzecz w tym że nie zależnie czy przykładowo ten guzik w ifie zostanie naciśnięty czy nie czynność która miała się stać po wciśnięciu guzika w ifie i tak zostanie wykonana. Link do komentarza Share on other sites More sharing options...
SOYER Grudzień 14, 2020 Udostępnij Grudzień 14, 2020 2 godziny temu, Belferek napisał: Przeanalizuj rozmieszczenie swoich nawiasów. Popieram:) Link do komentarza Share on other sites More sharing options...
Gieneq Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 @bardgang to może Ci się przydać: Link do komentarza Share on other sites More sharing options...
bardgang Grudzień 15, 2020 Autor tematu Udostępnij Grudzień 15, 2020 Niestety nadal nie działa, może to ułatwi sprawę w rozwiązaniu problemu: if(klawisz1,2){ if (x==0 &&klawisz1 == 'g') { x++; } else if (x==1 && klawisz1 == 'a') { x++; }else if (x==2 && klawisz2 == 'm') { x++; }else if(x==3 && klawisz1 =='e'){ x++; lcd.clear(); lcd.setCursor(0,0); lcd.print("Witaj w grze saper"); lcd.setCursor(0,1); lcd.print("nacisni F1 by zaczac"); while (digitalRead(40)==HIGH) {} lcd.clear(); lcd.setCursor(5,0); lcd.print("####"); lcd.setCursor(5,1); lcd.print("####"); lcd.setCursor(5,2); lcd.print("####"); lcd.setCursor(5,3); lcd.print("####"); I TUTAJ MA BYĆ IF TYLKO CZY TAK SIĘ DA? } } } } Link do komentarza Share on other sites More sharing options...
SOYER Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 @bardgang napisz proszę, co w. g. Ciebie, w powyższym kodzie wykonuje się w pętli while, oraz uzasadnij dlaczego.. Link do komentarza Share on other sites More sharing options...
aerograf7 Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 (edytowany) @bardgang to ↓ nie ma prawa działać if(klawisz1,2){ if (x==0 &&klawisz1 == 'g') { x++; } else if (x==1 && klawisz1 == 'a') { x++; }else if (x==2 && klawisz2 == 'm') { x++; }else if(x==3 && klawisz1 =='e'){ x++; lcd.clear(); lcd.setCursor(0,0); lcd.print("Witaj w grze saper"); lcd.setCursor(0,1); lcd.print("nacisni F1 by zaczac"); while (digitalRead(40)==HIGH) {} lcd.clear(); lcd.setCursor(5,0); lcd.print("####"); lcd.setCursor(5,1); lcd.print("####"); lcd.setCursor(5,2); lcd.print("####"); lcd.setCursor(5,3); lcd.print("####"); I TUTAJ MA BYĆ IF TYLKO CZY TAK SIĘ DA? } } } } A to ↓ już tak if(klawisz1,2){ if (x==0 &&klawisz1 == 'g') { x++; } else if (x==1 && klawisz1 == 'a') { x++; }else if (x==2 && klawisz2 == 'm') { x++; }else if(x==3 && klawisz1 =='e'){ x++; lcd.clear(); lcd.setCursor(0,0); lcd.print("Witaj w grze saper"); lcd.setCursor(0,1); lcd.print("nacisni F1 by zaczac"); while (digitalRead(40)==HIGH) { lcd.clear(); lcd.setCursor(5,0); lcd.print("####"); lcd.setCursor(5,1); lcd.print("####"); lcd.setCursor(5,2); lcd.print("####"); lcd.setCursor(5,3); lcd.print("####"); I TUTAJ MA BYĆ IF TYLKO CZY TAK SIĘ DA? } } } } Przeanalizuj sobie co robisz źle. Edytowano Grudzień 15, 2020 przez aerograf7 Link do komentarza Share on other sites More sharing options...
bardgang Grudzień 15, 2020 Autor tematu Udostępnij Grudzień 15, 2020 Noi sobie tak analizuje @aerograf7 i mi wyszło że nic nie zmieniłeś. @SOYER Ok uzasadnię co się według mnie dzieje w tej pętli while i po co to jest, otóż po naciśnięciu guziku na pinie 40 na ekranie lcd wyświetlić się ma coś takiego: #### #### #### #### A po to to jest ponieważ kiedy napisałem normalnego ifa wskazywało na błąd, teraz kiedy chcę zrobić ifa w tej pętli nie wskazuje na błąd jednak if ten jest wykonywany zanim użytkownik naciśnie guzik a tak nakazuje ten warunek. 1 Link do komentarza Share on other sites More sharing options...
SOYER Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 @bardgang a co dzieje w takiej pętli while: while(cośtam) {} digitalWrite(1,1); ? a co w takiej: while(cośtam) { digitalWrite(1,1); } ? 1 Link do komentarza Share on other sites More sharing options...
aerograf7 Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 @bardgang Wiesz do czego służą nawiasy klamrowe? Link do komentarza Share on other sites More sharing options...
SOYER Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 @bardgang możesz napisać z czym się nie zgadzasz w moim poprzednim poście, że taka reakcja? Link do komentarza Share on other sites More sharing options...
Cydek Grudzień 15, 2020 Udostępnij Grudzień 15, 2020 (edytowany) Najestetyczniej i najczytelniej jest w taki sposób: while(jakiś warunek) { rób coś tam; while(jakiś warunek) { rób jeszcze coś innego; } } Możliwe, że chodzi o te nawiasy. Natomiast jak widzę coś takiego: while(warunek){ rób coś; }while(warunek){ rób coś; } to dostaje drgawek. Proszę tak nie robić, bo z tego się robią same problemy. Tym bardziej coś takiego: while(warunek){} rób coś; Pamiętaj, że ciało pętli (czyli to co ma się wykonać pod jakimś warunkiem) MUSI (x3) być w klamrach. Inaczej stanie się tak jak pisałeś wcześniej, czyli pętla wykona się raz i nie ważne czy guzik będzie wciśnięty czy nie. Pozdrawiam Edytowano Grudzień 15, 2020 przez Cydek poprawa informacji 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ę »