Villogtatás delay nélkül

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.