2. Arduino tarkvara tutvustus, ühendamine ja LEDi vilgutamine
<- eelmine peatükk
järgmine peatükk ->
2.0. Seos eelmise peatükiga
Eelmise peatüki läbimise järel pidi meil olema alla laetud viimane versioon Arduino IDE programmeerimiskeskkonnast. (IDE = Integrated Programming Environment) Järgmisena asume seda installeerima.
2.1. Eesmärk ja selgitused
Selles peatükis kirjeldame eesti keeles Arduino IDE installeerimist. Peale installeerimist on eesmärgiks käivitada esimene programm Seda programmi muutes saame katsetada erinevaid LED vilgutamise mustreid.
Selle peatüki järel õpilane teab, kuidas töötada Arduino IDE-s.
2.2. Töövahendid:
2.3. Alustame tööd Arduino IDE-ga
Vajaduse korral õpetaja aitab. Esitage küsimusi.
2.3.1. Näidis-programmi kasutamine
Alustamiseks esimese ülesandega tuleb selgitada Arduinole, et tahate vilgutada Arduinole sisse ehitatud LED-i.
Kui eelnenud valik sai tehtud, siis klõpsates programmeerimiskeskkonnas (IDE) Upload peal ja oodates hetke, peaks ilmnema, et Arduino UNO keskel RX ning TX markeeringuga nelinurksed LED-id arvutiga ühendatud Arduino peal annavad aktiveerimisest märku valgusega. Vt allolev pilt, millel näed kahte kõrvuti säravat kollakas-oranži LED-i säramas.
Alloleval pildil roheline LED tähistab seda, et Arduino on sisse lülitatud, kollakat valgust emiteeriv L-tähega ning 13 viigu juures asuv LED aga vilgub vastavalt meie näidisprogrammis toodud infole. TX ning RX LED-id peale programmi käivitumist enam ei sära—TX ja RX LED-id korraga helendades annavad märku programmi Arduinole laadimise edukusest.
Muutke programmis delay järel sulgudes olevat väärtust. Mida märkate?
Eeldusel, et läbisime etapi 4 edukalt, peaks leidma ekraanilt kirjad:
void setup() { } void loop () { }
Tegemist on igas Arduino programmis sisalduma pidava kahe programmiosaga.
Alustuseks tasub meelde jätta, et void setup () peab sisaldama asju, mida teeme ühekordselt, void loop () aga asju, mida programm peab tegema mitmeid kordi.
NB!
Jätame meelde, et Arduino programm peab sisaldama kahte osa, millest:
- esimene osa (void setup())—sisaldab ühekordselt tehtavat ning
- teine osa (void loop())—sisaldab korduma jäävaid tegevusi.
Vaatame korra ka Arduinot. Näeme, et ühel pool on kolmteist viiku, millega saame juhtmete abil ühendada prototüüpimisplaadil asuvaid LEDisid.
Jätame need esialgu meelde kui digitaal-viigud. Vt ka kirjasid Arduino plaadil.
2.4. Programmi kirjutamine
Kuna me aga sellel tunnil veel prototüüpimisplaati ei kasuta, siis vaatame, kuidas saame ilma midagi Arduino UNO külge ühendamata vilgutada Arduino UNO- viigul number 13 asuvat sisseehitatud LED-i: viik 13 sobib Arduino UNO-l just sisseehitatud LED tõttu selliseks esimeseks katsetuseks.
Näiteks kirjutame praktika huvides ümber meie ees lahtiolevasse Arduino programmeerimiskeskkonda järgmise programmi:
void setup() { pinMode(13,OUTPUT); } void loop() { // kuna see on loop (tsükkel), siis jääb //alljärgnev programmilõik ennast kordama digitalWrite(13,HIGH); // HIGH tähendab Arduinol //asuva 13 viigu LED sisselülitamist delay(1000); //laseme 13 pin LED-il põleda //1000 millisekundit = 1 sekund digitalWrite(13,LOW); // HIGH tähendab väljalülitamist delay(2000); //viivitus 2 sekundit--hoiab LED kustunult }
Harjutus A
Muutke delay () funktsioonis toodud millisekundeid ja käivitage uuesti programm. Kirjeldage, mida märkate. Korrake tegevust erinevate väärtustega.
2.4.1. Muutujatest
Antud programm on lühike ja kenasti silmaga haaratav.
Kujutame aga ette, et täiendades seda programmi uute käsklustega saame programmi, mis on oluliselt pikem ja et meil ühel hetkel võiks programmi edasiarendamiseks vaja minna selles sisalduvate millisekundite või ka viigunumbrite kiiret muutmist korraga kogu programmi ulatuses.
Proovime seega juba oma esimesest programmist alates arvestada, et ka alguses kergesti silmaga haaratav lühike programm võib arenduse käigus hakata kasvama: kui arenduse käigus tuleb edaspidi teha muudatusi, siis on targem neid teha organiseeritult.
Seega lisame antud programmile void setup() osast ettepoole ka muutujate osa. Saame:
- Muutujad
- void setup()
- void loop()
Võime siit kopeerida või ka ümber kirjutada järgmise programmilõigu:
//Selles osas enne void setup-i deklareerime muutujad: int LED_viik = 13; // muutuja LED_viik väärtuseks on 13. Kuna //meid huvitavaks viiguks on viik nr 13. //int tähendab täisarvu--peame deklareerima ka muutuja tüübi. //iga rida peab lõppema märgiga ";"--vastasel korral //annab programm kompileerimisel veateadet! int LEDin = 1000; // LEDin muutuja annab väärtuseks 1000 millisekundit int LEDout = 2000; // LEDin muutuja annab väärtuseks 2000 millisekundit //Asendame eelmises programmis kasutatud arvud muutujatega: void setup() { // setup osas antakse oluline üks kord programmile ette pinMode(LED_viik,OUTPUT); // näiteks et LED_viik on väljundiks. //(st ei ole sisend-viiguks) } void loop() { // kuna see on loop (tsükkel), siis jääb //alljärgnev programmilõik ennast kordama digitalWrite(LED_viik,HIGH); // HIGH tähendab Arduinol //asuva 13 viigu LED sisselülitamist delay(LEDin); //laseme viigu number 13 LED-il põleda //1000 millisekundit = 1 sekund digitalWrite(LED_viik,LOW); // HIGH tähendab väljalülitamist delay(LEDout); //viivitus 2 sekundit--hoiab LED kustunult }
Harjutus B
Mängime läbi muutujate teemat:
- Oletame, et meil on vaja muuta LED vilkumise sagedust. Peale programmi tekstis arvude asendamist muutujatega saame proovida muutujate osas (see on ülalpool void setup () funktsiooni asuv osa) asendada näiteks praegu kehtivaid millisekundeid meile huvipakkuvate muudetud väärtustega—teistega kui seda on 1000 ja 2000 millisekundit.
- Teeme mõned asendused: näiteks kustutame mõlemalt muutujalt ühe nulli—saame 1000 ja 2000 millisekundi asemel 100 ja 200 millisekundit.
- Seejärel vajutame uuesti kompileerimisenupule, siis aga aktiviseerime programmi.
a) Kas Arduino viigule 13 sisse ehitatud LED hakkas kiiremini vilkuma?b) Mängige programmiga: andke ise veel mõni väärtus ja klõpsake programm uuesti käima.c) Mida ei maksa vahetada hetkel, on viik 13—see on Arduino UNO-le sisseehitatud LED-ile vastav viik ja selle muutmise korral, kui me ei lisa vooluringi midagi, mis muutmist õigustaks, siis me ei saa enam töötavat programmi.
NB!
Programm peab vastama reaalsele vooluringile, ilma riistvarata tarkvara paraku ei tööta. Kui asendasite näiteks viigu 13 asemele 10—ja kuna sellele viigule ei vasta oma sisse ehitatud LED-i—ja kuna me ei ole veel midagi ehitanud ka—siis midagi ei juhtugi… (Ehitama asume järgmises peatükis.)
// tähendus on inimesele mõeldud märkus, mida Arduino ei arvesta. Antud juhul alustame iga rida, mis ei ole mõeldud arvutile, ent mille siiski enda või kellegi kaasõpilase tarbeks kirja paneme, märgiga „//“.
Saame märki „//“ kasutada ka selleks, et mõnda programmirida mitteaktiivseks muuta: kõike seda, mille ees on „//“, arvuti ei täida. Mitteaktiivseks muutmist programmiridade korral on mugav kasutada siis, kui on soov kiirelt testida erinevaid programmi-versioone. Sel ajal kui ühega töötame, ei pea teist versiooni tingimata ära kustutama—piisab, kui muudame selle teise versiooni, mida hiljem veel vajada võime, mitteaktiivseks märgi „//“ lisamisega igale reale,mille kohta me ei taha, et arvuti seda loeks.
Kui aga soovime lisada terve lõigu kommentaare, siis alustame lõiku märgiga „/*“ ning lõpetame vastandmärgiga „*/“. Näeme, et selliselt tähistatud osad värvuvad IDE-s helehalliks. Arvuti seda lõiku ignoreerib—see on kommentaar inimesele.
Harjutus C
Kirjutage programmitekstidesse iga rea kohta inimesele mõeldud kommentaar, milleks see rida vajalik on. Võite näiteks võtta eespool toodud programmi ja selles need read, mis moodustavad pikema teksti, vastavalt ka pikemate märkmete teksti jaoks mõeldud märkide abil programmi tööd mitte-häirivaks muuta. Mis on tähistuste „/*“ ja „*/“ eelised „//“ ees?
2.5. Kokkuvõte
Saime tööle esimese programmi—antud juhul Arduinole sisse ehitatud LED kas helendab või ei helenda. Määrame ka LED helendamise kestuse ning samuti LED kustunud oleku kestuse: see on tähtis saavutus—kujutleme hetkeks, mida kõike on võimalik niiviisi sisse või välja lülitada!
Võime näiteks käivitada elektrimootorit. Oleme saavutanud küll hästi lihtsa, ent siiski meie esimese töötava roboti. Järgmisel tunnil katsume teha selle skeemi keerukamaks.
2.5.1. Koduseks harjutamiseks
Programmi lugeva inimese suhtes on viisakas iga olulise rea juurde anda ka kommentaar—et kiirelt vajaduse korral selguks, mida selle rea kirjutamisega taotlesite. Iga üherealine kommentaar algab „//“ märgiga. Pange ka mõne programmirea ette märk „//“. Mis juhtub? Kui programm ei komplieeru—lugege veateadet ja kõrvaldage viga—võtke ära „//“.
Millistel juhtudel programm siiski töötab ka mõnda olulist rida välja „selekteerides“? Mida märkate? Iga kommenteeriv pikem lõik algab „/*“ ning lõpeb „*/“.
2.6. Kodutöö
Esitamiseks enne järgmist tundi:
2.6.1. Kordamisküsimused
1)Kumb on õige?
2) Kogu programmile oluliste muutujate osa panen
3) Leia kõik õiged:
4)Esimene praktiline töö tundus
5)Muutujateta programmi on lihtne viivitussekundite osas korrigeerida. Kas see väide on vale või õige? Miks?
6)Kui kirjutan programmi, mis ei kajasta vooluahelat, siis programm:
(Muutke kodus programmi nii, et see ei kajastaks enam reaalset vooluringi—muutke Arduinole sisseehitatud LED vilgutamise ülesandes õige viigu (13) number valeks—mis käivitamisel juhtub?