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