Skocz do zawartości

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


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 to post
Share on other sites

@ethanak czemu nie, taka treść będzie potrzebna. Takich wpisów w kawałkach jest sporo, to ciężko je znaleźć. A zebrane w jednym miejscu i otagowane już łatwiej ponownie wykorzystać.

Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.