1: Hello World!

Na, akkor vágjunk bele a nagy kalandba!

Az Arduino UNO fontosabb csatlakozói kezdőknek

Ha kézbe vesszük az Arduino-nkat, a fenti kép alapján lehet azonosítani a részeit. Ahhoz, hogy bekapcsoljuk, nem kell mást tennünk, mint a hozzá mellékelt USB vezetékkel összekötjük a PC-nkkel:

USB vezeték

Ha összekötöttük ezeket, az Arduino "ON" LED-jének világítania kell.

Ügyeljünk arra, hogy az Arduino board-ot mindig valami szigetelő-anyagra helyezzük, és még véletlenül se fém-felületre! Az Arduino hátoldala nincs rövidzárlattal szemben védve, egy ilyen baleset könnyen a board végét jelentheti.

Ha ott, ahol dolgozol, ennek megvan a veszélye, hogy véltelenül fémre teszed az Arduino-t, talán a legegyszerűbb védekezés az, ha papírral vagy védőfóliával leragasztod a board hátoldalát, vagy felszereled azt valami hordozó-lapra, például így:

Minden programnyelvben az első lépés a "hello world!" program. Ilyenkor sikerül először futtatni az első programot, ami csinál valamit. Ez a mi esetünkben LED villogtatás lesz az Arduno board-on. Csak hiszed, hogy ez olyan egyszerű!

Ehhez ugyanis először fel kell telepítened az Arduino programozó programját, az Arduino IDE-t. Ehhez a művelethez találsz segítséget itt: Az Arduino IDE telepítése lépésről lépésre

Ha sikerült feltelepítened az Arduino-t, akkor gratulálok! Ha elakadtál valahol, ne add fel! Sajnos sok probléma közbejöhet a telepítésben. Keress valakit, aki a segítségedre lehet; fatert, kocka haverodat, vagy akár a bátyádat (öcsédet,..): Mindegy, valaki biztosan tud segíteni a környezetedben!

Most tehát ott tartassz, hogy az IDE a gépeden van. Csatlakoztatsd az Arduino board-ot valamelyik (midegy, melyik) USB porthoz. Ha hallod a jellegzetes bimbam-ot, amit a Windows ad ki ilyenkor, már nyertél. Már csak az IDE-n kell a portot beállítani, ennek a leírását itt találod: Az Arduino csatlakoztatása a PC-hez

Most valahogy így kell kinéznie az IDE-dnek:

Üres IDE

"Hello world" LED villogás

Válasszuk ki a példaprogramok közül a villogtató programot és töltsük be. Az Arduino egyébként ezeket a programokat a "sketch" névvel illeti, ami magyarra vázlatként fordítható. Itt, az OB121-en vegyesen fogom használni ezeket a neveket (vázlat, sketch, program):

"Hello world" LED villogás

Most, hogy ha a vázlat fölötti nyílra kattintunk, az IDE először lefordítja a programot, majd le is tölti azt. Van az úgy, hogy az IDE "elakad", olyankor meg kell ismételni ezt a műveletet. Ha minden rendben zajlott, a 13.pin melletti LED elkezd szép lassan villogni.

"Hello world" LED villogás 2

Ha lent, a hibasorban ez az üzenet (vagy valami ilyesmi) jelenik meg: can't open device, vagy programmer is not responding akkor nem sikerült az Arduino board-ot csatlakoztatnunk:

can't open device

Vegyük elő a legkomolyabb nyugalmunkat, és kezjük el keresni a hibát:

  • rossz USB-t adtunk meg az IDE-nek
  • rossz Arduino típust adtunk meg az IDE-nek
  • a Windows valamiért nem ismerte fel az Arduino-t, mint drivert
  • hibás az Arduino
  • hibás, vagy rosszul csatlakozik az USB-vezeték

Vegyük figyelembe, hogy az Arduino egy nem túl intelligens board, csodákat ne várjunk tőle. Kommunikációja néha esik és kel, maradjunk nyugodtak és probálozzunk tovább, vagy ahogy kollégám szokta mondani "FIGHT!".

Ha viszont ezt (vagy hasonló) üzenetet kapunk a hiba-ablakban:

Akkor nyertünk, és jó eséllyel a LED is elkezdett villogni.

Ha a programba belegörgetünk, megtaláljuk ezt a négy sort:

  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second

Itt, ha megváltoztatjuk a delay() paraméterét, az "1000", azaz csökkentjük, vagy növeljük, a villogás intenzitásának is változnia kell. No, nem azonnal, minden módosítás után újra és újra le kell tölteni (a nyíllal) a programunkat a board-ra. Hello World!

Setup, Loop funkciók

Nézzük meg kicsit közelebbről a programot! Egy kicsit átírom magyarra, és így néz ki:

// ez a funkció egyszer fut le a program indításakor
void setup() {
  // Ezt itt kicsit elbonyolították. Próbáljuk meg inkább így:
  
  pinMode(13, OUTPUT); 

  // Ez azt jelenti, hogy először szólunk a programnak, hogy a 13. digitális pint-t
  // kimenetnek akarjuk használni. Ezen később már nem tudunk változtatni, a loop-ban.
}

// A loop funkció ezek után addig ismétlődik, míg az Arduino áram alatt van:

