int1 tecla_1,tecla_2,tecla_3;
void soltar(void)
{
if (input(pin_a3))tecla_1 = 0; ///chekeamos que la tecla se soltó.
if (input(pin_a4))tecla_2 = 0;
if (input(pin_a5))tecla_3 = 0;
}
.
.
.
.
soltar();
if((!input(pin_a3))&&(!tecla_1)) ////chekeamos si se pulso la tecla y si ha sido soltada
{
tecla_1 = 1; ///indicamos que se ha predionado la tecla
if (++cantidad>12)cantidad=1; /////hacemos lo que mande la tecla pulsada
}
if((!input(pin_a4))&&(!tecla_2))
{
tecla_2 = 1;
if (--cantidad<1)cantidad=12;
}
if((!input(pin_a5))&&(!tecla_3))
{
tecla_3 = 1;
write_eeprom(1,cantidad);
}
Tienes toda la razon nocturno, la idea del antirebote es esperar un tiempo y volver a comprobar si el estado del pin se ha estabilizado, a efectos practicos, mi opcion 'fuerza' la espera a la estabilizacion del pulsador, mientras que la opcion del retraso y despues comprobar(antirebotes de toda la vida) puede que no sea eficaz el tiempo de espera...eso si, hay un inconveniente de la forma que yo propongo, y es el siguiente: imaginemos que queremos incrementar una variable cada vez que se pulse un boton, y en caso de tener el boton pulsado que se vaya incrementando igualmente, la forma que yo propongo no vale para este tipos de ejercicios ya que dicha forma interpretaria un incremento cada vez que se suelte el pulsador......
PD: A efectos practicos, y si no se tiene el inconveniente que he comentado, recomiendo la forma que esta expuesta.
Suerte!!! :wink: