Go Down

Topic: lcd problemas con cronometro (Read 349 times) previous topic - next topic

jonabariloche

Bueno espero que sepan disculpar mis dudas soy super novato y me estoy leyendo medio google y libros, pero tengo este problema, mi proyecto es el siguiente:
Estoy intentando mediante pulsadores en mi caso 10, que cada vez que opriman ej:
Pulsador 1: se prenda el LED, un BIP de BUZZER y se imprima el en la pantalla lcd hasta ahi todo bien, pero pensé, por que no imprimir un cronometro y un contador  para saber la cantidad de veces que se presiona y hace cuanto.
Pero resulta que al presionar el cronometro se queda en cero y cuando se vuelve a presionar imprime los segundos pasados. Luego cuando presiono el boton predefinido como reset el cronometro no vuelve a cero.

Espero que se entienda y puedan ayudarme.

Code: [Select]
void loop() {
  //Leer estado del boton
  a = digitalRead(VIP1);
  if ( a == HIGH) {
    digitalWrite(LED, HIGH);
    lcd.init();
    lcd.setCursor (0, 0);
    lcd.print ("VIP. 1");

    digitalWrite(BUZZER, HIGH);
    delay(200);
    digitalWrite(BUZZER, LOW);
    delay(200);
    contador = contador + 1;


    tiempo = millis();
    //tiempos a mostrador
    minut = (tiempo / 60000);
    seg = ((tiempo / 1000) - (minut * 60));


    lcd.setCursor(13, 1);
    lcd.print(":");

    lcd.setCursor (11, 1);
    if (minut < 10) {
      lcd.print ("0");
    }
    lcd.print (minut);
    lcd.setCursor (14, 1);
    if (seg < 10) {
      lcd.print ("0");
    }
    lcd.print (seg);
    lcd.setCursor (4, 1);
    lcd.print(contador);
    lcd.setCursor (2, 1);
    lcd.print("C:");
  
  }

  //RESET
  if (digitalRead(RESET) == HIGH) {
    digitalWrite (LED, LOW);
    delay(20);
    lcd.init();
    lcd.setCursor (0, 0);
    lcd.print (va2);
    tiempo = 0;
    tiempo2 = 0;
    minut = 0;
    seg = 0;
    contador = 0;
    tiempo2 = millis();


  }
}

 

surbyte

Hola jonabariloche, bienvenido al foro Arduino.

Me gustaría que edites tu código y que pongas lo que falta, librerías, variables globales y setup para asi disponer nosotros de todo el código y no de una parte.

Con lo que has mostrado esto es lo que te sugiero.

Code: [Select]

// como variables globales define

bool a, a_ant = false;
bool b, b_ant = false;
void loop() {

  //Leer estado del boton
  a = digitalRead(VIP1);
  if (a && !a_ant) {
      digitalWrite(LED, HIGH);
      lcd.init();
      lcd.setCursor (0, 0);
      lcd.print ("VIP. 1");

      digitalWrite(BUZZER, HIGH);
      delay(200);
      digitalWrite(BUZZER, LOW);
      delay(200);   // aca se pierden 400 mseg minimo
      contador = contador + 1;   
     
      //tiempos a mostrador
      char buffer[20];
      seg = (millis() - tiempo)/1000;
      sprintf(buffer, "C: %02d %02d:%02d", contador, seg / 60, seg%60);
      lcd.setCursor (4, 1);
      lcd.print (buffer);
     
      tiempo = millis();
  }
  a_ant = a;

  //RESET
  b = digitalRead(RESET);
  if (b && !b_ant) {

      digitalWrite (LED, LOW);
      delay(20);
   
      lcd.setCursor (0, 0);
      lcd.print (va2);
      tiempo   = 0;
      tiempo2  = 0;
      contador = 0;
      tiempo2  = millis();  // para que sirve tiempo2?
  }
  b_ant = b;
}



Kike_GL

Saludos, Kike_GL

jonabariloche

Hola, Gracias a todos por responder pude, realizar el proyecto haciendo uso de la funcion millis, logre hacer un contador de inversa a medida que llamaban las habitaciones, un contador general y costo muchisimo ya que no sabia nada de programacion pero lei muchisimo, ahora mi proximo paso es actualizarlo, poniendo una habitacion mediante modulo Rf para no cablear. Desde ya muchisimas gracias...

PistonHead2k

Hola, Buen Dia

Fijate que el codigo lo has pegado a medias ya que falta la parte por encima del void loop en la cual declaras las variables publicas y ademas defines Librerias.

Luego mire el codigo y tienes un drama con la funcion milis().
 :smiley-confuse:

Que te valla bien con el codigo adios.  :)

Go Up