This is an old revision of the document!
/* Nimetus: Näide #1.1 Digitaalsed sisend-väljundid Kirjeldus: Nuppu korraks vajutades vilgub LED 3 korda */ // Konstandid const int nupp = A0; // Viik kuhu on ühendatud nupp const int led = 13; // Viik kuhu on ühendatud roheline LED // Globaalsed muutujad int nupuOlek = 0; // Nupu oleku muutuja ja algväärtustamine void setup() { pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks pinMode(nupp, INPUT_PULLUP); // algväärtustame nupu viigu sisendiks ja aktiveerime sisemise pull-up takisti } void loop(){ nupuOlek = digitalRead(nupp); // salvestame muutujasse nupu hetke väärtuse if (nupuOlek == LOW) { // Kui nupu on alla vajutatud for(int i = 0; i < 3; i++){ digitalWrite(led, HIGH); // süütame LED-i delay(200); //viide led põlemas hoidmiseks digitalWrite(led, LOW); // kustutame LED-i delay(200); //viide led kustus hoidmiseks } } }
NB! LED vilkumisel on sees pikad viited, mistõttu vilkumise välja lülitamiseks tuleb lülitit pikemalt all hoida.
/* Nimetus: Näide #1.2 Digitaalsed sisend-väljundid Kirjeldus: LED vilkumise sisse/välja lülitamine lülitiga */ // Konstandid const int nupp = A0; // Viik kuhu on ühendatud nupp const int led = 13; // Viik kuhu on ühendatud roheline LED // Globaalsed muutujad bool vilguta = false; //muutuja vilgutamise sisse välja lülitamiseks void setup() { pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks pinMode(nupp, INPUT_PULLUP); // algväärtustame nupu viigu sisendiks ja aktiveerime sisemise pull-up takisti } // Algus identne näitega #1.1 void loop(){ if(digitalRead(nupp) == LOW){ //kontrolli kas lülitit on vajutatud vilguta = !vilguta; //inverteerime vilgutamise muutuja, et vilkumine sisse/välja lülitada delay(50); //kontaktide värelemise viide (debounce) while(digitalRead(nupp) == LOW); //ootab kuni nupp lastakse lahti } if (vilguta == 1) { // Kui nupu olek on madal delay(1000); //led kustus hoidmise viide digitalWrite(led, HIGH); // süütame LED-i delay(1000); // led põlemas hoidmise viide } digitalWrite(led, LOW); // kustutame LED-i }
/* Nimetus: Näide #1.3 Digitaalsed sisend-väljundid Kirjeldus: Iga nupu vajutusega vilgub LED aina rohkem kordi */ // Konstandid const int nupp = A0; // Viik kuhu on ühendatud nupp const int led = 13; // Viik kuhu on ühendatud roheline LED // Globaalsed muutujad int nupuVajutusi = 0; void setup() { pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks pinMode(nupp, INPUT_PULLUP); // algväärtustame nupu viigu sisendiks ja aktiveerime sisemise pull-up takisti } void loop() { if (digitalRead(nupp) == LOW) { // kontrollib kas nupu olek on madal nupuVajutusi++; //liidame ühe muutuja väärtusele delay(50); //lüliti kontaktide värelemise (debounce) efekti mõju vähendamiseks väike viide while (digitalRead(nupp) == LOW) { //tsükkel jätkub lõputult kuni nupu olek on madal // Ootame nupu lahtilaskmist } for(int i = 0; i < nupuVajutusi*2;i++){ digitalWrite(led, !digitalRead(led)); // LED viigu väljund inverteeritakse kasutades viigu hetke olekut delay(200); //viide, et hoida led kustus/põlemas } delay(50); //lüliti kontaktide värelemise (debounce) efekti mõju vähendamiseks väike viide } }
/* Nimetus: Näide #2.1 LED juhtimine potentsiomeetriga Kirjeldus: Potentsiomeetri pööramisel üle etteantud piiri süttib LED */ const int pote = A0; // määrame potentsiomeetri ühendusviigu (sisend) const int led = 13; // määrame LED ühendusviigu (väljund) int poteOlek = 0; // muutuja potentsiomeetri väärtuse salvestamiseks void setup() { //mikrokontrolleri viigud on tavaolekus sisendid pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks } void loop() { poteOlek = analogRead(pote); // loeme anduri väärtuse if(poteOlek >= 1023 || poteOlek <= 0)digitalWrite(led, HIGH); // kustutame LED-i else digitalWrite(led, LOW); // süütame LED-i }
/* Nimetus: Näide #2.2 LED juhtimine potentsiomeetriga Kirjeldus: Potentsiomeetri asendist sõltub LED vilkumise sagedus */ const int pote = A0; // määrame potentsiomeetri ühendusviigu (sisend) const int led = 13; // määrame LED ühendusviigu (väljund) const int fikseeritud_viide = 512; int poteOlek = 0; // muutuja potentsiomeetri väärtuse salvestamiseks void setup() { //mikrokontrolleri viigud on tavaolekus sisendid pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks } void loop() { poteOlek = analogRead(pote); // loeme anduri väärtuse digitalWrite(led, HIGH); // kustutame LED-i if(poteOlek > 512) delay(1023 - poteOlek); // tekitame viite <poteOlek> millisekundit else delay(fikseeritud_viide); // tekitame viite <poteOlek> millisekundit digitalWrite(led, LOW); // süütame LED-i if(poteOlek < 512) delay(poteOlek); // tekitame viite <poteOlek> millisekundit else delay(fikseeritud_viide); // tekitame viite <poteOlek> millisekundit }
/* Nimetus: Näide #2.3 LED juhtimine potentsiomeetriga Kirjeldus: Potentsiomeetri asendi muutuse kiiruse järgi LED heleduse reguleerimine */ //Konstandid const int pote = A0; // määrame potentsiomeetri ühendusviigu (sisend) const int led = 13; // määrame LED ühendusviigu (väljund) const int maxLoendurVaartus = 150; //Globaalsed muutujad int poteOlek = 0; int viimanePoteOlek = 0; int kiirus = 0; int loendur = 0; void setup() { //mikrokontrolleri viigud on tavaolekus sisendid pinMode(led, OUTPUT); // algväärtustame LED viigu väljundiks } void loop() { poteOlek = analogRead(pote); // loeme anduri hetkeväärtuse //Arvutame kiiruse anduri hetkeväärtuse ja eelneva väärtuse lahutustehtena //Olenevalt kumb pidi potentsiomeetri liigutab on vaja ka tehe teha ühte //või teistpidi, et ei tekiks negatiivset arvu if(poteOlek > viimanePoteOlek) kiirus = poteOlek - viimanePoteOlek; else kiirus = viimanePoteOlek - poteOlek; if(kiirus > 100) kiirus = 100; //piirab kiiruse väärtuse ära, et ei tekiks negatiivset viidet //kui potentsiomeetr ei liigu, siis võib siiski analoog-digitaal muunduri müra tõttu led tuhmilt põleda. //Selle olukorra eemaldamiseks seame minimaalse kiiruse väärtuse, millest alates LED põlema võib minna if(kiirus > 5){ digitalWrite(led, HIGH); // süütab LED-i delayMicroseconds(kiirus); // hoia LED põlemas kiiruse väärtusega võrdne arv mikrosekundeid } digitalWrite(led, LOW); //kustutab LED-i delayMicroseconds(100 - kiirus); // hoia LED kustus 100st mikrosekundist ülejäänud arv mikrosekundeid //Kuna PWM signaali ehk LED heleduse reguleerimiseks peab loop() tsükkel võimalikult kiirelt töötama, //siis ei saa lisanduvaid viiteid lubada, et led põleks võimalikult stabiilselt. Samas potentsiomeetri //hetke väärtuse ja eelneva väärtuse uuendamise vahe on liiga väike, et tekiks adekvaatne kiiruse väärtus. //Probleemi lahenduseks on kasutatud viite tekitamiseks muutuja suurendamise meetodit, mis jõudes ette //antud väärtuseni teeb tegevuse ja nullib loenduri. loendur++; //suurenda muutujat loendur ühe võrra if(loendur >= maxLoendurVaartus){ viimanePoteOlek = poteOlek; //uuenda eelmise potentsiomeetri väärtust loendur = 0; // nulli loendur } }