Skocz do zawartości

Arduino dla początkujących: instrukcje sterujące w C/C++. Część 1: if, bloki


ethanak

Pomocna odpowiedź

@ethanak Przydatna sprawa, będę linkował w często pojawiających się pytaniach. Szkoda tylko że nie ma else if - jest to dość kłopotliwe dla początkujących, którzy uznają, że warunki czasem nie działają (w tym dla mnie z 10 lat temu jak zaczynałem).

Dnia 10.04.2021 o 18:09, ethanak napisał:

Spróbujmy więc napisać program:


#define BUTTON_PIN 2
#define ENABLE_PIN 3
#define LED_PIN 13

void setup()
{
    pinMode(BUTTON_PIN, INPUT_PULLUP); // ustawiamy pin jako wejście z podciągnięciem do Vcc
    pinMode(ENABLE_PIN, INPUT_PULLUP); // drugi pin tak samo
    pinMode(LED_PIN, OUTPUT); //ustawiamy pin jako wyjście
    digitalWrite(LED_PIN, LOW); // i ustawiamy stan niski na pinie
}

void loop()
{
    if (digitalRead(ENABLE_PIN) == LOW)  // jeśli przycisk ENABLE jest wciśnięty
        if (digitalRead(BUTTON_PIN) == LOW) // teraz możemy zapalić ledę
            digitalWrite(LED_PIN, HIGH);
    else // przycisk ENABLE jest puszczony
        digitalWrite(LED_PIN, LOW);
}

Uruchamiamy nasz program, sprawdzamy i... oj, coś tu jest nie tak!

Pierwsze to gdy ktoś robi takiego stworka z ilomaś ifami i jednym elsem i dziwi się, że else nie tyczy się wszystkich innych ifów tylko tego ostatniego.

Druga pułapka to warunek bez klamerek, który z jakiegoś powodu nic nie robi - sam spędziłem kiedyś nad czymś takim kilkanaście minut debugowania, a to tylko dlatego że ktoś wstawił na końcu ifa średnik.

Dnia 10.04.2021 o 18:09, ethanak napisał:

Ano jest. Kompilator po prostu przypisał "else" do wewnętrznego ifa,

Tu ciekawostka, autoformat Arduino IDE (Ctrl-T) tak też ułoży kod:

void loop()
{
  if (digitalRead(ENABLE_PIN) == LOW)  // jeśli przycisk ENABLE jest wciśnięty
    if (digitalRead(BUTTON_PIN) == LOW) // teraz możemy zapalić ledę
      digitalWrite(LED_PIN, HIGH);
    else // przycisk ENABLE jest puszczony
      digitalWrite(LED_PIN, LOW);
}

 

  • Lubię! 1
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

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.