void loop() {
  digitalWrite(13, HIGH);            // kapcsold be a LED-et (a kimenetre másolj "HIGH" értéket)
  delay(100);                        // várj egy tizedmásodpercet
  digitalWrite(13, LOW);             // kapcsold ki a LED-et (a kimenetre másolj "LOW" értéket)
  delay(1000);                       // várj egy másodpercet
}

// a loop funkció vége - a program visszalép a loop első sorára, és kezdi előről

A fenti programot ha bemásoljuk az IDE-be (kattintsunk a fenti kód-mezőre, majd jelöljük ki a kódot és Ctrl+C billentyűkombinációkkal másoljuk ki a programot, aztán az IDE-re kattintsunk Ctrl+A majd DEL kombinációkkal töröljük a tartalmát, és Ctrl+V-vel másoljuk be a progarmot. Az IDE-ben a Ctrl+U-val tölthetjük le a programot.)

Először is, a // után írhatunk a kódba megjegyzéseket, ezekkel a fordító nem foglalkozik. A programon egy kicsit egyszerűsítettem az átláthatóság érdekében, a 13. pin definiciója így láthatóvá vált.

A C programokat funkciókra kell tagolni. Alapból két funkciónk van, a setup és a loop. Ezeknek a definicióját később még fogjuk bonyolítani, egyelőre maradjunk annyiban, hogy ezeket így kell definiálni:

 
void funkció_neve() {

 a funkció tartalma

}

A saját funkciókat a későbbiekben majd fel kell hívni, de a két alapfunkció (setup, loop) az Arduino-ban automatikusan lefut, valahogy így:

a két alapfunkció (setup, loop) futása

A setup-ban kell megadni az alapdefiniciókat, például hogy a pin-eket hogyan akarjuk használni. Ez csak egyszer fog lefutni bekapcsoláskor. A loop (magyarul hurok) nevéhez hűen amint lefut, ismétlődik, mindaddig, míg ki nem kapcsoljuk a board-ot.

Soros monitor

Sok esetben szükségünk lehet arra, hogy pontosan tudjuk követni, hogy mit csinál a programunk a board-on. Persze a LED villogtatás esetén ezt viszonylag egyszerű követni, de éppen ezért érdemes már itt kipróbálni a követés lehetőségét. A board-unk jelenleg egy USB vezetéken lóg a számítógépünkön, ez az USB magyarul egy univerzális soros busz. Most egyelőre ne menjünk nagyon bele, hogy pontosan mi is ez, maradjunk meg abban, hogy egy egyszerű kommunikációs lehetőség.

Ez azt jelenti, hogy ha a board-unkról küldünk valamit, akkor az a számítógépen megjeleníthető és fordítva is, a számítógépről is küldhetünk jelzéseket a board-ra. Itt nem kell túl komoly dolgokra gondolni, maga a monitor is csak szövegeket tud megjeleníteni. Oké, először is pimpeljük fel a programunkat:

// ez a funkció egyszer fut le a program indításakor
void setup() {

  pinMode(13, OUTPUT);              // a 13. pin-en villog a LED
  Serial.begin(9600);               // a soros port nyitása 9600 bps sebességgel
  Serial.println("Hello World!");   // Hello World egyszer

}

<// A loop funkció ezek után addig ismétlődik, míg az Arduino áram alatt van:

void loop() {
  digitalWrite(13, HIGH);            // kapcsold be a LED-et (a kimenetre másolj "HIGH" értéket)
  Serial.println("LED be");          // üzenet a monitorra
  delay(2000);                       // várj két másodpercet
  digitalWrite(13, LOW);             // kapcsold ki a LED-et (a kimenetre másolj "LOW" értéket)
  Serial.println("LED ki");          // üzenet a monitorra
  delay(1000);                       // várj egy másodpercet
}

// a loop funkció vége - a program visszalép a loop első sorára, és kezdi előről

Mi változott:

A Serial.begin(9600); utasításal jeleztük az Arduino felé, hogy a soros kommunikációt 9600-as sebességgel használni akarjuk. Fontos, hogy a board ezt a 0. és 1. pin-eken keresztül hajtja végre, így ezeket a pineket ilyenkor más célra nem használhatjuk!

A Serial.println("Hello World!"); mivel a setup()-ban található, egyszer kerül végrehajtásra, azaz egyszer elküldi a monitorra az idézőjelek közötti szöveget.

A Serial.println("LED be"); már ciklikusan, minden LED bekapcsolás után kiírja a monitorra a "LED be" szöveget. Ha a "println" helyett csak "print" utasítást használunk, akkor az üzenetek nem mindig új sorba, hanem egymás után kerülnek kijelzésre.

Ismerkedjünk meg a soros monitorral: Arduino IDE soros monitor.

Másoljuk be az IDE-be a fenti programot és töltsük le a board-ra!

A LED most szép lassan fog villogni, mivel 2 és 1 másodpercenként változtatja az állapotát. Ha megnyitjuk a soros monitort (Ctrl + Shift + M) és a sebességét beállítjuk 9600-ra, az alábbi tartalmat kell ott látnunk:

IDE soros monitor

Ha az automatikus görgetés be van kapcsolva, mindig az utlsó állapotot fogja a monitor megjeleníteni, aminek egyeznie kell a LED állapotával. A board-on a villogó LED-en kívül egy másik LED is időnként fel kell, hogy villanjon rövid időre, minden állapotváltozás után, az "RX", ez jelzi a telegrammok elküldését a soros porton.