Ten dział poświęcony jest zmiennym oraz wartościom w programowaniu Arduino. Zrozumienie tych podstawowych elementów jest kluczowe do efektywnego tworzenia projektów z wykorzystaniem Arduino.
Zmienne to podstawowe elementy w programowaniu, które służą do przechowywania danych, mogących zmieniać swoje wartości w trakcie działania programu. W Arduino zmienne mogą przechowywać różne typy danych, takie jak liczby, znaki czy ciągi znaków. Już w szkole podstawowej, na lekcjach matematyki, często jako przykład zmiennej przyjmowano symbol x, co pomagało zrozumieć jej zmienny charakter.
Wartości, w przeciwieństwie do zmiennych, to konkretne dane (zazwyczaj liczby), które zmienne mogą przechowywać, przekazywać lub zwracać. W Arduino wartości mogą być różnego rodzaju, takie jak liczby całkowite, zmiennoprzecinkowe, logiczne (prawda/fałsz), znaki czy ciągi znaków. To właśnie wartości są wykorzystywane w programie do obliczeń, sterowania działaniem czy komunikacji z innymi urządzeniami, a zmienne służą do ich przechowywania.
Przypisanie wartości do zmiennej to podstawowa operacja w programowaniu, polegająca na zapisaniu konkretnej wartości w zmiennej za pomocą operatora przypisania (=
) “równa się” – operatory będą jeszcze szczegółowo omamiane w dalszej części tego kursu.
W tej operacji zmienna, będąca “pojemnikiem” na dane, znajduje się po lewej stronie znaku =
, a wartość, którą chcemy do niej przypisać, po prawej.
Na przykład w instrukcji x = 5, zmiennej x
zostaje przypisana wartość 5 (Rys.1). Przypisanie pozwala na przechowywanie danych w pamięci programu i późniejsze ich wykorzystanie, np. do obliczeń, sterowania logiką programu.
Wartość przypisana zmiennej może być w dowolnym momencie zmieniona, co czyni zmienne dynamicznymi i kluczowymi w rozwiązywaniu problemów programistycznych.
Typy zmiennych
W programowaniu Arduino programista musi najpierw przeanalizować, jakie dane będą przechowywane w zmiennej, aby mógł odpowiednio dobrać jej typ. Na tym etapie należy zastanowić się, czy zmienna będzie przechowywać liczby, tekst, czy inne dane, a także jaki zakres wartości będzie potrzebny do poprawnego działania programu. Taki wybór jest niezbędny, ponieważ w Arduino każdy typ zmiennej ma swoje ograniczenia i zastosowania, które wpływają na działanie i efektywność programu.
Oto podstawowe typy zmiennych w Arduino (Tab. 1):
Typ | Opis |
---|---|
boolean | Przechowuje wartości logiczne: prawda (true) lub fałsz (false). Typ danych boolean reprezentuje wartości logiczne, które zasadniczo można interpretować jako 1 i 0. Wartość true jest traktowana jako 1, a false jako 0. W rzeczywistości są one przechowywane w pamięci jako liczby binarne 1 i 0. |
int | Typ całkowity (integer) używany do przechowywania liczb całkowitych (bez części dziesiętnej). Na przykład, liczby 3, -15, 1024 są typu int. Zakres: od -32 768 do 32 767. |
unsigned int | Wariant typu int, który przechowuje tylko wartości dodatnie, ale w szerszym zakresie. Zakres: od 0 do 65 535. |
long | Typ całkowity używany do przechowywania większych liczb całkowitych. Zakres: od -2 147 483 648 do 2 147 483 647. |
unsigned long | Wariant typu long, który przechowuje tylko wartości dodatnie. Zakres: od 0 do 4 294 967 295. |
byte | Używany do przechowywania małych liczb całkowitych. Jest to typ danych zajmujący mniej miejsca niż int. Zakres: od 0 do 255. |
float | Używany do przechowywania liczb zmiennoprzecinkowych (z częścią dziesiętną). Przykłady: 3.14, -0.001, 2.71828. Zakres: około ±3.4028235E+38 (z dokładnością do 6-7 cyfr dziesiętnych). |
double | Podobny do float, ale oferuje większą precyzję. Na większości płytek Arduino double jest równoważne float i ma ten sam zakres. Na niektórych nowszych płytkach może oferować precyzję do 15 cyfr dziesiętnych. |
char | Przechowuje pojedyncze znaki lub małe liczby. Każdy znak jest reprezentowany przez kod ASCII. Na przykład, ‘A’, ‘b’, ‘3’, ‘!’. Zakres: od -128 do 127. |
String | Umożliwia przechowywanie ciągów znaków, czyli tekstów. Na przykład, “Hello, world!”. |
Poniżej przedstawiono Doradcę Typów Zmiennych Liczbowych. Aby poniższy skrypt mógł dla Ciebie wybrać typ zmiennej, musisz przeanalizować minimalny i maksymalny zakres wartości, które zmienna będzie przechowywać, a następnie wpisać je w odpowiednie pola. Na podstawie tych danych Doradca automatycznie zasugeruje typ zmiennej, dopasowany do Twoich potrzeb.
Doradca Typów Zmiennych Liczbowych
Należy pamiętać, że kompilator zwykle nie wskaże błędu wynikającego z niewłaściwego wyboru typu zmiennej. Odpowiedzialność za poprawny wybór spoczywa na programiście. Niewłaściwy wybór może prowadzić do poważnych problemów, takich jak przepełnienie zakresu, utrata precyzji, niedostateczna ilość pamięci na przechowywanie danych lub nieprzewidziane zachowania programu. Dlatego, niezależnie od rodzaju danych – liczbowych czy tekstowych – zawsze warto przemyśleć specyfikę danych, jakie zmienna będzie przechowywać, oraz ograniczenia związane z danym typem zmiennej.
W tym rozdziale zapoznaliśmy się z pojęciem zmiennych, ze szczególnym uwzględnieniem ich typów. W kolejnym rozdziale pokażemy, jak praktycznie je wykorzystać.
Uwaga praktyczna
Często w kodzie Arduino (C++) możemy spotkać różne zapisy typów danych, takie jak byte, unsigned char czy uint8_t. Dla początkujących programistów może to być mylące i sprawiać wrażenie, że każdy z tych zapisów oznacza coś zupełnie innego. W rzeczywistości są to równoważne typy danych, które różnią się tylko nazwą.
Aby rozwiać wszelkie wątpliwości, przygotowaliśmy tabelę (Tab. 2), która wyjaśnia, jakie typy danych w Arduino są równoważne, jakie mają zakresy oraz ile zajmują miejsca w pamięci. Dzięki temu łatwiej będzie zrozumieć, że różne zapisy nie są niczym magicznym, a jedynie alternatywnym sposobem określenia tego samego typu danych.
Typ | Równoważne Typy | Zakres | Rozmiar |
---|---|---|---|
boolean | brak | true (1) lub false (0) | 1 bajt |
byte | unsigned char, uint8_t | 0 do 255 | 1 bajt |
char | brak | -128 do 127 | 1 bajt |
unsigned char | byte, uint8_t | 0 do 255 | 1 bajt |
int | short, int16_t | -32 768 do 32 767 | 2 bajty |
unsigned int | word, uint16_t | 0 do 65 535 | 2 bajty |
long | int32_t | -2 147 483 648 do 2 147 483 647 | 4 bajty |
unsigned long | uint32_t | 0 do 4 294 967 295 | 4 bajty |
float | brak | ~ -3.4E38 do 3.4E38 | 4 bajty |
double | brak | ~ -3.4E38 do 3.4E38 (AVR) | 4 bajty (AVR) |
Na platformach Arduino opartych na architekturze AVR (np. Arduino Uno) zarówno float, jak i double mają ten sam rozmiar (4 bajty) i taką samą precyzję (około 6-7 cyfr znaczących). Wynika to z ograniczeń sprzętowych – procesory AVR nie obsługują natywnie większej precyzji dla double. Aby zachować prostotę i efektywność działania, oba typy są traktowane identycznie.
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: Deklarowanie i inicjalizowanie zmiennych.