Miért ne használja mindig az Arduino késleltetési funkciót

amikor először használt egy Arduino táblát, valószínűleg valami ilyesmit tett:

  • csatlakoztatott egy LED-et az Arduino-hoz
  • feltöltötte az alapértelmezett blink vázlatot, amely másodpercenként be-és kikapcsolja a LED-et

ezt az Arduino “Hello World” programjának hívják, és azt mutatja, hogy csak néhány sornyi kóddal létrehozhat valamit, amely valós alkalmazással rendelkezik.

blink sketch

az előző példában a delay() funkcióval határozhatja meg a LED be-és kikapcsolása közötti intervallumokat.

itt van az üzlet: bár a delay() praktikus és alapvető példákhoz működik, valójában nem szabad használni a Való Világban… olvassa tovább, hogy megtudja, miért.

hogyan működik a delay() függvény

az Arduino delay() függvény működése meglehetősen egyenes.

egyetlen egész számot fogad el argumentumként. Ez a szám azt az időt jelenti milliszekundumban, amelyet a programnak meg kell várnia, amíg a következő kódsorra lép.

ha késlelteti(1000) az Arduino megáll ezen a vonalon 1 másodpercig.

a delay() egy blokkoló funkció. A blokkoló funkciók megakadályozzák, hogy a program bármi mást végezzen, amíg az adott feladat befejeződik. Ha egyszerre több feladatra van szüksége, egyszerűen nem használhatja a késleltetést ().

ha az alkalmazás megköveteli, hogy folyamatosan olvassa/mentse az adatokat a bemenetekről, kerülje a delay() funkció használatát. Szerencsére van megoldás.

millis() függvény a mentéshez

a millis() függvény híváskor visszaadja a program első indítása óta eltelt milliszekundumok számát.

miért hasznos ez?

mivel néhány matematika használatával könnyedén ellenőrizheti, hogy mennyi idő telt el a kód blokkolása nélkül.

az alábbi vázlat bemutatja, hogyan használhatja a millis() függvényt egy blink projekt létrehozásához. 1000 milliszekundumra bekapcsolja a LED-et, majd kikapcsolja. De olyan módon teszi, amely nem blokkolja.

vessünk egy közelebbi pillantást egy blink vázlatra, amely késleltetési funkció nélkül működik:

/* Blink without Delay, example here: arduino.cc/en/Tutorial/BlinkWithoutDelay*/// constants won't change. Used here to set a pin number :const int ledPin = 13; // the number of the LED pin// Variables will change :int ledState = LOW; // ledState used to set the LED// Generally, you should use "unsigned long" for variables that hold time// The value will quickly become too large for an int to storeunsigned long previousMillis = 0; // will store last time LED was updated// constants won't change :const long interval = 1000; // interval at which to blink (milliseconds)void setup() { // set the digital pin as output: pinMode(ledPin, OUTPUT);}void loop() { // here is where you'd put code that needs to be running all the time. // check to see if it's time to blink the LED; that is, if the // difference between the current time and last time you blinked // the LED is bigger than the interval at which you want to // blink the LED. unsigned long currentMillis = millis(); if (currentMillis - previousMillis >= interval) { // save the last time you blinked the LED previousMillis = currentMillis; // if the LED is off turn it on and vice-versa: if (ledState == LOW) { ledState = HIGH; } else { ledState = LOW; } // set the LED with the ledState of the variable: digitalWrite(ledPin, ledState); }}

nyers Kód megtekintése

ez a fenti vázlat itt található, és úgy működik, hogy kivonja az előző rögzített időt (previousMillis) az aktuális időből (currentMillis). Ha a fennmaradó idő nagyobb, mint az intervallum (ebben az esetben 1000 milliszekundum), a program frissíti a previousMillis változót az aktuális időre, és vagy be-vagy kikapcsolja a LED-et.

és mivel ez nem blokkoló, minden olyan kódnak, amely az első if utasításon kívül található, normálisan kell működnie.

most már megértheted, hogy más feladatokat is hozzáadhatsz a loop() függvényhez, és a kódod még mindig másodpercenként villog a LED-en.

melyik funkciót használja?

az Arduino-val két különböző módszert tanultunk meg az idő kezelésére. A millis () függvények használata egy kis extra munkát igényel a delay () használatához képest. De a programjai nem tudnak multitaskingot végezni az Arduino-n anélkül.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

Previous post fedezze fel a természet minden tájáról
Next post Florida Múzeum