martes, 5 de septiembre de 2017

Temporizador 1 a 9999 segundos con Arduino y TM1638

Página principal


Arduino
TM1638
Temporizador 1 a 9999 segundos
xsetaseta@gmail.com

Siguiendo con el módulo que empleaba el CHIP TM1638, ahora hago un temporizador de 1 a 9999 segundos.
Es un contador que va desde el numero de segundos prefijado en los cuatro primeros  displays hasta cero.
El numero de segundos es fijado con los 4 primeros pulsadores.
Cuando queramos que se inicie la cuenta atrás pulsaremos el botón S8.
Si queremos detener la cuenta atrás deberemos pulsar el botón S5.
Cuando el contador llegue a cero, parpadeará el display y se activará el pin D13 del arduino.
También he colocado un altavoz piezoeléctrico en el pin D12 del arduino a modo de aviso, esto es accesorio. Si queremos colocar otro tipo de altavoz deberéis colocar una resistencia en serie.

Esquema de conexión.


Montaje del circuito.

/*
xsetaseta@gmail.com
Juan Galaz
5/SEP/2017
*/

#include <TM1638.h>
// define a module on data pin 8, clock pin 9 and strobe pin 7
TM1638 module(8, 9, 7);


byte display[8];
char cadena[20];
int alarma,contador,time1;

#define MILED 13
#define PIN_SOUND 12
#define RETRASO 597

char fcontador;

void setup() 
{
  pinMode(MILED, OUTPUT);
  pinMode(PIN_SOUND, OUTPUT);
  digitalWrite(MILED, LOW);
  module.setupDisplay(1,0);
  module.setDisplayToString("TIMER  ",0,0);
  delay(500);
  
  module.setDisplayToString("0060----",0,0);
  display[2]=6; 
  alarma=60;
}

void loop() 
{
  byte keys;
  int z;
  
  keys = module.getButtons();
  
  switch(keys)
  {
   case 1:
      if(fcontador==0)
        {display[0]++; if(display[0]>9) display[0]=0;}
   break; 
   case 2:
      if(fcontador==0)
        {display[1]++; if(display[1]>9) display[1]=0;}
   break; 
   case 4:
      if(fcontador==0)
        {display[2]++; if(display[2]>9) display[2]=0;}
   break; 
   case 8:
      if(fcontador==0)
        {display[3]++; if(display[3]>9) display[3]=0;}
   break; 
   
   case 16:
     fcontador=0;
     contador=alarma;
     digitalWrite(MILED, LOW);
     module.setLEDs(16);
   break; 
   
   case 128:
     fcontador=1;
     contador=alarma;
     time1=RETRASO;
     digitalWrite(MILED, LOW);
     module.setLEDs(128);
   break; 
    
  }
  if(fcontador==0 && keys>0)
    {
     alarma=display[0]*1000+display[1]*100+display[2]*10+display[3];
     sprintf(cadena,"%04d%04d",alarma,contador);
     module.setDisplayToString(cadena,0,0);
     delay(300);
    }
    
    time1--;
    if(fcontador==1 && time1<=0)
      {
        module.setLEDs(0);
        time1=RETRASO;
        contador--;
        sprintf(cadena,"%04d%04d",alarma,contador);
        module.setDisplayToString(cadena,0,0);
        
        if(contador<1)
          {
            fcontador=0;
            for(z=0;z<10;z++)
              {
                sprintf(cadena,"%04d0000",alarma);
                module.setDisplayToString(cadena,0,0);
                delay(200);
                sprintf(cadena,"%04d    ",alarma);
                module.setDisplayToString(cadena,0,0);
                delay(200);                
              }
             sprintf(cadena,"%04d----",alarma);
             module.setDisplayToString(cadena,0,0);
             digitalWrite(MILED,HIGH);             
             for(z=0;z<300;z++)
               {
                 digitalWrite(PIN_SOUND, HIGH);
                 delay(1);
                 digitalWrite(PIN_SOUND, LOW);
                 delay(1); 
               }          
          }
      }
    
  delay(1);
}



VIDEO DE FUNCIONAMIENTO





Hasta pronto.
JUAN GALAZ

Bibliografía:
https://github.com/rjbatista/tm1638-library


No hay comentarios:

Publicar un comentario