Proper debouncing and dechattering
Move debouncing and dechattering to the beginning of the interrupt service routines to handle them properly.
This commit is contained in:
parent
3aa458c4bc
commit
c0f8cac065
1 changed files with 6 additions and 6 deletions
|
@ -691,6 +691,9 @@ static void update_state(const enum input event) {
|
||||||
ISR(PCINT0_vect) {
|
ISR(PCINT0_vect) {
|
||||||
cli();
|
cli();
|
||||||
|
|
||||||
|
// Dechatter
|
||||||
|
_delay_ms(3);
|
||||||
|
|
||||||
switch (enc) {
|
switch (enc) {
|
||||||
case 0:
|
case 0:
|
||||||
if (ENC_A && !ENC_B)
|
if (ENC_A && !ENC_B)
|
||||||
|
@ -724,9 +727,6 @@ ISR(PCINT0_vect) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: proper dechattering
|
|
||||||
_delay_ms(3);
|
|
||||||
|
|
||||||
sei();
|
sei();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -734,6 +734,9 @@ ISR(PCINT0_vect) {
|
||||||
ISR(PCINT1_vect) {
|
ISR(PCINT1_vect) {
|
||||||
cli();
|
cli();
|
||||||
|
|
||||||
|
// Debounce
|
||||||
|
_delay_ms(2);
|
||||||
|
|
||||||
if (PINC & (1 << PC0)) { // Release
|
if (PINC & (1 << PC0)) { // Release
|
||||||
if (TCCR1B & (1 << CS10)) // If release before hold
|
if (TCCR1B & (1 << CS10)) // If release before hold
|
||||||
update_state(click); // Switch to selected state
|
update_state(click); // Switch to selected state
|
||||||
|
@ -745,9 +748,6 @@ ISR(PCINT1_vect) {
|
||||||
TCCR1B |= (1 << CS11) | (1 << CS10); // Enable Timer/Counter1
|
TCCR1B |= (1 << CS11) | (1 << CS10); // Enable Timer/Counter1
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Proper debouncing
|
|
||||||
_delay_ms(3);
|
|
||||||
|
|
||||||
sei();
|
sei();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue