This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:arduino:buttons:project1 [2017/05/11 10:42] – Somepub | et:arduino:buttons:project1 [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Projekt 1 LED-i juhtimine nupuga | ||
| + | |||
| + | Lisada Arduino plaadile nupp, mille üks juhe ühendada maapotentsiaaliga (inglise keeles //ground//, lühend GND) ja teine mikrokontrolleri viiku A0. Valgusdioodi eraldi lisada pole vaja kuna Arduino plaadil on üks juba olemas, mis on ühendatud viiku D13. Olenevalt Arduino arendusplaadist võib LED paikneda plaadil erinevas kohas ja olla erinevat värvi, kuid alati on ta ühendatud viiku D13.\\ | ||
| + | **NB!** Kui nupul puudub jadamisi takisti, siis tuleb eriti tähelepanelikult jälgida, et nuppu ei ühendataks toitepotentsiaali (+5V) ja GND vahele, kuna tagajärjeks võib olla maha põlenud plaat. | ||
| + | |||
| + | {{: | ||
| + | |||
| + | ===== Näide #1.1 Nuppu all hoides LED põleb ===== | ||
| + | |||
| + | Tegemist on lihtsa programmiga, | ||
| + | Arduino digitaalsete viikude kohta saab lugeda rohkem siit: [[https:// | ||
| + | |||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #1.1 | ||
| + | Kirjeldus: Nuppu all hoides LED põleb | ||
| + | */ | ||
| + | |||
| + | /* Konstandid */ | ||
| + | // Viik kuhu on ühendatud nupp | ||
| + | const int nupp = A0; | ||
| + | |||
| + | // Viik kuhu on ühendatud LED | ||
| + | const int led = 13; | ||
| + | |||
| + | /* Globaalsed muutujad */ | ||
| + | // Nupu muutuja oleku salvestamine ja selle algväärtustamine | ||
| + | int nupuOlek = 0; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | // LED viigu väljundi seadistamine | ||
| + | pinMode(led, | ||
| + | // Nupu viigu sisendi seadistamine ja sisemise " | ||
| + | pinMode(nupp, | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | // Nupu muutuja hetkeväärtuse salvestamine | ||
| + | nupuOlek = digitalRead(nupp); | ||
| + | // Kui nupp on alla vajutatud, siis seadistame LED viigu kõrgeks ehk LED süttib | ||
| + | if (nupuOlek == LOW) | ||
| + | { | ||
| + | digitalWrite(led, | ||
| + | } | ||
| + | // Muul juhul seadistame LED viigu madalaks ehk LED ei põle | ||
| + | else | ||
| + | { digitalWrite(led, | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Näide #1.2 Nupule vajutades LED süttib 1 sekundiks ===== | ||
| + | Võrreldes eelmise programmiga on juurde lisatud 1000 ms (millisekundi) pikkune viide pärast LED-i oleku kõrgeks muutmist. Lisatud rida koodis hoiab LED-i põlemas veel viite väärtuse võrra pärast nupu lahti laskmist. Antud meetod on otstarbekas, | ||
| + | |||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #1.2 | ||
| + | Kirjeldus: Nupule vajutades süttib LED 1 sekundiks | ||
| + | */ | ||
| + | |||
| + | // Algus identne näitega #1.1 (kommenteeritud koodi vaata sealt) | ||
| + | const int nupp = A0; | ||
| + | const int led = 13; | ||
| + | |||
| + | int nupuOlek = 0; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | pinMode(led, | ||
| + | pinMode(nupp, | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | // Nupu muutuja hetkeväärtuse salvestamine | ||
| + | nupuOlek = digitalRead(nupp); | ||
| + | | ||
| + | /* Kui nupp on alla vajutatud, siis seadistame LED viigu kõrgeks ehk LED süttib, | ||
| + | | ||
| + | if (nupuOlek == LOW) | ||
| + | { | ||
| + | digitalWrite(led, | ||
| + | delay(1000); | ||
| + | } | ||
| + | digitalWrite(led, | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Näide #1.3 Nupule vajutades muudab LED oma olekut ===== | ||
| + | Peatsüklis //loop// LED oleku kõrgeks muutmisele järgneb //while// tsükkel, mis hoiab programmi kinni kuni nupp on lahti lastud ehk viigu olek muutub tagasi kõrgeks. Lisaks on juures viide enne //while// tsüklit ja pärast LED-i oleku muutmist. Konkreetsed viited on vajalikud nupu kontaktide põrkumisest tekkiva värelemise efekti (debounce) eemaldamiseks, | ||
| + | |||
| + | <code c> | ||
| + | /* | ||
| + | Nimetus: Näide #1.3 | ||
| + | Kirjeldus: Nupule vajutades muudab LED oma olekut püsivalt | ||
| + | */ | ||
| + | |||
| + | // Algus identne näitega #1.1 (kommenteeritud koodi vaata sealt) | ||
| + | const int nupp = A0; | ||
| + | const int led = 13; | ||
| + | |||
| + | int nupuOlek = 0; | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | pinMode(led, | ||
| + | pinMode(nupp, | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | // Programm ei tee midagi kuni vajutatakse nuppu | ||
| + | if (digitalRead(nupp) == LOW) | ||
| + | { | ||
| + | // Lüliti kontaktide värelemise (debounce) efekti mõju vähendamiseks väike viide | ||
| + | delay(50); | ||
| + | while (digitalRead(nupp) == LOW) | ||
| + | { //Tsükkel hoiab programmi kinni kuni nupu viigu olek muutub kõrgeks | ||
| + | } | ||
| + | /* LED viigu olek inverteeritakse ehk seatakse | ||
| + | | ||
| + | digitalWrite(led, | ||
| + | | ||
| + | // Lüliti kontaktide värelemise (debounce) efekti mõju vähendamiseks väike viide | ||
| + | delay(50); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Harjutused ===== | ||
| + | === Harjutus #1.1 === | ||
| + | Modifitseerida näiteprogrammi nii, et nupule vajutades vilgub LED kolm korda. | ||
| + | === Harjutus #1.2 === | ||
| + | Modifitseerida näiteprogrammi nii, et nupule vajutades hakkab LED konstantselt vilkuma 1 sekundilise intervalliga ja teine nupule vajutus lõpetab vilkumise. | ||
| + | === Harjutus #1.3 === | ||
| + | Modifitseerida näiteprogrammi nii, et nupule vajutades LED vilgub nii mitu korda, kui on nuppu programmi töötamise jooksul kokku vajutatud. Pärast igat vajutust suureneb vilkumiste arv ühe võrra. | ||