Soy bastante nuevo en la programación de AVR (avr-gcc).
Para reaccionar al presionar un botón, estoy usando un PCINT ISR con la resistencia de pull-up interna habilitada de esta manera:
ISR(PCINT0_vect) {
if (bit_is_clear(PINB, PB0)) {
_delay_ms(40);
if (bit_is_clear(PINB, PB0)) {
// do something
}
}
}
Funciona bien, pero creo que no es particularmente inteligente gastar 40 milisegundos en un ISR solo para rebotar un botón.
El interruptor sin anular debe conectarse a un pin de E / S programado, nunca a una interrupción.
¿Entonces mi enfoque para conectar el botón a un PCINT ya es incorrecto? Todavía no me he puesto cerca de los temporizadores, pero ¿debería utilizar algún tipo de interrupción temporizada para evaluar el estado del botón cada 1 ms o menos en lugar de que el botón active una interrupción directamente?
Puedo vivir con mi debouncing no siendo muy inteligente por ahora, pero al menos quiero obtener lo básico de reaccionar con un botón presionando a la derecha.