Varför delay() blockerar allt
Se hur en paus hindrar kortet från att reagera.
Varför delay() blockerar allt är en gratis lektion i Arduino & IoT Academy på CoddyKit. Detta är lektion 2 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.
Den enkla pausen
Funktionen delay pausar ditt program under ett angivet antal millisekunder. Det är det enklaste sättet att sakta ned saker och göra en blinkning synlig.
delay(1000);Vad 1000 betyder
delay(1000) väntar en hel sekund eftersom värdet anges i millisekunder. Därför är delay(500) en halv sekund och delay(2000) två sekunder.
Det fryser kortet
Nackdelen är att delay fryser allt. Medan programmet väntar gör kortet ingenting annat alls, ungefär som en person som håller andan. 😮
Missade knapptryckningar
Under en delay kan kortet inte upptäcka knapptryckningar. Trycker du mitt i pausen ignoreras tryckningen helt, vilket känns trasigt för användaren.
Se problemet
Här ligger en ensekunds-delay mellan avläsningarna. Därför går alla tryckningar under den sekunden förlorade innan nästa avläsning sker.
digitalRead(buttonPin);
delay(1000);Bara en uppgift åt gången
Eftersom delay blockerar kan du inte blinka en LED och läsa av en sensor samtidigt. Hela programmet väntar som en enda uppgift.
Flera pauser läggs ihop
Två delay-anrop efter varandra läggs helt enkelt ihop. Sprider du ut flera sådana tillbringar kortet större delen av tiden fruset och utan respons.
Bra för enkla program
delay är inte ondskefullt. För en enda blinkande LED utan något annat som pågår är det tydligt och helt okej att använda.
Det verkliga målet
Det verkliga målet är ett icke-blockerande program som fortsätter reagera samtidigt som det håller reda på när händelser ska ske. Det innebär att aldrig frysa loopen med en lång paus.
Tänk på tid i stället
I stället för att pausa kan du fråga hur mycket tid som har gått och agera först när tillräckligt lång tid har passerat. Under tiden fortsätter loopen att köras.
Ett bättre verktyg kommer
Snart får du träffa millis, en klocka som låter dig mäta förfluten tid utan att frysa programmet. Det är så riktiga projekt förblir responsiva.
Snabb kontroll
Vad är den största nackdelen med att använda delay i ett program?
Sammanfattning
Du såg att delay är enkelt men fryser kortet, gör att indata missas och blockerar andra uppgifter. Nästa steg är att tidsstyra händelser utan att stoppa loopen. ✨
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 ”Varför delay() blockerar allt” gratis?
Ja – hela texten till ”Varför delay() blockerar allt” 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 ”Varför delay() blockerar allt”?
Se hur en paus hindrar kortet från att reagera. 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 2 av 4.
Hur lång tid tar lektionen ”Varför delay() blockerar allt”?
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