Go Down

Topic: DS1307 Real time clock Datalogger (Read 2 times) previous topic - next topic

peko86

/*Desarrollado a partir de Datalogger de la libreria SD, Keypad, LCD5110 Graph  y del script de 18B20*/

#include <SD.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LCD5110_Graph.h>
#include <Keypad.h>

//--------------DS1307--------
#include "Wire.h"
#include "RTClib.h"//Para poder obtener adecuadamente UNIXtime
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527

RTC_DS1307 RTC;//Va acorde a RTClib.h

unsigned long s;//Segundos reloj
unsigned long mi;//Minutos reloj
unsigned long h;//Horas reloj
unsigned long ds;//Dia semana reloj
unsigned long dm;//Dia mes reloj
unsigned long me;//Mes reloj
unsigned long a;//A?o reloj


char fechahora='0';//A-Correctos/B-Incorrectos
//------------------------------



//Keypad
const byte ROWS = 4; //cuatro filas
const byte COLS = 4; //cuatro columnas

char keys[ROWS][COLS] = {
  {'1','2','3','A'},
   {'4','5','6','B'},
   {'7','8','9','C'},
   {'*','0','#','D'}
   };
byte rowPins[ROWS] = {6,7,8,9};
byte colPins[COLS] = {2,3,4,5};

//Dataloger Refresh Rate
unsigned long lastReadTime=0;
unsigned long refresh_rate = 0;
unsigned long currentTime=0;
unsigned long num = 0;
unsigned long numQ = 0;//Funcion de sensores de caudal (Definicion)
unsigned long t=0;
unsigned long numSensoresQ=0;
unsigned long numSensoresT=0;

char menu='0';
char menu1='A';
char menu2='A';
char menu3='A';
char menu4='A';
char menu5='A';
char menulog='A';
int pantallazo=0;

char unidad='0';

int numero=0;


int w = 0;       //Contador DS18B20



Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

//LCD
LCD5110 myGLCD(45,46,47,48,49);
extern uint8_t unican[];
extern uint8_t helice[];
extern uint8_t helice2[];
extern uint8_t helice3[];
extern uint8_t flecha[];
extern uint8_t borraflecha[];

extern uint8_t SmallFont[];

uint8_t* bm;


//Define puerto 18B20s
#define ONE_WIRE_BUS 11
#define TEMPERATURE_PRECISION  12 //resoluci?n de los sensores en bits


OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

//SPI SD Card Pins
//MOSI = Pin 11
//MISO = Pin 12
//SCLK = PIN 13
int CS_pin = 43;
int pow_pin = 8;



void setup()
{
 
  Serial.begin(9600);

Wire.begin(); //Wire---DS1307 RTC

RTC.begin();

  sensors.begin();//Inicializa sensores 18B20
  int numSensoresT = sensors.getDeviceCount();        // Numero de sensores 
  int temparray[numSensoresT];            // Array que almacena un array con el numero de sensores

 

 
  //--------------------------------------------------------LCD--------------------------------------------------------------------
    myGLCD.InitLCD();
  myGLCD.setFont(SmallFont);
 
    myGLCD.clrScr();
  myGLCD.drawBitmap(0, 0, unican, 84, 48);
  myGLCD.update();

  delay(2000);
   
 
  myGLCD.clrScr();
  myGLCD.drawBitmap(0, 0, helice, 84, 48);
  myGLCD.update();
   delay(250);
   
     myGLCD.clrScr();
  myGLCD.drawBitmap(0, 0, helice2, 84, 48);
  myGLCD.update();
   delay(250);
   
     myGLCD.clrScr();
  myGLCD.drawBitmap(0, 0, helice3, 84, 48);
  myGLCD.update();
   delay(250);

peko86

//Inicializa SD
       
                           myGLCD.clrScr();
                           myGLCD.print("Inicializando",CENTER, 10);
                           myGLCD.print("Tarjeta SD",CENTER, 20);
                           myGLCD.update();
                           delay(1500);
                                   
                                   
                          //CS Pin Salida
                          pinMode(CS_pin, OUTPUT);
                       
                          //SD toma tension del pin 8, por lo q es HIGH
                          pinMode(pow_pin, OUTPUT); 
                          digitalWrite(pow_pin, HIGH);
                       
                          //inicializa tarjeta SD
                          if (!SD.begin(CS_pin))
                          {
                            myGLCD.clrScr();
                             myGLCD.print("Fallo de SD",CENTER, 10);
                              myGLCD.update();
                                   delay(1500);
                       
                          }
                          else
                          {
                          myGLCD.clrScr();
                          myGLCD.print("Tarjeta SD",CENTER, 10);
                           myGLCD.print("lista",CENTER, 20);
                              myGLCD.update();
                                  delay(1500);
                          }
 

}



