Hola a todos, quisiera pedir ayuda, tengo que hacer que un pulsador aumente un número en el monitor serial cada vez que es presionado y al llegar a 10 envíe un mensaje específico. El problema es que el circuito cuenta cuando solo he presionado el pulsador una sola vez, lo cual está mal. Les dejo el código (Soy novato en esto de programación con Arduino, agradecería si me explicaran que hicieron, eso me ayudaría a mejorar en mi rendimiento escolar).
Esto
estpuls = digitalRead(PULSADOR);
if(estpuls == 1){
No responde a cada vez cuando es presionado.
Esto al ser presionado incrementa x sin descanso.
Para lograr la consigna se debe mantener el estado anterior y observar el flanco del pulsador. Cuando presionas pasas de NO presionado a SI presionado o sea de falso a true o de 0 a 1
Eso traducido a código se hace así: tengo que poner todo el código porque agregaré una variable que llamaré estpulsAnt estado Pulsador Anterior
#define PULSADOR 2
int estpuls;
int estpulsAnt = 0;
int x;
void setup() {
pinMode(PULSADOR, INPUT);
Serial.begin(9600);
}
void loop() {
estpuls = digitalRead(PULSADOR);
if(estpuls == 1 && estpulsAnt = 0){
x++;
if(x <= 9){
Serial.println("Lleva " +String(x) +String(" intentos"));
delay(1000);
}else{
Serial.println("Ha alcanzado el limite de intentos");
delay(1000);
x = 0;
}
}
estpulsAnt = estpuls;
}
En lo personal me gusta usar esto
if(estpuls && !estpulsAnt){
antes que esto
if(estpuls == 1 && estpulsAnt = 0){
son lo mismo, pero la primera es una versión reducida.
Este formato de consulta (if) pregunta: cuando el pulsador pasa de 0 a 1 o sea en su flanco, entonces haz todo lo que esta adentro. A diferencia de cuando el pulsador esta presionado hazlo lo que permite que x se incremente sin parar.
Ahora con el flanco debes presionar y soltar y con cada presion abrá un avance.