1.6 Kurs „Arduino Łopatologicznie” Funkcje i biblioteki. Piszemy własną funkcję, przyglądamy się gotowym bibliotekom.

Na tej lekcji dowiemy się więcej o funkcjach oraz bibliotekach. Funkcja jest to zbiór instrukcji, które wykonają się po jej wywołaniu. Można to porównać do gotowych małych programów. Funkcje mogą zwracać jakieś wartości lub tylko wykonywać instrukcje jakie zostały umieszczone wewnątrz. Mogą również wymagać od nas wprowadzenia danych jeśli są potrzebne do wykonania kodu.

Przykłady funkcji Arduino:

Możemy mieć do czynienia z różnymi konstrukcjami funkcji na przykład taką, która potrzebuje od nas dane (fachowo zwane argumentami funkcji) dajmy na to – prosta funkcja wyliczająca obwód boków prostokąta, będzie od nas wymagać podania jako argumentów długości boku a oraz b i zwróci nam gotowy wynik.

Kolejnym typem może być funkcja migająca diodą – taka która nie zwróci wyniku, a jedynie wykona zawarty w środku kod. Czy taka funkcja będzie od nas wymagała jakiś argumentów? To zależy – jak ją napiszemy.

Przejdźmy do przykładów aby lepiej zrozumieć jak to wygląda w praktyce:

// 1. funkcja nie zwracająca wartości, nie przyjmująca argumentów

void miganieLED () {
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500)
digitalWrite(13, HIGH);
delay(500);
digitalWrite(13, LOW);
delay(500);
}

// 2. funkcja przyjmująca argumenty, zwracająca wynik jako int

int obwodProstokata (int a, int b) { //tworzymy argumenty typu int
int obwod = (a*2) + (b*2);
return obwod;
}

Teraz omówmy składnie obowiązującą dla funkcji:

  • jeśli funkcja nie zwraca nic, używamy typu void – czyli brak. Kolejno po typie podajemy nazwę funkcji w naszym przypadku miganieLED, pamiętajmy, że nazwy powinny przynajmniej trochę nawiązywać do tego co funkcja robi. Kolejno jest nawias, jest to znak rozpoznawczy funkcji. Jeśli funkcja nie oczekuje podania argumentów jest on pusty. Kolejno umieszczamy nawiasy klamrowe i wewnątrz umieszczamy kod funkcji.
  • jeśli funkcja zwraca wynik to przed jej nazwą widzimy typ danych jaki zwraca, w przypadku funkcji obwodProstokata otrzymamy wynik typu int. Wewnątrz funkcji wykorzystane zostało polecenie return – czyli „zwróć” i wskazuje na naszą zmienną obwod. Oznacza to, że funkcja aby zadziałać potrzebuje argumenty a oraz b po jej wywołaniu z argumentami a=2 i b=3 otrzymamy wynik liczbowy typu int 10.
  • Funkcje umieszczamy na samym końcu za zamykającym nawiasem klamrowym sekcji loop naszego szkicu. Wywoływać możemy je w dowolnym miejscu.

Tak wygląda tworzenie funkcji, jeśli chcemy wywołać funkcję w naszym programie, zwyczajnie piszemy:

miganieLED() ; i spowoduje to uruchomienie funkcji, jeśli chcemy otrzymać wynik z wyliczeń pola prostokąta dla boków o długości 4 i 7 to napiszemy:

obwodProstokata( 4 , 7 ) ; i to tyle, proste prawda?

Zmodyfikujmy teraz funkcję migającą diodą aby wymagała od nas argument, przez który przekażemy na jak długo ma się zapalać dioda.

void miganieLED (int czas) {
digitalWrite(13, HIGH);
delay(czas);
digitalWrite(13, LOW);
igitalWrite(13, HIGH);
delay(czas);
digitalWrite(13, LOW);
}

Program, który zamiga diodą na 4, 3 i 2 sekundy będzie wyglądał następująco:

void setup() {

pinMode (13, OUTPUT); //ustawiamy pin 13 z diodą jako wyjście 

}

void loop() {

//wywołujemy funkcje z argumentem, który oznacza czas świecenia
miganieLED (4000);
miganieLED (3000);
miganieLED (2000);

}


// sekcja poza programem loop dla przechowywania funkcji:

int miganieLED (int czas) {
digitalWrite(13, HIGH);
delay(czas);
digitalWrite(13, LOW);
delay(500);
digitalWrite(13, HIGH);
delay(czas);
digitalWrite(13, LOW);
delay(500);
}

Podsumowując – funkcje to takie małe programy, które możemy w dowolnym momencie wykorzystać – w programowaniu to podstawa ponieważ oszczędzają nam czas, pozwalają automatyzować powtarzające się czynności i nadają przejrzystości w naszym kodzie.

Arduino IDE posiada już wbudowane funkcje, które możemy wykorzystać i cały czas to robimy, przykładowo pinMode( numer pinu, we/wy) to nic innego jak gotowa funkcja jako argumenty przyjmująca numer pinu oraz to czy ustawiamy dany pin jako wejście czy wyjście.

Wbudowane funkcje wraz z opisami można znaleźć na stronie ArduinoIDE pod tym linkiem: https://www.arduino.cc/reference/pl/

W ramach ćwiczeń wybierz sobie jakąś funkcję i wypisz jej wynik w Serial Monitorze, jeśli sam nie możesz się zdecydować to wybierz sq() z działu matematyka, zwraca on kwadrat przekazanej liczby.

Jak dodać Biblioteki do Arduino?

Czym są biblioteki? Biblioteki to nic innego jak gotowe paczki zawierające w sobie funkcje, które możemy wykorzystać pisząc program. Firmy często wydają biblioteki aby łatwiej obsługiwało się ich czujniki lub inne urządzenia. Istnieje też spora grupa użytkowników piszących biblioteki i dzielących się z innymi by ułatwiać sobie nawzajem życie. Dzięki temu programowanie staje się przyjemniejsze i mniej skomplikowane.

Przykładowo aby obsłużyć popularny czujnik temperatury używając ogólnodostępnej biblioteki, możemy odczytać temperaturę wywołując funkcję: sensors.readTemperature(sensorAddress); nie interesuje nas jak wygląda faktyczna obsługa odczytu – ktoś już zrobił to za nas. W rzeczywistości są to skomplikowane operacje na bitach przesyłanych w określonych ramkach czasowych rzędu 40 mikrosekund.

Aby dodać zewnętrzną bibliotekę do programu w naszym Arduino istnieją 2 drogi, pierwsza to skorzystanie z wyszukiwarki bibliotek wbudowanej w ArduinoIDE, aby ją znaleźć należy z górnego menu wybrać:Narzędzia -> Zarządzaj Bibliotekami…

Po wybraniu wyskoczy nam okno wyszukiwarki:

okno instalacji bibliotek w ArduinoIDE

W ramach ćwiczeń wyszukajmy sobie bibliotekę Chrono napisaną przez Thomasa O Fredricksa i zainstalujmy jej najnowszą wersję klikając instaluj. Ja już ją zainstalowałem więc pojawił się jedynie przycisk Aktualizacja.

Klikając w link More info – przejdziemy na stronę z plikami biblioteki jest tam również link do dokumentacji. W dokumentacji znajdziesz spis funkcji dostępnych w bibliotece ich opisy oraz przykłady wykorzystania. Link do dokumentacji: http://sofapirate.github.io/Chrono/

Teraz otwieramy nowy szkic programu, kolejno wybieramy z górnego menu: Szkic -> Dołącz Bibliotekę -> Chrono

W tym menu zobaczymy wszystkie zainstalowane biblioteki i łatwo dodamy je do szkicu. Można zrobić to również wpisując własnoręcznie u samej góry szkicu #include <nazwa_biblioteki.h>

Druga metoda jeśli biblioteki nie da się znaleźć w wyszukiwarce bo nie ma jej w repozytorium polega na ręcznym dodaniu pobranej z internetu biblioteki. Wtedy należy z menu wybrać Szkic -> Dołącz bibliotekę -> Dodaj bibliotekę .ZIP

Skoro już zainstalowaliśmy bibliotekę Chrono wykorzystajmy jedną z jej funkcji jaką jest proste odliczanie czasu.

Zaraz pod #include <Chrono.h> powinniśmy stworzyć referencję do biblioteki aby Arduino wiedziało, skąd ta funkcja pochodzi. Nazwiemy ją mojZegarek. Teraz aby skorzystać z funkcji z naszj biblioteki Chrono należy poprzedzić ją przedrostkiem mojZergarek, tak samoj ako korzystamy z biblioteki Serial obsługującej Serial monitor piszem Serial.begin.

Kod odliczający czas od uruchomienia programu wykorzystujący bibliotekę Chrono poniżej, wykorzystamy do tego funkcję elapsed(); według specyfikacji zwracającej czas w postaci unsigned long w milisekundach.

screen ze specyfikacji biblioteki
#include <Chrono.h>

Chrono mojZegarek; //tworzymy referencje do biblioteki
void setup() {

Serial.begin(9600);

}

void loop() {

delay(299);  // czekamy 299 milisekund

int czas = mojZegarek.elapsed();
Serial.println(czas);

}

Podsumowanie

Funkcje i biblioteki to podstawa w programowaniu – ułatwiają nam życie pomagają w łatwiejszy sposób obsługiwać urządzenia podpięte pod nasze Arduino, organizować pisany kod i automatyzować powtarzające się czynności. Na prace domową napisz swoją funkcję i pochwal się nią w komentarzu. Programowanie wymaga praktyki i tylko regularne pisanie kodu samemu pozwoli doskonalić umiejętności.

  1. Jeśli jeszcze nie masz swojego arduino zawsze możesz je zakupić w naszym sklepie, w super cenie z wygodym złączem microUSB klikając tutaj-> Arduino Uno microUSB
  2. Pamiętaj, żeby polubić naszego Facebooka dzięki niemu dowiesz się o kolejnej lekcji lub nowym ciekawym wpisie na blogu

rozwiązanie pracy domowej z lekcji 1.5 -> KLIK

<—- Lekcja 5     Lekcja 7 —->

Odpowiedz

Twój adres e-mail nie zostanie opublikowany