unsigned long Defineletra(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            menu=key;
            break;
           
           case 'B':
            menu=key;
            break;
           
           case 'C':
            menu=key;
             menulog='A';
             pantallazo =0;
            break;
           
           
            delay(1000);
      }
      key = kpd.getKey();
      }
      return menu;

}


//Definicion unidades II
unsigned long Defineletra1(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            menu1=key;
            break;
           
           case 'B':
            menu1=key;
            break;
           
           case 'C':
            menu1=key;
            break;
           
            case '0':
            menu1=key;
            menu='0';
            break;
           
            delay(1000);
      }
      key = kpd.getKey();
      }
      return menu1;

}


  //Definicion unidades II
unsigned long Defineletra2(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            menu2=key;
            break;
           
           case 'B':
            menu2=key;
            break;
           
           case '0':
            menu2=key;
            menu='0';
            break;
           
            delay(1000);
      }
      key = kpd.getKey();
      }
      return menu2;

}



  //Definicion unidades II
unsigned long Defineletra3(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            menu3=key;
            fechahora='0'; //Para que siempre aparezca la hora en este menu
            break;
           
           case 'B':
            menu3=key;
            break;
           
           case '0':
            menu3=key;
            menu ='A';
            break;
           
           
            delay(1000);
      }
      key = kpd.getKey();
      }
      return menu3;

}


  //Definicion unidades II
unsigned long Defineletra4(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            menu4=key;
            break;
           
           case 'B':
            menu4=key;
            break;
           
           case '0':
            menu4=key;
            menu ='A';
            break;
           
            delay(1000);
      }
      key = kpd.getKey();
      }
      return menu4;

}


  //Definicion unidades II
unsigned long Defineletra5(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            menu5=key;
            break;
           
           case 'B':
            menu5=key;
            break;
           
           case 'C':
            menu5=key;
            break;
           
            case 'D':
            menu5=key;
            break;
           
            delay(1000);
      }
      key = kpd.getKey();
      }
      return menu5;

}

peko86

//Definicion unidades II
unsigned long Defineletra7(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            myGLCD.drawBitmap(62, 30, borraflecha, 8, 8);//Borra flecha en B
            myGLCD.drawBitmap(66, 40, borraflecha, 8, 8);//Borra flecha C
            myGLCD.drawBitmap(52, 20, flecha, 8, 8);//Dibuja flecha A
            myGLCD.update();
           
            t=3600;
            break;
           
           case 'B':
            myGLCD.drawBitmap(52, 20, borraflecha, 8, 8);//Borra flecha A
            myGLCD.drawBitmap(66, 40, borraflecha, 8, 8);//Borra flecha C
            myGLCD.drawBitmap(62, 30, flecha, 8, 8);//Dibuja flecha en B
            myGLCD.update();
           
            t=60;
            break;
           
           case 'C':
           myGLCD.drawBitmap(52, 20, borraflecha, 8, 8);//Borra flecha A
           myGLCD.drawBitmap(62, 30, borraflecha, 8, 8);//Borra flecha en B
           myGLCD.drawBitmap(66, 40, flecha, 8, 8);//Dibuja flecha C
           myGLCD.update();
           
            t=1;
            break;
           
                       
            delay(1000);
      }
      key = kpd.getKey();
      }
      return t;
     

}






//numero unidades II
unsigned long Definenumero()
{
   unsigned long num = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            num = num * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(num, 0, 30);
            myGLCD.update();
                         
            break;

         case '*':
            num = 0;
           
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return num;
}



