Każdy kurs programowania rozpoczyna się od programu "Hello World!", czyli najprostszego z możliwych, który możemy napisać, uruchomić i cieszyć się efektem. W systemach wbudowanych, bo do takich można zaliczyć ARDUINO najprostszym programem będzie taki, który umożliwi naprzemienne włączenie i wyłączenie diody. Zanim jednak przejdziemy do połączenia elementów i zaprogramowania układu zapoznamy się z podstawową strukturą programu pisanego w ArduinoIDE.
Cały projekt ARDUINO powstał jako podstawa do szybkiego i prostego tworzenia i testowania różnych projektów informatyczno - elektronicznych. Typowy system wbudowany pracuje od włączenia zasilania do jego wyłączenia. Po włączeniu zasilania ustawiane są parametry startowe, a następnie uklad wykonuje program w pętli nieskończonej. ArduinoIDE upraszcza pisanie programu dla systemu wbudowanego tworząc domyślnie dwie wymagane funkcje:
- setup(),
- loop().
Zgodnie z ich nazwami pierwsza umożliwia definicję parametrów początkowych (startowych), w drugiej natomiast znajduje się kod programu wykonywanego cyklicznie.
void setup()
{
//ustawienia początkowe programu
}
void loop()
{
//właściwy kod programu wykonywanego w pętli nieskończonej
}
Powyższy kod to najprostszy program, który można napisać, skompilować i uruchomić za pomocą ArduinoIDE. Układ nie będzie robił nic, ale pozwoli się zaprogramować.
Przejdźmy teraz do zasadniczej części artykułu. Do testu potrzebne będą: ARDUINO, płytka stykowa, dioda LED, rezystor ograniczający prąd oraz przewody połączeniowe. Całość łączymy wg pokazanego schematu. Możliwe jest podłączenie diody i rezystora bez płytki stykowej oraz przewodów połączeniowych, lecz pokazane rozwiązanie jest bardziej uniwersalne i eleganckie. Jak widać wykorzystaliśmy dwa złącza układu. Pierwsze z nich pin13 będzie służył do sterowania diodą, drugie to masa układu. Należy zwrócić uwagę na biegunowość diody LED. Anoda (+) diody ma dłuższą nóżkę i należy ją podłączyć poprzez rezystor do pinu13. Katodę (-) podłączamy do masy układu. Po sprawdzeniu poprawności połączeń możemy przejść do napisania naszego pierwszego programu. Program umożliwi naprzemienne zapalenie i zgaszenie diody LED. Częstotliwość zapalania diody wyniesie ok. 1Hz.
const int ledPin = 13; // numer pinu LED
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, HIGH); //stan wysoki
delay(500); //czekaj 0,5s (500ms)
digitalWrite(ledPin, LOW); //stan niski
delay(500); //czekaj 0,5s (500ms)
}
Program rozpoczynamy od deklaracji numeru wykorzystywanego pinu. Od tego momentu wszędzie, gdzie będziemy się odwoływać do "ledPin" będzie to odwołanie do pinu13 zestawu ARDUINO. Następnie w funkcji setup() określamy, że nasz pin13 będzie wykorzystywany jako wyjście. Funkcja pinMode(numer_pinu,rodzaj) umożliwia zdefiniowanie, czy nasz pin bedzie wykorzystywany jako wejście, czy jako wyjście. Pierwszy parametr funkcji określa numer pinu, drugi może przyjąć predefiniowaną wartość INPUT lub OUTPUT. Podczas określania wykorzystania poszczególnych pinów można posłużyć się bezpośrednio numerami pinów, lecz rozwiązanie podane w przykładzie jest rozwiązaniem zdecydowanie lepszym z punktu widzenia czytelności naszego programu.
Funkcja loop() zawiera właściwy kod programu wykonywanego w nieskończonej pętli. Polecenie digitalWrite(numer_pinu,stan) umożliwia zmianę stanu poszczególnych pinów układu. Cyfrowe wyjścia mogą przyjąć stan niski lub stan wysoki. Określenie odpowedniego stanu umożliwiają argumenty LOW (logiczne zero, elektrycznie zwarte do masy) i HIGH (logiczna jedynka, elektrycznie zazwyczaj ok. 5V dla układów zasilanych tym napięciem). Numer portu w funkcji digitalWrite() może być podany jako konkretna liczba, ale stosuje się zasadę taką jak przy pinMode().
Ostatnim elementem programu jest funkcja delay(czas) umożliwiająca zatrzymanie wykonywania programu na określony czas. Czas podajemy w milisekundach. Jedna sekunda to 1000ms.
Znając poszczególne funkcje programu możemy omówić jego działanie:
Pin13 ARDUINO zostaje ustawiony jako wyjście. Kolejnym krokiem jest ustawienie stanu wysokiego na pinie13 i zawieszenie wykonywania dalszego kodu na 0,5s. Następnie stan pinu13 ustawiany jest jako niski i wykonywanie programu zostaje zawieszone na 0,5s. Zgodnie z filozofią pisania programów w ArduinoIDE funkcja loop() wykonywana jest cyklicznie, co spowoduje wizualne mruganie diody LED.
Po wpisaniu programu należy go skompilować i przesłać do ARDUINO. Jeżeli wszystkie czynności zostały wykonane poprawnie dioda LED powinna zacząć mrugać z częstotliwością ok. 1Hz. W przypadku braku pozytywnego wyniku należy sprawdzić poprawność połączeń oraz kod programu.