Tengo este codigo para leer un pulsador y de acuerdo a cuantas veces se "pulso" muestra un menú..el tema es que no logro entender porque no funciona.
Tambien cdo miro por la consola el serial.print(numeropulsaciones) todo el tiempo muestra un "1" sin ni siquiera presionar el pulsador. El pulsador está conectado con una resistencia 4k7 a masa (pull-down).
int boton = 22; /Mega
int espera = 200;
int tiempo = 0;
int numeropulsaciones;
void setup(){
pinMode(boton,INPUT);
}
void loop(){
if ((digitalRead(boton) == HIGH)&& (millis()-tiempo >espera))
{
numeropulsaciones ++;
Serial.println(numeropulsaciones);
}
if (numeropulsaciones == 3)
numeropulsaciones = 0;
switch (numeropulsaciones)
{
case 1:
tft.print("menu 1");
break;
case 2:
tft.print("menu 2");
break;
case 3:
tiempo = millis();
}
delay(100);
}
Una pregunta tonta: que quiere decir que el pulsador está conectado a masa con la resistencia? La resistencia debe ir del pin de entrada a masa y luego del pin al pulsador y este a VCC.
Luego tiempo solo lo cambias en el case 3. No sé si es eso lo que pretendes o se te ha escapado algo.
Hola, quiero aclarar que no tengo problemas con la conexion de los componentes, solo pregunto por la programacion que en este caso no me esta funcionando.
Por las dudas subi una foto aca donde sale la configuracion "pullDown" que estoy utilizando.
Bueno ayer escribí una respuesta y estaba modificando tu código
Te lo resumo porque no tengo tiempo de hacerlo de nuevo.
Lo que veo es que tiempo arranca en 0, por lo tanto tu primer ciclo de pulsaciones es inmediato, 3 loops en pocos 200 mseg ya que tiempo es 0 entonces
millis()-tiempo= millis() y siempre será mayor que espera que es 200.
Luego llegas poner tiempo = millis()
pero tu dices que queda siempre en 1, lo que hace pensar que ese delay(100) de algun modo conspira con tu código.
Retiralo ya que se supone que la demora la debe generar millis()-tiempo y no delay(100)