//numero sensores de Caudal
unsigned long DefinenumeroQ()
{
   unsigned long numQ = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            numQ = numQ * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(numQ, 0, 40);
            myGLCD.update();
                         
            break;

         case '*':
            numQ = 0;
           
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return numQ;
}





//DEfine fecha y hora
unsigned long Definediasemana()
{
   unsigned long ds = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            ds = ds * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(ds, 0, 40);
            myGLCD.update();
                         
            break;

         case '*':
            ds = 0;
           
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return ds;
}


//DEfine fecha y hora
unsigned long Definediames()
{
   unsigned long dm = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            dm = dm * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(dm, 0, 40);
            myGLCD.update();
                         
            break;

         case '*':
            dm = 0;
           
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return dm;
}


//DEfine fecha y hora
unsigned long Definemes()
{
   unsigned long me = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            me = me * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(me, 0, 40);
            myGLCD.update();
                         
            break;

         case '*':
            me = 0;
           
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return me;
}


//DEfine fecha y hora
unsigned long Defineano()
{
   unsigned long a = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            a = a * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(a, 0, 40);
            myGLCD.update();
                         
            break;

         case '*':
            a = 0;
           
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return a;
}

peko86

//DEfine fecha y hora
unsigned long Definehora()
{
   unsigned long h = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            h = h * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(h, 0, 40);
            myGLCD.update();
                         
            break;

         case '*':
            h = 0;
           
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return h;
}


//DEfine fecha y hora
unsigned long Defineminutos()
{
   unsigned long mi = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            mi = mi * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(mi, 0, 40);
            myGLCD.update();
                         
            break;

         case '*':
            mi = 0;
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return mi;
}


//DEfine fecha y hora
unsigned long Definesegundos()
{
   unsigned long s = 0;
   char key = kpd.getKey();
   
   while(key != '#')
    {
       
      switch (key)
      {
         case NO_KEY:
            break;

         case '0': case '1': case '2': case '3': case '4':
         case '5': case '6': case '7': case '8': case '9':
       
            s = s * 10 + (key - '0');
             
         
           
            myGLCD.printNumI(s, 0, 40);
            myGLCD.update();
                         
            break;

         case '*':
           s = 0;
            myGLCD.update();
            break;
      }

      key = kpd.getKey();
     
   }

   return s;
}



  //Definicion unidades II
unsigned long Definefechahora(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            fechahora=key;
            break;
           
           case 'B':
            fechahora=key;
            break;
           
           
            delay(1000);
      }
      key = kpd.getKey();
      }
      return fechahora;

}




unsigned long Definelog(){
char key = kpd.getKey();
while(key != '#')
{
  switch (key)
      {
         case NO_KEY:
         break;

           case 'A':
            menulog=key;
            break;
           
           case 'B':
            menulog=key;
            break;
           
           case 'C':
            menulog=key;
            break;
           
            case 'D':
            menulog=key;
            break;
           
            case '0':
            menulog=key;
            menu='0';
            break;
           
            delay(1000);
      }
      key = kpd.getKey();
      }
      return menulog;

}

//-----------------------------------
 
void loop()

  int numSensoresT = sensors.getDeviceCount();
    float temparray[numSensoresT];

 
