Podstawy działania funkcji



Podstawy działania funkcji w Arduino

W Arduino, oprócz podstawowych operatorów arytmetycznych (+, -, *, /), często stosuje się operatory inkrementacji (++) i dekrementacji (--), które pozwalają szybko zwiększać lub zmniejszać wartość zmiennej o jeden. Ułatwia to sterowanie licznikami, iterację pętli i zarządzanie danymi.

Poniżej znajdziesz opis tych operatorów, różnice między pre- i post-inkrementacją oraz przykłady ich zastosowania.




Operatory inkrementacji i dekrementacji pozwalają na szybkie zwiększanie (++) lub zmniejszanie (--) wartości zmiennej o jeden. W Arduino, podobnie jak w języku C/C++, mogą być stosowane do różnych typów danych, takich jak:

  • Całkowite (np. int, long, short, byte)
  • Zmiennoprzecinkowe (np. float, double)
  • Znaki (np. char, ponieważ są przechowywane jako liczby w kodzie ASCII)
  • Wskaźniki (przesuwają wskaźnik na kolejny lub poprzedni element w pamięci)

Wyróżnia się dwa rodzaje tych operatorów:

  • Pre-inkrementacja / Pre-dekrementacja: ++x oraz –x (wartość zmiennej zmienia się przed użyciem w wyrażeniu)
  • Post-inkrementacja / Post-dekrementacja: x++ oraz x– (wartość zmiennej zmienia się po jej użyciu w wyrażeniu)

Różnice w ich działaniu są kluczowe w bardziej złożonych operacjach, zwłaszcza w pętlach i wyrażeniach warunkowych.




Przykład 1: Pre-inkrementacja (++x)

W tym przykładzie wartość zmiennej x zostaje zwiększona przed jej użyciem w instrukcji Serial.println(x);, co oznacza, że do funkcji Serial.println() trafia już zwiększona wartość.

Symulacja_1

Wynik działania programu

Najpierw wartość x wynosi 5, następnie operator ++x zwiększa ją o 1, więc Serial.println(++x); drukuje już 6. Po operacji zmienna x pozostaje na poziomie 6, co widać w ostatnim wywołaniu Serial.println(x);.

Początkowa wartość x to 5, po pre-inkrementacji zostaje zwiększona do 6, więc zarówno wynik operacji, jak i wartość końcowa x wynoszą 6.




Symulacja_2
Symulacja_3
Symulacja_4
Tab. 1. Operatory logiczne w Arduino.
Operator Opis
&& Operator „AND” – zwraca wartość true tylko wtedy, gdy oba wyrażenia po jego lewej i prawej stronie są prawdziwe. Przydatny do sprawdzania jednoczesnego spełnienia kilku warunków.
|| Operator „OR” – zwraca wartość true, jeśli przynajmniej jedno z wyrażeń po jego lewej lub prawej stronie jest prawdziwe. Idealny do sytuacji, w których wystarczy spełnienie jednego z wielu warunków.
! Operator „NOT” – neguje wartość logiczną wyrażenia. Jeśli wyrażenie jest true, wynik będzie false, i odwrotnie. Doskonały do odwracania logiki.

Poniżej znajdziesz opis każdego z operatorów, kod demonstracyjny oraz wyjaśnienie ich działania.

Operator && (AND) – jednoczesne spełnienie warunków

Operator && sprawdza, czy oba wyrażenia po jego lewej i prawej stronie są prawdziwe. Jest przydatny, gdy chcemy upewnić się, że dwa różne czynniki muszą zostać spełnione jednocześnie, np. dwa czujniki są aktywne. Miejsce, w którym wstawiamy operatory lecznicze zaprezentowano na Rys.1 (na przykładzie operatora AND).

Rysunek przedstawia zastosowanie operatora logicznego && (AND) w wyrażeniu Wejscie1 && Wejscie2. Zmienna Wejscie1 reprezentuje pierwszą wartość logiczną, a zmienna Wejscie2 reprezentuje drugą wartość logiczną. Operator logiczny && sprawdza, czy obie wartości są jednocześnie prawdziwe. Jeśli tak, wynik wyrażenia również będzie prawdziwy. Czerwone strzałki i żółte etykiety zostały dodane ręcznie w celu wyjaśnienia poszczególnych elementów składni wyrażenia.
Rys.1. Wskazanie miejsca, gdzie znajduje się operator logiczny && (AND).

