Podstawowe funkcje w Arduino
Programowanie w Arduino odbywa się za pomocą pochodnej języka C/C++ w oparciu o bibliotekę Arduino. Plik z kodem, zwany sketchem, zazwyczaj tworzony jest w środowisku Arduino IDE i za jego pomocą wgrywany do mikrokontrolera.
Metody setup i loop
Sketch Arduino wymaga dwóch podstawowych metod: setup i loop.
setup
Metoda setup() wykonywana jest jeden raz, podczas włączenia płytki lub po jej resecie. Służy do jednorazowej inicjalizacji wartości początkowych.
loop
Pierwsze wywołanie metody loop() następuje tuż po zakończeniu metody setup. Loop powtarza się wiele razy w ciągu każdej sekundy. Częstotliwość wywołań zależna jest od mocy mikroprocesora i złożoności programu.
pinMode
Płytka Arduino posiada szereg pinów, każdy z nich może być pinem wyjściowym – OUTPUT lub wejściowym – INPUT.
Domyślnie piny ustawione są jako piny wejściowe – INPUT.
Za pomocą metody pinMode() można określić piny jako wyjściowe – OUTPUT lub aktywować wewnętrzny pullup rezystor dla trybu wejściowego – INPUT_PULLUP.
pinMode(13, OUTPUT); //Ustawienie pinu nr 13 na wyjściowy
digitalWrite
Metoda digitalWrite() ustawia stan pinu wyjściowego:
1 / HIGH / true
lub
0 / LOW / false
digitalWrite(13, 1); //Stan wysoki 5V
digitalWrite(13, 0); //Stan niski 0V
Ustawienie kilku pinów wyjściowych na stan wysoki 5V
for (int i = 2; i <= 6; i++) {
pinMode(i, OUTPUT);
digitalWrite(i, 1);
}
Ustawienie pinów określonych w tablicy
byte pins[] = { 3, 5, 6 };
for (byte i = 0; i < sizeof(pins) / sizeof(pins[0]); i++) {
pinMode(pins[i], OUTPUT);
digitalWrite(pins[i], 1);
}
digitalRead
Metoda digitalRead odczytuje wartości cyfrowe napięć wejściowych.
Interpretacja zakresów napięć na pinach cyfrowych w trybie INPUT:
0V – 1V stan niski LOW
3V – 5V stan wysoki HIGH.
Przedział 1V – 3V to stan zabroniony, w którym zmiana stanu logicznego nie następuje.
int sensorVal = digitalRead(2); //Wczytuje stan logiczny z pinu nr 2
W zależności od potrzeb, odczytywanie danych z urządzeń analogowych(przycisk, potencjometr, itp.) zazwyczaj przeprowadza się z pomocą wbudowanego pullup rezystora lub zewnętrznego rezystora pullup lub pulldown, likwidując zjawisko szumów i fałszywych odczytów.
Zobacz: Przycisk chwilowy z Arduino
Pobieranie wartości przycisku chwilowego
int pin = 2;
void setup() {
pinMode(pin, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
int sensorVal = digitalRead(pin);
digitalWrite(LED_BUILTIN, !sensorVal);
}
analogWrite
Piny cyfrowe 3, 5, 6, 9, 10, 11 mogą być wykorzystane do generowania przebiegu PWM (przebieg prostokątny o zmiennym współczynniku wypełnienia) z częstotliwością ok. 490Hz dla pinów 3, 9, 10, 11 i ok. 976Hz dla pinów 5 i 6.
Metoda analogWrite(), za pomocą 8-bitowego przetwornika generuje przebieg sygnału PWM w zakresie od 0 do 255.
analogWrite(11, 127); //generuje przebieg PWM 127/255 na pinie 11
analogRead
Piny analogowe A0 – A5 przyjmują dane analogowe za pomocą 10-bitowego przetwornika analogowo-cyfrowego (ADC). Pozwala to na zamianę napięć wejściowych sygnału analogowego z przedziału 0V-5V na postać cyfrową wyrażaną liczbowo w zakresie od 0 do 1023.
int sensorVal = analogRead(A0);
Wyświetlanie wartości potencjometru w procentach
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
int percentage = map(sensorValue, 0,1023, 0, 100); //%
Serial.println(percentage);
delay(10);
}
Piny analogowe mogą pracować również jako cyfrowe piny wyjściowe/wejściowe przypisując im numery 14 – 19.
delay / delayMicroseconds
Metoda delay() wstrzymuje działanie programu na określony czas, podany w milisekundach, delayMicroseconds w mikrosekundach.
Ponieważ delay wstrzymuje większość procesów mikrokontrolera, jej stosowanie jest bardzo ograniczone. W wielu przypadkach, w miejsce delay, stosuje się rozwiązania oparte na metodzie millis().
delay(1000); //Wstrzymanie programu na 1000ms (1s)
delayMicroseconds(500); //Wstrzymanie programu na 500us (0,5ms)
Zobacz: Arduino