14-02-2023, 20:56
To ja się będę czepiał na początek.
1) W niektórych miejscach kodu piszesz:
w innych:
zdecyduj się na jedną wersję i tego się trzymaj - nie rób burdelu tylko dlatego, że coś skejasz z kilku gotowców. Jak będziesz chciał robić bardziej skomplikowane projektu to po prostu zginiesz z takim czymś.
2) Nie stosuj delay! To najgorsze, co można zrobić swojemu mikrokontrolerowi
3) Kolejny twór, którego osobiście bym nie zastosował:
czyli program zapętla się w czasie trzymania przycisku i nic nie może zrobić innego
4) Tutaj jest dla mnie niejasne:
skoro funkcja selectAction() nie zmienia wartości zmiennej menu to po kiego grzyba po niej jest updateMenu()?
5) I dalej w kodzie (moje komentarze):
Przeanalizuj przykłady dostępne w Arduino IDE: Przykłady > Digital > Debounce albo skorzystaj z gotowej biblioteki. W przypadku przycisków masz do czynienia z drganiami styków, które musisz wziąć pod uwagę. Dobrym pomysłem jest to, co pisze kolega kaczakat - zamiast wyważać otwarte drzwi zobacz jak to jest rozwiązane u innych.
Przede wszystkim postaraj się zrozumieć co robi kod, który napisałeś.
1) W niektórych miejscach kodu piszesz:
Kod:
if(!digitalRead(downButton))
Kod:
if(digitalRead(backButton) == HIGH)
2) Nie stosuj delay! To najgorsze, co można zrobić swojemu mikrokontrolerowi
3) Kolejny twór, którego osobiście bym nie zastosował:
Kod:
while(!digitalRead(downButton));
4) Tutaj jest dla mnie niejasne:
Kod:
if(!digitalRead(selectButton))
{
selectAction();
updateMenu();
delay(100);
while(!digitalRead(selectButton));
}
5) I dalej w kodzie (moje komentarze):
Kod:
void action1()
{
przejazdy = 1;
if(digitalRead(backButton) == HIGH) // po co Ci ten if skoro dalej masz while sprawdzający ten sam warunek?
{
while((digitalRead(backButton)== HIGH))
{
sygnalizacja();
if(przejazdy == wybrana_ilosc)
{
digitalWrite(przekaznik1,LOW);
}
else if(przejazdy == wybrana_ilosc + 1)
{
przejazdy = 1;
}
else if(przejazdy <= 0)
{
przejazdy = 1;
}
else
{
digitalWrite(przekaznik1,HIGH);
}
wyswietlanie(); // czy to miało omijać wszystkie ify i else?
}
while(digitalRead(backButton)== HIGH); // drugi raz ten sam while?
}
Przeanalizuj przykłady dostępne w Arduino IDE: Przykłady > Digital > Debounce albo skorzystaj z gotowej biblioteki. W przypadku przycisków masz do czynienia z drganiami styków, które musisz wziąć pod uwagę. Dobrym pomysłem jest to, co pisze kolega kaczakat - zamiast wyważać otwarte drzwi zobacz jak to jest rozwiązane u innych.
Przede wszystkim postaraj się zrozumieć co robi kod, który napisałeś.