Powodem, dla którego ta książka przyszła mi do głowy, jest to, że wiele rzeczy w programowaniu C/C++ w ogóle, a programowanie dla Arduino w szczególności, to na najbardziej podstawowym poziomie liczby całkowite w takiej czy innej formie.
Wielka prawda, czy mały fałsz?
Rozważmy na przykład poziomy pinów LOW i HIGH. Jeśli zdefiniowaliśmy pin jako wyjście cyfrowe, możemy przypisać mu wartość LOW lub HIGH w następujący sposób:
digitalWrite(PinA, LOW);
digitalWrite(PinB, HIGH);
W świecie rzeczywistym, zakładając Arduino Uno, pojawią się one na pinie jako wartości odpowiednio 0 V i 5 V. Ale czy wiesz, że możemy osiągnąć dokładnie ten sam efekt używając 0 i 1? Na przykład:
digitalWrite(PinA, 0);
digitalWrite(PinB, 1);
Jak to możliwe? Cóż, gdyby powiedzieć prawdę, za kulisami („Nie zwracaj uwagi na tego człowieka za kurtyną”), twórcy Arduino, zaimplementowali coś w rodzaju instrukcji #define, aby zrównać słowa kluczowe LOW z 0 i HIGH z 1.
Znajomość tej ciekawostki otwiera drzwi do wielu rzeczy, gdy się nad tym zastanowimy. Na przykład, rozważmy następujący fragment kodu:
int tmpValue;
tmpValue = digitalRead(PinA);
if (tmpValue == HIGH)
{
// Zrób kilka rzeczy
}
Teraz wiemy, że możemy zastąpić HIGH liczbą 1 lub wynikiem wyrażenia całkowitoliczbowego, lub wartością całkowitą zwracaną przez funkcję, lub... lista jest długa.
Wszyscy mamy swoje prawdy
Jak słynnie mówi (lub śpiewa) Poncjusz Piłat w operze rockowej Jesus Christ Superstar z 1970 roku, z muzyką Andrew Lloyda Webbera i tekstami Tima Rice’a: „Ale czym jest prawda? Czy prawda jest niezmiennym prawem?
Oboje mamy prawdy – czy moja jest taka sama jak twoja?”. Wiem, co ma na myśli i za chwilę ty też będziesz wiedział.
W latach pięćdziesiątych XIX wieku angielski matematyk, filozof i logik George Boole (1815–1864), będący w dużej mierze samoukiem, opracował dział matematyki, który obecnie nazywamy algebrą Boole’a. Zamiarem Boole’a było wykorzystanie technik matematycznych do reprezentowania i testowania argumentów logicznych i filozoficznych. Niestety, znaczenie jego pracy nie zostało w pełni docenione aż do późnych lat trzydziestych XX wieku, kiedy to absolwent MIT, Claude Shannon, zrewolucjonizował elektronikę, przedstawiając pracę magisterską pokazującą, w jaki sposób algebra Boole’a oferuje idealny sposób reprezentowania logicznego działania systemów cyfrowych.
W przypadku Arduino mamy typ danych o nazwie bool (lub boolean). Zmiennym zadeklarowanym przy użyciu tego typu można przypisać wartości false lub true. Załóżmy, że zadeklarujemy zmienną typu boolean o nazwie tmpBool i przypiszemy jej wartość true lub false. Później możemy wykonać kilka testów, takich jak:
if (tmpBool == true)
{
// Zrób kilka rzeczy
}
if (tmpBool == false)
{
// Zrób kilka rzeczy
}