4. LED-ide vilgutamine FOR tsükliga, lokaalmuutuja kasutamine
<- eelmine peatükk
järgmine peatükk ->
4.0. Seos eelnenud peatükkidega
Eelmises peatükis ehitasime oma esimese vooluahela maketeerimislauale, ühendasime selle Arduinoga, koostasime programmi, mis koosnes kolmest osast. Kui need osad ei meenu, vaadake veelkord eelmise tunni materjalist, mis järjestuses andsite muutujad ning void setup()ja void loop() osad—ning mis on iga osa otstarve.
Vajaduse korral vaadake ka järele, mis moodi ühendate LED-i vooluahelasse. Mõelge sellele, mis moodi oli kirjutatud programm ja kuidas vilkusid LED-id. Kas järjest? Mõelge, kuidas tuleks programmi muuta, selleks, et LED-idest üks vilguks näiteks kuus korda järjest ja teine LED kaks korda järjest. Kas programm peaks olema pikemalt kirjutatud?
4.1. Eesmärk ja selgitused
Selles peatükis kasutame taas eelmises peatükis juba kokku pandud vooluahelat. Oleme omandanud teatava vilumuse ja saame vooluahelat koostades kommenteerida oma tegevust. Käivitame sellel vooluahelal ka eelmisel tunnil tehtud programmi. Mis jääb justkui puudu?
Selle peatüki läbitöötamise järel on õpilane
4.2. Töövahendid on samad, mis eelmiseks tunniks
4.3. Tegevused
4.3.1. Ehitame Arduino juurde vooluahela nii nagu see oli eelmises peatükis
Kommenteerime seejuures tegevust.
- LED-ide „jalad“ peavad olema õigesti ühendatud.
- Leidke Arduino peal digitaal-viigud—millisesse viigupesasse Arduino plaadil ühendate need juhtmed, mis juhivad LED-ide vilgutamist?
- Milleks on vajalik takisti?
Toome igaks juhuks uuesti ära ka eelmises peatükis esitatud skeemi.
4.3.2. Programm, milles on for-tsükkel
Kuna meil on vaja kummagi LED-i kohta n-mitu korda sisse ja välja lülitatud olla, siis kas üks võimalus seda saavutada on nii mitu korda kõik vajalik programmis kirja panna? Kui tahame, et näiteks sinine LED vilguks kolm korda järjest, on see kergesti programmi kirjutatav, ent kui tahame, et süttiks-kustuks 30 korda järjest, siis milliseid raskusi näete programmi pikkuse osas?
Selleks, et vilgutamise osa oleks paremini programmeeritav ja programm paremini loetav, õpime tundma for-tsükliga kordade arvu määramist. Oletame, et meil on vaja, et sinine LED plingiks üheksa korda järjest ja kollane LED viis korda järjest.
Sellisel juhul lisame vastavad for tsüklid:
Void loop(){ for (int i = 1; i<= 9; i= i+1) { digitalWrite (SININE, HIGH); delay(SININE_in); digitalWrite(SININE, LOW); delay(SININE_out); } for (int j = 1; j<= 5; j= j+1) { digitalWrite (KOLLANE, HIGH); delay(KOLLANE _in); digitalWrite(KOLLANE, LOW); delay(KOLLANE _out); } }
NB!
For-tsükli süntaks:
For-tsükli puhul peab kordade arvu määrava osa panema tavaliste sulgude vahele.
Oluline on jälgida, et saaksid paika ka for-tsükli loogelised sulud—et oleks ära näidatud, mille kohta FOR-tsükkel kehtib.
Kui neid nõudeid eirata, siis Teie programm ei kompileeru.
Et lahti seletada for (int j = 1; j<= 5; j= j+1), siis toome välja selle kolm osa.
- Selle lõpus kontrollime, ega me ei unustanud lisada semikoolonit (;).
- Ning vaatame üle, kas lisasime semikooloni (;).
- Ja sedakorda me ei lisa semikoolonit.
- Küll aga vaatame, et kas ikka panime kõik kolm tavaliste sulgude ( ja ) vahele.
Loogeliste sulgude vahel aga paikneb kõik see, mida tehakse igakordse tsükli sees—hoitakse LED-i teatud aeg olekus HIGH ja seejärel hoitakse LED-i teatud aeg olekus LOW.
1Lokaal-muutujaks (ka lokaalseks muutujaks) nimetame muutujat, mis defineeritakse vaid teatud programmiosa ees ja mis kehtib vaid selle programmiosa piirides: nt for-tsükli loendur toimib vaid selle tsükli piires.
Harjutus A
Koostage õpitu põhjal programm, milles on vilgutatud LED-i for-tsükliga. Selleks tehke vajalikud muudatused eelmises peatükis kasutatud programmi. Vajadusel esitage küsimusi õpetajale.
Illustratsiooniks:
Veidi teistsuguse näite tarvis saame antud harjutust teha ka teises peatükis uuritud sisse ehitatud LED-iga.
Toon allpool programmi, mis on kirjutatud ühele LED-ile maketeerimislaual ning Arduinole sisse ehitatud LED-ile. Kopeerige see Arduino IDE-sse—ehitage valmis sellele vastav vooluahel ja katsetage erinevate viikudega, võite lisada veel ühe LED-i ja sellele anda muudest erineva vilkumismustri.
int ROHELINE_viik = 5; int ArduinoLED_viik = 13; int ArduinoLEDhigh = 100; int ArduinoLEDlow = 2000; int roheLEDhigh = 500; int roheLEDlow = 800; void setup() { pinMode(ArduinoLED_viik, OUTPUT); pinMode(ROHELINE_viik, OUTPUT); } void loop() { for (int i=1; i<=3; i=i+1){ digitalWrite(ArduinoLED_viik, HIGH); delay(ArduinoLEDhigh); digitalWrite(ArduinoLED_viik, LOW); delay(ArduinoLEDlow); } for (int j=1; j<=3; j=j+1){ digitalWrite(ROHELINE_viik, HIGH); delay(roheLEDhigh); digitalWrite(ROHELINE_viik, LOW); delay(roheLEDlow); } }
4.4. Kodutöö
4.4.1. Kuidas näeks programm välja siis, kui annaksime ka korduste arvu kummagi LED puhul muutujana?
Kirjutage programm nii ümber, et korduste arv kummagi LED-i plinkimistel oleks toodud muutujana programmi esiosas asuvasse muutujate osasse ja selgitage, miks selline ümberkorraldus võiks programmile kasuks tulla. Esitage see programm järgmiseks tunniks õpetajale.
NB!
Jätame meelde, et Arduino „toite-pinge“ on 5V. LED töökorras püsimise tarvis on oluline lisada toitele ka takisti: et mitte läbi põletada LED-i, peab saama langetada pinget LED viikudel, seda aitabki saavutada takisti.
NB!
Takistite takistusnäitajaid on võimalik ja sageli ka vajalik enne ühendamist üle kontrollida, ent saame tugineda ka värvikoodile: x triibu-mustriga takisti takistuseks on x oomi (Ω). Takistit, erinevalt LED—ist, saab ühendada mõlemat pidi—st ei ole tähtis, millise takisti viigu külge on ühendatud miinus, millise külge pluss—takisti jääb takistiks.
NB!
Arduino IDE-s uue programmi kirjutamisega alustamiseks avame kõigepealt programmeerimiskeskkonna (IDE) ja alustame uue projektiga: File —> New: avaneb uues aknas ja selle sees näeme järgmist programmi-raamistikku, mida programmeerimiskeskkond meile „ette ütleb“:
void setup() { // put your setup code here, to run once: } void loop() { // put your main code here, to run repeatedly: }
4.4.2. Keelenurk:
Kasulik on siinkohal meelde jätta ka inglise keeles sõna loop (häälda ’luup’) tähendus: eesti keeles kasutame sama mõiste märkimiseks kreeka päritolu sõna ’tsükkel’—märkimaks midagi, mis on korduva iseloomuga, mida sellise korduvuse tõttu annab käsitleda „ringiratast“ liikuvana. Kreeka keeles κύκλος. Nii et sõna tsükkel sobib kenasti. Sõna loop eestikeelset hääldust esitav kirjapilt aga oleks eksitav: sõna luup on meie keeles juba kasutusel.
4.4.3. Koostage veel LED-idega vilkumismustreid
- Improviseerige! Tehke oma tööst pilti ja esitage tehtust midagi huvitavamat järgmiseks tunniks õpetajale ja teistele õpilastele hinnata.
4.4.4. Kumb piltidest on õige, kumb väär?
Palun ka põhjendage.
Pilt A:
Pilt B: