Miksi sinun ei pitäisi aina käyttää Arduino-Viivefunktiota

kun ensimmäistä kertaa käytit Arduino-levyä, luultavasti teit jotain tällaista:

  • liitetty LED Arduino
  • latasi oletusvalokuvan, joka kytkee Ledisi päälle ja pois joka sekunti

tätä kutsutaan Arduinon ”Hello World” – ohjelmaksi ja osoittaa, että vain muutamalla koodirivillä voit luoda jotain, jolla on reaalimaailman sovellus.

blink sketch

edellisessä esimerkissä käytetään delay () – funktiota määrittelemään välit ledin käynnistymisen ja sammumisen välillä.

tässä on diili: vaikka delay() on kätevä ja toimii perusesimerkeissä, sitä ei todellakaan kannata käyttää oikeassa maailmassa… Jatka lukemista oppiaksesi miksi.

kuinka delay () – funktio toimii

Arduino-delay () – funktio toimii melko suoraviivaisesti.

se hyväksyy yhden kokonaisluvun argumentiksi. Tämä numero kuvaa millisekunteina aikaa, jonka ohjelman on odotettava, kunnes se siirtyy seuraavalle koodiriville.

kun viivytät(1000), Arduino pysähtyy tuolla linjalla 1 sekunniksi.

viive () on estofunktio. Estotoiminnot estävät ohjelmaa tekemästä mitään muuta, kunnes kyseinen tehtävä on suoritettu. Jos tarvitset useita tehtäviä samanaikaisesti, et yksinkertaisesti voi käyttää viivettä ().

jos hakemuksesi edellyttää, että luet/tallennat tietoja jatkuvasti syötteistä, sinun tulisi välttää viiveohjelman() käyttöä. Onneksi on olemassa ratkaisu.

millis () – funktio pelastaa

millis () – funktio kutsuu, palauttaa ohjelman aloittamisesta kuluneiden millisekuntien määrän.

miksi se on hyödyllistä?

koska käyttämällä jonkin verran matematiikkaa, voit helposti tarkistaa, kuinka paljon aikaa on kulunut estämättä koodiasi.

alla oleva luonnos näyttää, miten voit käyttää Millis () – funktiota blink-projektin luomiseen. Se kytkee LED-valon päälle 1000 millisekunniksi ja sammuttaa sen sitten. Mutta se tekee sen tavalla, joka ei estä.

Katsotaanpa lähemmin blink-sketsiä, joka toimii ilman viivefunktiota:

/* 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); }}

Näytä raakakoodi

tämä yllä oleva luonnos löytyy täältä ja se toimii vähentämällä edellisen tallennetun ajan (previousMillis) nykyisestä ajasta (currentMillis). Jos jäljellä on suurempi kuin väli (tässä tapauksessa 1000 millisekuntia), ohjelma päivittää edellisen Millis muuttuja nykyiseen aikaan, ja joko kytkee LED päälle tai pois päältä.

ja koska kyseessä on estottomuus, minkä tahansa koodin, joka sijaitsee kyseisen ensimmäisen if-lausekkeen ulkopuolella, pitäisi toimia normaalisti.

voit nyt ymmärtää, että voit lisätä muita tehtäviä loop () – funktioosi ja koodisi silti räpyttäisi lediä joka sekunti.

mitä toimintoa sinun tulee käyttää?

Arduinojen kanssa on opittu kaksi erilaista tapaa käsitellä aikaa. Millis () – toimintojen käyttäminen vaatii hieman ylimääräistä työtä verrattuna viiveen () käyttöön. Mutta ohjelmat eivät voi tehdä multitasking Arduino ilman sitä.

Vastaa

Sähköpostiosoitettasi ei julkaista.

Previous post Discover Nature All Around
Next post Florida Museum