Witon Napisano Sierpień 9, 2023 Udostępnij Napisano Sierpień 9, 2023 (edytowany) void loop() { int kolor; // jeśli tutaj napiszę np int kolor=0; to program zawsze zwróci wartość 1 if(digitalRead(4)==LOW) //przycisk odpowiadający za kolory { // if(kolor<3) // sprawdzenie wart kolor { kolor+=1; // mozliwości 1+1=2, 2+1=3 delay(150); Serial.println(kolor); } /* else // jeśli kolor=3 to ustawia wart na 1 { kolor=1; delay(150); Serial.println(kolor); }*/ } Witam Dlaczgo aktualny program (pomijając komentarze) po naciśnięciu przycisku zwraca wartości 129,130,131 itd? Jeśli cały program bedzie aktywny to działa logicznie bo kolor(129+)<3 więc wychodzi wynik 1. Da się w jakiś sposób naprawić by domyślne liczby to były np 0,1,2... czy lepiej zmienić warunki na liczby powyżej 129? Edit: nawet tak zmieniony else wyprowadza wynik 1 else { kolor=129; delay(150); Serial.println(kolor); } } Edytowano Sierpień 9, 2023 przez Witon 1
farmaceuta Sierpień 9, 2023 Udostępnij Sierpień 9, 2023 (edytowany) Bo używasz zmiennej lokalnej której niczym nie inicjujesz, stąd w niej może być wartość losowa, tzw. "śmieci" void loop() { static int kolor = 0; if(digitalRead(4)==LOW) { kolor+=1; delay(150); Serial.println(kolor); } } Spróbuj teraz... Edytowano Sierpień 9, 2023 przez farmaceuta 1
Popularny post farmaceuta Sierpień 9, 2023 Popularny post Udostępnij Sierpień 9, 2023 Tfu tfu tfu!!! Po pierwsze trzeba zainicjować zmienną zerem, a po drugie zrobić tak żeby nie była tworzona od nowa przy każdym nowym obiegu pętli loop() magiczne słowo static uratuje tą sytuację... (U góry już poprawiony kod, działający) 2 1
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ę »