Ainsi, récemment j’ai travaillait sur un projet où j’ai voulu Messure la vitesse de rotation d’une des roues sur ma voiture, et de celle de la calculer la vitesse, garder une trace de la distance Driven etc. avec un Arduino.
Je voulais utiliser un aimant et un interrupteur Reed à Messure les tr/min, pour que i nécessaire pour debouce le Signal provenant de l’interrupteur Reed, puisque je ne pouvais pas trouver un moyen de debouce un signal dans les fonctions de l’interruption qui n’a pas nécessiter du matériel supplémentaire pour debouncing le signal sur l’Internet, voici comment j’ai debounced le Signal provenant de l’interrupteur Reed...
Logiciel debouncing dans l’interruption, par K.M. Delphiño
debouncing_time long = 15 ; Antirebonds temps en millisecondes
volatils last_micros long non signé ;
void setup() {}
attachInterrupt (0, debounceInterrupt, RISING) ;
}
void loop() {}
}
void debounceInterrupt() {}
if((long)(micros() - last_micros) > = debouncing_time * 1000) {}
Interrupt() ;
last_micros = micros() ;
}
}
void Interrupt() {}
Faire quelque chose
}
Vous pourriez également « Faire quelque chose » dans la fonction principale, au lieu d’appeler une seconde fonction qui ensuite fait quelque chose, j’ai juste aimé mieux de cette façon... Remarque : J’ai seulement essayé ceci sur un Arduino Mega (ATmega1280), avec Arduino 0022. Eh bien, c’est à ce sujet, j’espère que cela aide quelqu'un... P.S. C’est mon premier Instructable, donc si vous n’avez rien de gentil à dire, ne dis rien du tout, bien que corrections, améliorations, etc. sont bien sûr toujours bienvenue...
Aussi, ce n’est pas une solution parfaite, la fonction d’interruption est stil appelé à plusieurs reprises, les appels suivants, dans le prochain 15ms sont tout simplement ignorés, mais bon, il fait le travail, donc le visser !