inicio:
  if (menu=='0')   
  {
  myGLCD.clrScr();
  myGLCD.print("-MENU-", CENTER, 0);
  myGLCD.drawLine(2,8,82,8);
  myGLCD.print("#: Confirmar", CENTER, 10);
  myGLCD.print("A: Config", 0, 20);
  myGLCD.print("B: SD", 0, 30);
  myGLCD.print("C: Datos", 0, 40);
  myGLCD.update();
  char menu=Defineletra();
  }
 
 
  else if (menu =='A')
  {
    myGLCD.clrScr();
  myGLCD.print("CONFIGURACION", CENTER, 0);
  myGLCD.drawLine(2,8,82,8);
  myGLCD.print("A:Tiempo", 0, 10);
  myGLCD.print("B: Sensores", 0, 20);
  myGLCD.print("C: Unidades", 0, 30);
  myGLCD.print("0: Volver", 0, 40);
  myGLCD.update();
  char menu1=Defineletra1();
   
         if (menu1=='A')
         {inicio3:
          myGLCD.clrScr();
          myGLCD.print("-TIEMPO-", CENTER, 0);
          myGLCD.drawLine(2,8,82,8);
          myGLCD.print("A:Fecha/h", 0, 10);
          myGLCD.print("B: Periodo Log", 0, 20);
          myGLCD.print("0: Volver", 0, 30);
          myGLCD.update();
          char menu3=Defineletra3();
         
                if (menu3=='A')
                {
                 
                            while(fechahora=='0')
                              {
                                myGLCD.clrScr();
                                myGLCD.print("A:Correcto", 0, 0);
                                 myGLCD.print("B:Cambiar", 0, 10);
                                  verhora();
                                 
                                 
                                  char fechahora=Definefechahora();
                                 
                              }   
                             
                              while(fechahora=='A')
                              {                                   
                                   {goto inicio3;}
                              }
                             
                              while(fechahora=='B')
                              {
                                   ponerhora();
                                 
                                   {goto inicio3;}
                              }
                 
                }
               
                else if (menu3=='B')
                {
                                 
                                 myGLCD.clrScr();
                                 myGLCD.print("Definir unidad", 0, 0);
                                 myGLCD.print("y pulsar #", CENTER, 10);
                                 myGLCD.print("A: Horas", 0, 20);
                                 myGLCD.print("B: Minutos", 0, 30);
                                 myGLCD.print("C: Segundos", 0, 40);
                                 myGLCD.update();
                                 char unidad=Defineletra7();
                               
                                                                       
                                  myGLCD.clrScr();
                                   myGLCD.print("Numero unidades", 0, 0);
                                   myGLCD.print("#: Confirmar", 0, 10);
                                   myGLCD.print("*: Borrar", 0, 20);
                                   myGLCD.update();
                                   unsigned long num = Definenumero();
                                   numero = num;
                                   refresh_rate=(num*t);
                                  {goto inicio3;}
                }
               
                else if (menu3=='0')
                                 {goto inicio;}
                     
             }
         
         else if (menu1=='B')
         { inicio4:
           myGLCD.clrScr();
          myGLCD.print("SENSORES", 0, 0);
          myGLCD.drawLine(2,8,82,8);
          myGLCD.print("A:Temperatura", 0, 10);
          myGLCD.print("B: Caudal", 0, 20);
          myGLCD.print("0: Volver", 0, 30);
          myGLCD.update();
          char menu4=Defineletra4();

peko86

if (menu4=='A')
                      {
                 
                                    myGLCD.clrScr();
                                    myGLCD.print("Detectando", CENTER, 10);
                                    myGLCD.print("sensores", CENTER, 20);
                                    myGLCD.update();
                                     
                                      delay(1000);
                                     
                                    myGLCD.clrScr();
                                    myGLCD.print("SENSORES:", 4, 10);
                                    myGLCD.printNumI(numSensoresT, 58, 10);
                                    myGLCD.update();
                                    delay (1000);
                                   
                                   
                                    {goto inicio4;}
                             
                      }
                     
                      else if (menu4=='B')
                      {
                                     myGLCD.clrScr();
                                     myGLCD.print("-CAUDAL-", CENTER, 0);
                                     myGLCD.print("Definir numero", CENTER, 10);
                                     myGLCD.print("de sensores", CENTER, 20);
                                     myGLCD.print("y pulsar #", CENTER, 30);
                                     myGLCD.update();
                                     unsigned long numQ=DefinenumeroQ();
                                     numSensoresQ=numQ;
                                     {goto inicio4;}
                      }
               
               
                      else if (menu4=='0')
                                        {goto inicio;}
                           
                           
         }
     
       else if (menu1=='0')
            {goto inicio;}
           
         
  }

  else if (menu == 'B')
  {inicio2:
    myGLCD.clrScr();
     myGLCD.print("TARJETA SD", CENTER, 0);
     myGLCD.drawLine(2,8,82,8);
     myGLCD.print("A:Formatear", 0, 10);
     myGLCD.print("B: Extraer", 0, 20);
     myGLCD.print("0: Volver", 0, 30);
     myGLCD.update();
     char menu2=Defineletra2();
     
                 if (menu2=='0')
                      {goto inicio;}
                     
  }
 

 
  while (menu == 'C')
  {
   
    while (pantallazo == 0)
      {
                                                   
                              //Escritura del encabezado
                              File logFile = SD.open("LOG.txt", FILE_WRITE);
                              if (logFile)
                              {
                                logFile.println(", , , ,"); //Dejar linea en blanco, por si hay datos previos
                               
                                logFile.print("Fecha y hora");
                                logFile.print(",");
                                                               
                                for (int encabezado=0; encabezado<numSensoresT;encabezado++) //
                                            {                                                                     
                                                  logFile.print("T");
                                                  logFile.print(encabezado+1);
                                                 
                                                  if (encabezado < numSensoresT-1)
                                                     {
                                                     logFile.print(",");
                                                     }
                                                  else
                                                     {
                                                     logFile.println();
                                                     }
                                                 
                         
                                            }
                              }
                              else
                              {
                               myGLCD.clrScr();
                           myGLCD.print("Fallo de",CENTER, 10);
                           myGLCD.print("tarjeta",CENTER, 20);
                           myGLCD.print("SD",CENTER, 20);
                                  myGLCD.update();
                                  delay(1500);
                           
                                  }
                               
                               logFile.close();
       
                   delay(3000);
       
                  myGLCD.clrScr();
                  myGLCD.print("PERIODO", 0, 0);
                  myGLCD.printNumI(numero, 0, 10);
                 
                 
                  if (t==3600)
                  {
                   myGLCD.print(" horas", 15, 10);
                  }
                 
                  else if (t==60)
                  {
                    myGLCD.print("min.", 15, 10);
                  }
                 
                 
                  else if (t==1)
                  {
                    myGLCD.print("segs.", 15, 10);
                  }
                 
                 
                  else if(t==0)
                  {
                    myGLCD.print("ND", 15, 10);
                  }
                 
                        myGLCD.drawLine(1,18,83,18);
                 
                               
                            myGLCD.print("Sensores T:", 0, 21);
                            myGLCD.printNumI(numSensoresT, 64, 21);
                           
                            myGLCD.print("Sensores Q:", 0, 31);
                            myGLCD.printNumI(numSensoresQ, 64, 31);
                            myGLCD.update();
                           
             
                 
                  delay(3000);
                 
                 
                       myGLCD.clrScr();
                       myGLCD.print("0:STOP", 0, 0);
                       myGLCD.print("A: Temp 1", 0, 10);
                       myGLCD.print("B: Temp. 2", 0, 20);
                       myGLCD.print("C: Caudales 1", 0, 30);
                       myGLCD.print("D: Caudales 2", 0, 40);
                       myGLCD.update();
                       
                  delay(3000);
                 
                 
                     
                  pantallazo++;
      }
     
                   
   
      sensors.requestTemperatures();      // Petici?n de temperatura a todos los sensores
     
          for (w=0; w<numSensoresT; w++)//Para la creaci?n del array de temperaturas
                  {
                   
                      float temp = sensors.getTempCByIndex(w); //Toma la temperatura del sensor i y la almacena en la variable temp
                      temparray[w] = (temp); 
                   
                  }

                                                                           
                ini:                         
                                         
         if (menulog == 'A'){
                       
                         
                  myGLCD.clrScr();
                 
                  for (int j=0; j<numSensoresT;j++) //
                  {
                        int a=(10*j);
                                             
                        myGLCD.print("T", 0, a);
                        myGLCD.printNumI((j+1), 8 ,a);
                        myGLCD.print(":", 20, a);
                        myGLCD.printNumF(temparray[j], 3, 25 ,a);  //El 3 se cambia segun precision requerida, Estoy usando 12 bits para el ds18b20-->0.0625?C precision
                        myGLCD.print("*C", 62, a);

                  }
                   
                                     
                   myGLCD.update();
                               
                             
           } 

Go Up