Na symulacji poniżej (Symulacja_1) przedstawiono zasadę działania operatora logicznego AND.

Wyjaśnienie:

  1. Definicja i inicjalizacja zmiennych:
  • czujnik1 i czujnik2 są zmiennymi typu bool, co oznacza, że mogą przyjmować tylko wartości true lub false.
  • Obie zmienne zostały zainicjalizowane jako true, co odpowiada logicznej prawdzie.

2. Operacja logiczna:

  • Wyrażenie czujnik1 && czujnik2 sprawdza, czy obie zmienne mają wartość true.
  • Operator AND (&&) zwraca true, gdy obie zmienne są prawdziwe. W przeciwnym razie wynik będzie false.
  • W tym przypadku, ponieważ obie zmienne mają wartość true, rezultat operacji przypisany do zmiennej wynik to true.

3. Wyświetlanie wyniku:

  • Funkcja Serial.print() na monitorze portu szeregowego wyświetla tekst: “Wynik logiczny AND: “.
  • Funkcja Serial.println() wyświetla wartość zmiennej wynik, czyli 1.

Tabela prawdy przedstawia wszystkie możliwe kombinacje wartości logicznych dla operatorów, takich jak ANDOR czy NOT, wraz z wynikami tych operacji. Ułatwia zrozumienie, jakie wyniki uzyskujemy dla różnych stanów wejść i pomaga przewidzieć działanie logiki.

Tabela prawdy dla operatora && (AND)


Wejście1 Wejście2 Wyjście
false false false
false true false
true false false
true true true

Wynik operacji AND to true tylko wtedy, gdy oba wejścia mają wartość true. Tabele prawdy są niezwykle pomocne w projektowaniu i analizie logiki, umożliwiając przewidywanie wyników operacji logicznych.




Operator || (OR)– spełnienie jednego z warunków

Operator || sprawdza, czy przynajmniej jedno wyrażenie po jego lewej lub prawej stronie jest prawdziwe. Jest użyteczny w sytuacjach, gdy wystarczy spełnienie jednego z wielu warunków, np. jeden z dwóch czujników jest aktywny – (Symulacja_2).

Symulacja_2

Wyjaśnienie:

  1. Definicja i inicjalizacja zmiennych:
  • czujnik1 i czujnik2 są zmiennymi typu bool.
  • zmienna czujnik1 została zainicjalizowana jako false, co odpowiada wartości logicznej „fałsz”.
  • zmienna czujnik2 została zainicjalizowana jako true, co odpowiada wartości logicznej „prawda”.

2. Operacja logiczna:

  • Wyrażenie czujnik1 || czujnik2 sprawdza, czy przynajmniej jedna z tych zmiennych ma wartość true.
  • Operator OR (||) zwraca true, jeśli dowolne z wejść (w tym przypadku zmienne czujnik1 lub czujnik2) jest prawdziwe.
  • W tym przypadku zmienna czujnik2 jest true, więc wynik operacji przypisany do zmiennej wynik wynosi true.

3. Wyświetlanie wyniku:

  • Funkcja Serial.print() na monitorze portu szeregowego wyświetla tekst: “Wynik logiczny OR: “.
  • Funkcja Serial.println() wyświetla wartość zmiennej wynik, czyli 1, ponieważ true jest reprezentowane jako 1 w Arduino.

Tabela prawdy dla operatora || (OR)


Wejście1 Wejście2 Wyjście
false false false
false true true
true false true
true true true

Wynik operacji OR to true, gdy przynajmniej jedno z wejść ma wartość true. Tabele prawdy są szczególnie przydatne w projektowaniu i analizie logiki w Arduino, pozwalając na przewidywanie wyników działań logicznych.




Operator ! (NOT) – negacja wartości logicznej

Operator ! zmienia wartość logiczną na przeciwną. Jest szczególnie przydatny do odwracania logiki wyrażeń, np. sprawdzania, czy czujnik nie jest aktywny – (Symulacja_3).

Symulacja_3

Wyjaśnienie:

Definicja i inicjalizacja zmiennych:

  • stanCzujnika jest zmienną typu bool.
  • zmienna stanCzujnika została zainicjalizowana jako false, co odpowiada wartości logicznej „fałsz”.

