Blinka utan delay med millis
Håll reda på förfluten tid för att köra uppgifter enligt ett schema.
Blinka utan delay med millis är en gratis lektion i Arduino & IoT Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Arduino & IoT Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Arduino & IoT Academy innehåller totalt 4 lektioner.
Ett inbyggt stoppur
Funktionen millis returnerar hur många millisekunder kortet har körts sedan det startades. Det är ett kostnadsfritt stoppur som alltid räknar. ⏱️
unsigned long now = millis();Varför unsigned long
Lagra millis i en unsigned long. Räknaren växer kraftigt med tiden, och en vanlig int skulle få spill på mindre än en minut.
Grundidén
I stället för att pausa kommer du ihåg senaste tidpunkten då du agerade och kontrollerar sedan i varje loop hur mycket tid som har gått sedan dess.
Kom ihåg den senaste tidpunkten
Använd en variabel som previousMillis för att lagra när du senast växlade LED:ens läge. Du jämför den med den aktuella tiden i varje varv.
unsigned long previousMillis = 0;Ställ in intervallet
Välj ett intervall, till exempel 1000 millisekunder, som avståndet mellan blinkningarna. Om du agerar först när så lång tid har gått får du en jämn rytm.
const long interval = 1000;Har tillräckligt med tid gått?
I varje loop subtraherar du previousMillis från det aktuella värdet från millis. Om skillnaden är minst lika stor som ditt intervall är det dags att agera.
if (millis() - previousMillis >= interval) {Nollställ tidtagningen
I samma ögonblick som du agerar sätter du previousMillis till den aktuella tiden. Då startar nedräkningen om och nästa blinkning väntar ett helt intervall igen.
previousMillis = millis();Växla LED:ens läge
I det tidsstyrda blocket toggle:ar du helt enkelt LED:en. Den tänds om den var släckt och släcks om den var tänd, vilket ger en tydlig blinkning.
ledState = !ledState;
digitalWrite(ledPin, ledState);Loopen stannar aldrig
Mellan blinkningarna fortsätter loopen att köras i full hastighet och kan läsa av sensorer eller knappar. Ingenting fryser någonsin medan programmet väntar.
Subtraktion hanterar spill
Efter ungefär 49 dagar slår millis runt till noll, men subtraktionstricket ger fortfarande rätt skillnad. Därför fortsätter tidtagningen att fungera.
Ett återanvändbart mönster
Det här millis-mönstret fungerar för alla återkommande uppgifter, inte bara blinkningar. Ändra intervallet och åtgärden så kan du schemalägga vad som helst.
Snabb kontroll
Varför lagrar vi resultatet från millis i en unsigned long?
Sammanfattning
Du har lärt dig millis-mönstret: kom ihåg den senaste tidpunkten, kontrollera den förflutna tiden och agera sedan och nollställ. Nu blinkar kortet samtidigt som det hela tiden är redo att reagera. 🎉
Lär dig C++ med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Blinka utan delay med millis” gratis?
Ja – hela texten till ”Blinka utan delay med millis” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Arduino & IoT Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Arduino & IoT Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Blinka utan delay med millis”?
Håll reda på förfluten tid för att köra uppgifter enligt ett schema. Ni övar på Arduino & IoT Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Arduino & IoT Academy?
Du behöver inga förkunskaper. Utbildningen i Arduino & IoT Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Blinka utan delay med millis”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Arduino & IoT Academy-lektionen?
Ja. Varje Arduino & IoT Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- int, float, bool på Arduino
- Varför delay() blockerar allt
- Blinka utan delay med millis
- Kör två saker samtidigt