Skocz do zawartości

Jak naprawić kod - instrukcja switch-case i LED?


jas123

Pomocna odpowiedź

Dzisiaj próbowałem nauczyć się sterować kilkoma funkcjami jednym przyciskiem za pomocą "switch case" i coś mi nie wyszło. Z założenia program po wciśnięciu przycisku miał zapalać  diodę, gasić ją po 2 sekundach .Po kolejnym przyciśnięciu przycisku zapalać następną diodę , gasić po 2 sekundach i tak dalej... Zamiast tego diody same zapalają się i gasną po kolei . Z góry dziękuje za odpowiedzi.

szkic programu:

#define przycisk 6
#define led1 7
#define led2 8
#define led3 9
#define led4 10
byte x = 0; 
void setup (){
   digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);
    digitalWrite(led3,LOW);
    digitalWrite(led4,LOW);
  pinMode(led1,OUTPUT);
   pinMode(led2,OUTPUT);
   pinMode(led3,OUTPUT);
   pinMode(led4,OUTPUT);
  pinMode(przycisk,INPUT_PULLUP);
}
void loop(){
  if(digitalRead(przycisk == LOW)){
  switch(x){
    case 0:
    digitalWrite(led1,HIGH);  
  delay(2000); 
  digitalWrite(led1,LOW);
    x=1;
    break;
     case 1:
    digitalWrite(led2,HIGH);  
  delay(2000);
  digitalWrite(led2,LOW);
    x=2;
    break;
     case 2:
    digitalWrite(led3,HIGH); 
  delay(2000); 
  digitalWrite(led3,LOW);
    x=3;
    break;
     case 3:
    digitalWrite(led4,HIGH);  
  delay(2000);
  digitalWrite(led4,LOW);
    x=0;
    break;
  }
  }else{
    digitalWrite(led1,LOW);
    digitalWrite(led2,LOW);
    digitalWrite(led3,LOW);
    digitalWrite(led4,LOW);
  }
}

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

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

Trochę mi się myli te ustawianie nawiasów , szkoda że program nie uznaje takich pomyłek jako błąd.Teraz program działa poprawnie. Jeszcze raz dziękuje😀 nie wpadłbym na to .

Link do komentarza
Share on other sites

7 godzin temu, jas123 napisał:

szkoda że program nie uznaje takich pomyłek jako błąd.

A dlaczego miałby uznawać za błąd całkowicie prawidłową konstrukcję?

Jeśli chcesz pomnożyć dwie liczby i zamiast * napiszesz +, to też kompilator ma to za Ciebie wykryć?

Inaczej: czy w słowie "morze" jest błąd ortograficzny?

 

Link do komentarza
Share on other sites

7 godzin temu, jas123 napisał:

szkoda że program nie uznaje takich pomyłek jako błąd

Z punktu widzenia kompilatora to nie są błędy. Podczas kompilacji sprawdzane jest tylko to czy program jest poprawnie zapisany, komputer nie wie jak ma działać dany układ, więc nie jest w stanie wykryć błędów wynikających z takich "dwuznaczności". To, że jakiś kod jest zupełnie bezsensowny z punktu widzenia (nie)działającego urządzenia to nie znaczy, że jest błędnie napisany 😉

Aby wykrywać problemy tego typu należałoby pisać testy, ale to zupełnie inny, dużo bardziej rozbudowany temat i ma mało wspólnego z Arduino. Z ciekawości możesz zerknąć na ten artykuł: Czym jest Test Driven Development? Wprowadzenie, przykłady

  • Lubię! 1
Link do komentarza
Share on other sites

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ę »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.