Egy LED villogtatása a delay() függvény használata nélkül.
Utolsó felülvizsgálat: 2022.02.04 16:50
Néha két dolgot kell egyszerre csinálni. Például villogtatni szeretne egy LED-et a gombnyomás olvasása közben. Ebben az esetben nem használhatja a delay()
-t, mert az Arduino megállítja a programot a delay()
alatt. Ha a gombot megnyomja, miközben az Arduino szünetet tart, és várja, hogy a delay()
véget érjen, a program lemarad gombnyomásról.
Ez a vázlat bemutatja, hogyan lehet villogtatni egy LED-et a delay()
használata nélkül. Felkapcsolja a LED-et, majd feljegyzi az időt. Ezután minden alkalommal a loop()
-on keresztül ellenőrzi, hogy eltelt-e a kívánt pislogási idő. Ha igen, be- vagy kikapcsolja a LED-et, és feljegyzi az új időt. Ily módon a LED folyamatosan villog, miközben a vázlat végrehajtása egyetlen utasításnál sem késik.
Egy hasonlat például, hogy ha felmelegítene egy pizzát a mikrohullámú sütőben, és várna egy fontos e-mailt. Betesszük a pizzát a mikrohullámú sütőbe, és 10 percre állítjuk be. A delay() használatának analógiája az lenne, ha a mikrohullámú sütő előtt ülnénk, és néznénk, ahogy az időzítő 10 perctől visszaszámlál, amíg az időzítő el nem éri a nullát. Ha ez idő alatt érkezett meg a fontos e-mail, akkor az hiányozni fog.
A való életben az lenne, ha bekapcsolnád a pizzát, megnéznéd az e-mail-címedet, és esetleg csinálnál valami mást (ami nem tart túl sokáig!), és időnként visszatérsz a mikrohullámú sütőhöz, hogy megnézd, hogy az időzítő elérte-e a nullát, jelezve, hogy a pizza elkészült.
Ebből az oktatóanyagból megtudhatja, hogyan állítson be hasonló időzítőt.
Hardver szükséglet
Arduino kártya
LED
220 ohm-os ellenállás
Az áramkör

Az áramkör felépítéséhez csatlakoztassa az ellenállás egyik végét a kártya 13-as kivezetéséhez. Csatlakoztassa a LED hosszú lábát (a pozitív lábát, az úgynevezett anódot) az ellenállás másik végéhez. Csatlakoztassa a LED rövid lábát (a negatív láb, az úgynevezett katód) a kártya GND kivezetéséhez, a fenti ábra és az alábbi kapcsolási rajz szerint.
A legtöbb Arduino kártyán magán van már egy LED, amely a 13-as kivezetéshez van csatlakoztatva. Ha ezt a példát hardver nélkül futtatja, látnia kell, hogy ez a LED villog.
Vázlat

Az áramkör felépítése után csatlakoztassa a kártyát a számítógéphez, indítsa el az Arduino szoftvert (IDE), és írja be az alábbi kódot.
A kód
Az alábbi kód a millis()
függvényt használja, egy olyan parancsot, amely visszaadja, hogy hány ezredmásodperc telt el azóta, hogy a tábla elkezdte futtatni az aktuális vázlatot, és villogtatni egy LED-et.
/*
Blink without Delay
Be- és kikapcsolja a digitális kivezetéshez csatlakoztatott fénykibocsátó diódát (LED),
a delay() függvény használata nélkül. Ez azt jelenti, hogy egyidejűleg más kód is futhat
anélkül, hogy a LED kód megszakítaná.
Az áramkör:
- Használja a beépített LED-et.
- Megjegyzés: A legtöbb Arduino beépített LED-del rendelkezik, amelyet vezérelhet. Az UNO, MEGA
és ZERO 13-as digitális kivezetéshez, az MKR1000-en a 6-os kivezetéshez csatlakozik. A LED_BUILTIN
a megfelelő LED lábra van állítva, függetlenül attól, hogy melyik kártyát használják.
Ha tudni szeretné, hogy az Arduino modellen melyik érintkezőhöz csatlakozik az alaplapi LED,
ellenőrizze az alaplap műszaki adatait a következő címen:
https://www.arduino.cc/en/Main/Products
created 2005
by David A. Mellis
modified 8 Feb 2010
by Paul Stoffregen
modified 11 Nov 2013
by Scott Fitzgerald
modified 9 Jan 2017
by Arturo Guadalupi
Ez a kód nyilvános.
https://docs.arduino.cc/built-in-examples/digital/BlinkWithoutDelay
*/
// az állandók nem változnak. Itt a kivezetés beállítására szolgál:
const int ledPin = LED_BUILTIN;// a LEDkivezetés száma
// Variables will change:
int ledState = LOW; // ledState-et használjuk a LED beállítására
// Általában "unsigned long" típust kell használni az időt tartalmazó változókhoz
// Az érték gyorsan túl nagy lesz ahhoz, hogy egy int tárolja
unsigned long previousMillis = 0; // tárolja a LED legutóbbi frissítését
// az állandók nem változnak:
const long interval = 1000; // villogás időtartama (ezredmásodperc)
void setup() {
// a digitális kivezetést output-ra állítjuk:
pinMode(ledPin, OUTPUT);
}
void loop() {
// itt kell elhelyeznie a kódot, amelynek folyamatosan futnia kell.
// ellenőrizze, hogy eljött-e az ideje villogni a LED-nek; vagyis ha
// a különbség a pillanatnyi idő és a LED utolsó villogása között
// nagyobb, mint a LED villogásának időtartama.
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// mentse el a LED legutóbbi villogását időpontját
previousMillis = currentMillis;
// ha a LED nem világít, kapcsolja be, és fordítva:
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
// állítsa be a LED-et a ledState változó értékével:
digitalWrite(ledPin, ledState);
}
}
Tudj meg többet
További alapvető oktatóanyagokat a beépített példák részben talál.
Felfedezheti a nyelvi referenciát is, az Arduino programozási nyelv részletes gyűjteményét.