Contador del 1 al 5

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;
}

This is the wrong forum section. We write in English here. Ask moderator to move Your post.

1 Like

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).

a=valorpush;

perdon, es mi primera publicacion.

si lo cambio como me dices, cuenta cada vez que presiono el boton y quiero que cuente automaticamente del 1 al 5 con solo 1 vez que presiono el boton.

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;}
  }

Hope this will work

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 :wink:

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.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.