Go Down

Topic: cronometro glcd (Read 402 times) previous topic - next topic

harian

hola a todos
estoy haciendo un proyecto para una partida de airsoft el cual hay un maletin con una cuenta atras
la mision es que antes de que llegue a cero el maletin tiene que estar en un punto establecido
tengo escrito el codigo de cuenta atras pero quiero añadirle algunos elementos
con un potenciometro en el pin analogico 5 modificar los minutos
con un pulsador en el pin 12 iniciar o parar la cuenta atras
espero vuestra ayuda gracias







CUENTA_ATRAS.ino

#include "glcd.h"
#include "fonts/allFonts.h"
#include "fonts/CalLite24.h"
void setup() {
   GLCD.Init();
}

void loop()
{
int  hour=45, minute=0, second=0;
int counter = 0;;
while(-1){

   
   GLCD.CursorToXY(0,0);
   GLCD.SelectFont(fixednums15x31);
   GLCD.Printf_P(PSTR("%02d:%02d:%02d"),  hour, minute, second);
        GLCD.DefineArea(textAreaTOP);
   GLCD.SelectFont(CalLite24); 
        GLCD.CursorToXY( 20,32);
   GLCD.print("ARMADO");
               
static unsigned long lastTick = 0;


  if (second > 0) {
      if (millis() - lastTick >= 10) {
          lastTick = millis();
          second--;

      }
  }


  if (minute > 0) {
      if (second <= 0) {
          minute--;
          second = 60; // reset seconds to 60
      }
  }


  if (hour > 0) {
      if (minute <= 0) {
          hour--;
          minute = 60; // reset minutes to 60
         
      }
  }



   }
}

UndercoverNerd

Hola.
Respecto a lo del potenciómetro, primero tienes que declarar la variable donde se va a guardar la lectura lectura=analogRead(pin);
Luego yo lo "mapearía" con la función map para reclasificar sus valores (no sé cuál es el término técnico)
y una vez lo tengas, guardarlo en la variable tiempo.
Al girar el potenciómetro la variable tiempo cambiará en función de la lectura.

En cuanto al pulsador, bastará con una variable boolean.
Algo así como:
contador=digitalRead(pin 5)
si contador==true -> pones ahí tu código de cuenta atrás
else-> no haces nada, print("pulsa para iniciar")

Ojo, es importante que para el pulsador hagas el "cambio de estado" porque si no solo funcionaría cuando estuviera pulsado.

http://www.ardumania.es/cambio-de-estado-de-un-pulsador/

Espero te hayan servido las indicaciones. Un saludo

harian

gracias por la ayuda ya lo consegui
ahora estoy intentando poner que cuando el tiempo llegue a cero muestre el mensaje " DETONADED"
pero no lo consigo

#include "glcd.h"
#include "fonts/allFonts.h"
#include "fonts/CalLite24.h"

int inPin = 2;   

int hour;
int  minute=0;
int   second=0;

int val = analogRead(5);
void setup() {
   GLCD.Init(NON_INVERTED);

pinMode(digitalRead(2), INPUT);

}
void loop(){
int val = analogRead(5);
  val = map(val, 0, 1023, 0, 59);
  GLCD.println ((long)val);
 
GLCD.SelectFont(CalLite24);
   GLCD.CursorToXY(14,18);               
    GLCD.Puts("TIME "); 
if(val < 10)
    GLCD.print('0');
         
    if (digitalRead(2)==HIGH) {
    hour=val;
  }
  val = digitalRead(2); 
  if (val == LOW) {         
           
}  else {
   
    GLCD.ClearScreen();
//    delay(1000); 
    GLCD.CursorToXY(22,18);               
    GLCD.Puts("READY");   
    delay(2000);
    GLCD.ClearScreen();
int counter = 0;;
while(-1){

   
   GLCD.CursorToXY(0,0);
   GLCD.SelectFont(fixednums15x31);
   GLCD.Printf_P(PSTR("%02d:%02d:%02d"),  hour, minute, second);
        GLCD.DefineArea(textAreaTOP);
   GLCD.SelectFont(CalLite24); 
        GLCD.CursorToXY( 20,32);
   GLCD.print("ARMED");
           
static unsigned long lastTick = 0;


  if (second > 0) {
      if (millis() - lastTick >= 10) {
          lastTick = millis();
          second--;

      }
  }


  if (minute > 0) {
      if (second <= 0) {
          minute--;
          second = 60; // reset seconds to 60
      }
  }


  if (hour > 0) {
      if (minute <= 0) {
          hour--;
          minute = 60; // reset minutes to 60

     }
  }

}
  }
   
}

Go Up