hola! tengo que crear un contador el cual cuenta del 1 al 5 que inicie cuando presiono un pushbutton ya hice que contara del 1 al 5 pero se repite infinitamente este contador y quiero que cuando llegue al 5 y reinicie cuando presiono el pushbutton de nuevo
PD estoy usando el ESP32 y no la tarjeta de arduino por eso el boton esta declarado en ese pin
Este es el programa
int Boton = 34;
int valorpush = 0;
int conta = 0;
int a = 0;
void setup()
{
Serial.begin(9600); // Configura velocidad de transmisión a 9600
pinMode(Boton, INPUT); // se declara como entrada el 33
}
void loop()
{
valorpush = digitalRead(Boton); // lee el valor de la entrada digital pin 34
if(valorpush != a){
if(valorpush == 1){
conta++;
Serial.println(conta);
delay(500);
Serial.write(5);
if (conta == 5) {
conta = 0;
}
}
if (conta >= 5) {
conta+0;
}
}
a==valorpush;
}
Por favor, edita el post conforme a las normas. Elimina del titulo URGENTE! y pon el código entre las etiquetas code.
a==valorpush;
En esa línea, guardas el estado del boton ¿no? Falso. Lo que hace esta línea es comparar a con valorpush y nada mas. Debes cambiar la comparación por un igual (asignación).
int Boton = 34;
int valorpush = 0;
int conta = 0;
int a = 0;
int state=0;
void setup()
{
Serial.begin(9600); // Configura velocidad de transmisión a 9600
pinMode(Boton, INPUT); // se declara como entrada el 33
}
void loop()
{
valorpush = digitalRead(Boton); // lee el valor de la entrada digital pin 34
if(valorpush != a){
if(valorpush == 1 && state==0)
{
conta++;
Serial.println(conta);
delay(500);
Serial.write(5);
state=1;
if (conta == 5) {
conta = 0;
}
}
if (conta >= 5) {
conta=0;
}
}
if (valorpush == a){
state=0;}
}
En el código yo leo una variable a que no entiendo que función cumple porque siempre vale 0.
Tampoco el uso de state es relevante.
Esto hace lo mismo que lo que tu quieres sin tanta cosa.
int Boton = 34;
int valorpush = 0;
int valorpushAnt = 1;
int conta = 0;
void setup() {
Serial.begin(9600); // Configura velocidad de transmisión a 9600
Serial.println("Hola, arrancamos.");
pinMode(Boton, INPUT); // se declara como entrada el 33
}
void loop() {
valorpush = digitalRead(Boton); // lee el valor de la entrada digital pin 34
if (valorpush && !valorpushAnt) {
Serial.println(conta++);
delay(100);
//Serial.write(5);
if (conta >= 5) {
conta = 0;
}
}
valorpushAnt = valorpush;
}
@shaktibarbosa ies una manera dificil de hacer un trabajo simple
Prueba esto si te gusta:
int Boton = 34;
//int valorpush = 0;
int conta = 5;
//int a = 0;
void setup()
{
Serial.begin(9600); // Configura velocidad de transmisión a 9600
pinMode(Boton, INPUT); // se declara como entrada el 33
}
void loop()
{
//valorpush = digitalRead(Boton); // lee el valor de la entrada digital pin 34
if (digitalRead(Boton)) {
conta = 0;
Serial.println("Button pressed");
}
if (conta != 5) {
conta++;
Serial.println(conta);
delay(500);
}
}
Mi código del post#6 no sirve como el lo ha planteado.
Solo reacciona a las pulsaciones del boton pulsador y no que se autoincrementa hasta 5 esperando una nueva pulsación para reiniciar la cuenta.
Lo entendí mal.