2. Operacja logiczna:

  • Operator NOT (!) odwraca wartość logiczną zmiennej stanCzujnika.
    • Jeśli stanCzujnika wynosi false, wynik operacji !stanCzujnika będzie true.
    • Jeśli stanCzujnika wynosi true, wynik operacji !stanCzujnika będzie false.
  • W tym przypadku, ponieważ stanCzujnika to false, zmienna wynik otrzymuje wartość true.

3. Wyświetlanie wyniku:

  • Funkcja Serial.print() wyświetla tekst: “Stan po negacji: “.
  • Funkcja Serial.println() wyświetla wartość zmiennej wynik, czyli 1, ponieważ true jest reprezentowane jako 1 w Arduino.

Tabela prawdy dla operatora ! (NOT)


Wejście Wyjście
false true
true false

Operator NOT (!) neguje wartość logiczną zmiennej. Jeśli zmienna ma wartość false, wynik operacji to true, i odwrotnie.




Zasada kolejności wykonywania operatorów logicznych w Arduino

W Arduino, podobnie jak w większości języków programowania, kolejność wykonywania operatorów logicznych jest ustalana na podstawie ich priorytetu. Jeśli w jednym wyrażeniu występuje kilka operatorów logicznych, są one wykonywane w ustalonej kolejności.





Kolejność wykonywania operatorów logicznych:



NOT (!) – Najwyższy priorytet

Operator NOT odwraca wartość logiczną i jest wykonywany jako pierwszy.

Przykład:
Wyrażenie: !true || false – (Symulacja_4)

Symulacja_4

Najpierw negacja: !truefalse, a potem sprawdzenie logiki: false || falsefalse (czyli wartość 0).




AND (&&) – Średni priorytet

Operator AND zwraca wartość true, jeśli oba operandy są prawdziwe, i jest oceniany po NOT, ale przed OR.

Przykład:
Wyrażenie: true && false || true – (Symulacja_5)

Symulacja_5

Najpierw: true && falsefalse, a następnie: false || truetrue (czyli wartość 1).




OR (||) – Najniższy priorytet

Operator OR sprawdza, czy przynajmniej jeden operand jest prawdziwy, i jest oceniany jako ostatni.

Przykład:
Wyrażenie: false || true && true – (Symulacja_6)

Symulacja_6

Najpierw: true && truetrue, a następnie: false || truetrue (czyli wartość 1).




Zasady stosowania nawiasów:

Aby zmienić kolejność wykonywania operatorów, można używać nawiasów (). Wyrażenia w nawiasach mają najwyższy priorytet i są wykonywane jako pierwsze.




Przykład bez nawiasów

Wyrażenie: false || true && false – (Symulacja_7)

Symulacja_7

Najpierw: true && falsefalse, a następnie: false || falsefalse (czyli wartość 0).




Przykład z nawiasami

Wyrażenie: (false || true) && false – (Symulacja_8)

Symulacja_8

Najpierw: false || truetrue, a następnie: true && falsefalse (czyli wartość 0).




Kolejny przykład z nawiasami

Wyrażenie: false || (true && false) – (Symulacja_9)

Symulacja_9

Najpierw: true && falsefalse, a następnie: false || falsefalse (czyli wartość 0).





Operatory logiczne &&, || i ! są kluczowe w programowaniu Arduino, pozwalając na efektywne zarządzanie warunkami w kodzie. Dzięki nim możesz tworzyć bardziej złożone zależności logiczne, co jest niezbędne w wielu projektach. Ważne jest również zrozumienie kolejności wykonywania operacji – ! ma najwyższy priorytet, następnie &&, a na końcu ||. Aby zapewnić czytelność i poprawność kodu, warto stosować nawiasy, szczególnie w bardziej skomplikowanych wyrażeniach logicznych. Poznaj ich zastosowanie, aby zwiększyć elastyczność i funkcjonalność swoich programów.




Asystent Arduinowo_AI

Asystent Arduinowo_AI zgłębił powyższy zakres wiedzy i z przyjemnością wszystko Ci wyjaśni.




Zdobądź więcej wiedzy!

Przejdź do kolejnych materiałów naszego kursu: Bity i bajty.