Arduino & IoT Academy · Lektion

Räkna pulser från en encoder

Räkna snabba flankväxlingar utan att missa någon.

Lektion 4 av 413 steg

Räkna pulser från en encoder är en gratis lektion i Arduino & IoT Academy på CoddyKit. Detta är lektion 4 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 hjul av pulser

En roterande encoder skickar en snabb ström av elektriska pulser när den snurrar. Räkna pulserna så vet ni hur långt den har vridits.

För snabbt för polling

Snurra en encoder snabbt, så passerar pulserna på mikrosekunder. En vanlig loop som läser av stiftet skulle missa många av dem.

Interrupt till undsättning

Det här är ett perfekt jobb för ett interrupt. Hårdvaran fångar varje flank åt er, så ingen puls passerar obemärkt. ⚡

En volatile-räknare

Skapa en volatile-räknare som ISR:n kan öka. Om den markeras som volatile läser loopen alltid det aktuella totalvärdet.

volatile long pulseCount = 0;

Anslut interruptet

I setup anger ni encoderstiftet för attachInterrupt och väljer RISING, så att varje puls anropar räknarens hanterare.

attachInterrupt(digitalPinToInterrupt(2), countPulse, RISING);

En liten ISR

Hela handler-funktionen gör en enda sak: ökar räknaren med ett. Kort och snabb, precis som en bra ISR ska vara.

void countPulse() {
  pulseCount++;
}

Läs utan att värdet slits sönder

När ni kopierar count i loopen ska ni tillfälligt pausa interrupt, så att ISR:n inte kan ändra värdet mitt under läsningen och lämna ett ofullständigt värde.

noInterrupts();
long c = pulseCount;
interrupts();

Använd räknarvärdet

Nu kan loop skriva ut totalen, beräkna hastigheten eller reagera, samtidigt som ISR:n fortsätter att räkna nya pulser i bakgrunden.

Serial.println(c);

Från pulser till rotation

Varje encoder har ett fast antal pulser per varv. Dividera count med det antalet för att ta reda på hur många hela varv som har genomförts.

Mäta hastighet

Räkna pulser under ett känt tidsintervall i loopen, så kan ni omvandla frekvensen till speed eller RPM för en motor eller ett hjul.

Återställ vid behov

För att starta en ny mätning sätter ni counter till noll igen och pausar interrupt tillfälligt, så att ni inte missar en puls som kommer just då.

noInterrupts();
pulseCount = 0;
interrupts();

Snabb kontroll

Varför pausar vi interrupt tillfälligt när vi läser pulsräknaren i loopen?

Sammanfattning

Ni har byggt en pulsräknare: ett volatile-totalvärde, en liten ISR och säkra läsningar i loopen. Nu kan ni mäta rotation och hastighet tillförlitligt. 🎉

Gratis att börja

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 ”Räkna pulser från en encoder” gratis?

Ja – hela texten till ”Räkna pulser från en encoder” 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 ”Räkna pulser från en encoder”?

Räkna snabba flankväxlingar utan att missa någon. 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 4 av 4.

Hur lång tid tar lektionen ”Räkna pulser från en encoder”?

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

  1. Avläsning eller avbrott
  2. attachInterrupt på en pinne
  3. Skriv en säker ISR
  4. Räkna pulser från en encoder
← Tillbaka till Arduino & IoT Academy