Arduino: Programvara debouncing i avbryta funktion...
Så nyligen jag arbetade på ett projekt där jag ville meassure VARVTALET på ett av hjulen på min bil, och från det beräkna hastigheten, hålla reda på Driven avståndet etc. med en Arduino.
Jag ville använda en Magnet och en Reed Switch till meassure RPM, för att jag behövde till debouce signalen från Reed Switch, eftersom jag inte kunde hitta något sätt att debouce en signal i avbryta funktioner som inte kräver ytterligare maskinvara för debouncing signalen på Internet, här är hur jag debounced signalen från Reed Switch...
Programvara debouncing i avbrott, av Delphiño K.M.
lång debouncing_time = 15. Debouncing tid i millisekunder
flyktiga osignerade långa last_micros;
void setup() {
attachInterrupt (0, debounceInterrupt, RISING);
}
void loop() {
}
void debounceInterrupt() {
IF((Long)(Micros() - last_micros) > = debouncing_time * 1000) {
Interrupt();
last_micros = micros();
}
}
void Interrupt() {
Göra något
}
Du kan också "Göra något" i den huvudsakliga funktionen, istället för att ringa ett andra funktionen som sedan gör något, jag gillade bara det bättre på så sätt... Obs: Jag har bara provat detta på en Arduino Mega (ATmega1280), med Arduino 0022. Ja, det handlar om det, jag hoppas detta hjälper någon... PS Detta är min första Instructable, så om du inte har något kul att säga, inte säga något alls, fastän korrigeringar, förbättringar, etc. är naturligtvis alltid välkommen...
Också, detta är inte en perfekt lösning, avbryta funktionen är stil kallas flera gånger, de följande städerna samtal, i nästa 15 MS bara ignoreras, men hey, det gör jobbet, så skruva det!