Hvorfor Bør Du Ikke Alltid Bruke Arduino Delay-Funksjonen

første gang du brukte Et Arduino-brett, gjorde du sannsynligvis noe slikt:

  • Koblet EN LED Til Arduino
  • Lastet opp standard blinkskisse som ville slå PÅ OG AV LED hvert sekund

dette kalles «Hello World» – programmet Til Arduino og viser at med bare noen få linjer med kode kan du lage noe som har en ekte verdensapplikasjon.

 blinkskisse

i det foregående eksemplet bruker du delay () – funksjonen til å definere intervaller mellom LYSDIODEN slås på og av.

Her er avtalen: mens delay () er praktisk og fungerer for grunnleggende eksempler, bør du virkelig ikke bruke den i den virkelige verden… Fortsett å lese for å lære hvorfor.

hvordan delay () – Funksjonen Fungerer

måten Arduino delay () – funksjonen fungerer, er ganske rett frem.

det aksepterer et enkelt heltall som et argument. Dette tallet representerer tiden i millisekunder programmet må vente til du går videre til neste linje med kode.

når du forsinker(1000) Stopper Arduino på den linjen i 1 sekund.

delay () er en blokkeringsfunksjon. Blokkeringsfunksjoner hindrer et program fra å gjøre noe annet før den aktuelle oppgaven er fullført. Hvis du trenger flere oppgaver på samme tid, kan du bare ikke bruke delay ().

hvis søknaden din krever at du hele tiden leser/lagrer data fra innganger, bør du unngå å bruke delay () – funksjonen. Heldigvis finnes det en løsning.

millis () – Funksjonen Til Redning

millis () – funksjonen når den kalles, returnerer antall millisekunder som har gått siden programmet ble startet.

Hvorfor er det nyttig?

fordi ved å bruke litt matte, kan du enkelt bekrefte hvor mye tid som har gått uten å blokkere koden din.

skissen nedenfor viser hvordan du kan bruke millis () – funksjonen til å lage et blinkprosjekt. DET slår PÅ LED-lampen i 1000 millisekunder, og slår den av. Men det gjør det på en måte som ikke blokkerer.

La oss ta en nærmere titt på en blinkskisse som fungerer uten forsinkelsesfunksjon:

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

vis rå kode

denne skissen ovenfor finner du her, og den fungerer ved å trekke den forrige registrerte tiden (previousMillis) fra gjeldende tid (currentMillis). Hvis resten er større enn intervallet (i dette tilfellet 1000 millisekunder), oppdaterer programmet den forrigemillis-variabelen til gjeldende tid, og enten slår LYSDIODEN PÅ eller av.

og fordi det er en ikke-blokkering, skal enhver kode som ligger utenfor den første hvis setningen fungere normalt.

Du kan nå forstå at du kan legge til andre oppgaver i loop () – funksjonen, og koden din vil fortsatt blinke LYSDIODEN hvert sekund.

Hvilken funksjon skal du bruke?

Vi har lært to forskjellige måter Å håndtere tid Med Arduino. Bruk av millis () – funksjonene tar litt ekstra arbeid i forhold til å bruke delay (). Men programmene dine kan ikke gjøre multitasking på Arduino uten Det.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.

Previous post Oppdag Naturen Rundt
Next post Florida Museum