Nuyel, el código se carga compiló bien (solamente unas comas faltantes y la librería del reloj se quedó perdida), pero fácil de encontrar y corregir. Sin embargo, al cargarlo no me ha generado ningún registro de datos, y creo que se debe que a que deberán pasar 4 horas, antes de que se registre el primer dato, y esto debido a que el timeAlarms está definido para que registre un dato cada 120 segundos, lo que creo que sucederá es que deberán pasar 120/60=2 horas para que se de el primer registro de datos, si estoy en lo correcto, el código está tomando lecturas cada 2 minutos (y no cada segundo como se necesita) y no las presentará hasta que tenga un total de 120 lecturas, es decir 2 horas. La pregunta que me hago, es si después de estas dos horas, los registros serán cada 2 minutos o cada 2 horas. Eso lo creo porque algo me pasó hace un tiempo con algo similar. Que crees tu?
Voy a dejar el código corriendo a ver si tengo una lectura dentro de 2 horas.
Este es el código tal cual lo pasaste solamente con las correcciones de los errores de comas y la librería, en lo personal creo que si es así como funciona, pero voy a intentar buscar como hacer que no tarde tanto para los registros, lo malo es que no tengo otra placa, y quiero saber si hay un registro a las 2 horas, o es otra cosa lo que anda mal...
Voy a dejar el código corriendo a ver si tengo una lectura dentro de 2 horas.
Este es el código tal cual lo pasaste solamente con las correcciones de los errores de comas y la librería, en lo personal creo que si es así como funciona, pero voy a intentar buscar como hacer que no tarde tanto para los registros, lo malo es que no tengo otra placa, y quiero saber si hay un registro a las 2 horas, o es otra cosa lo que anda mal...
Código:
#include <Time.h>
#include <TimeAlarms.h>
#include <DS1307RTC.h>
#include "DHT.h"
#define DHTTYPE DHT21
#define DHTPIN 4
DHT dht(DHTPIN, DHTTYPE);
#define muestras 120
#define tMaxVal (100.0)
#define tMinVal (0.0)
#define hMaxVal (100.0)
#define hMinVal (0.0)
float t, h, tmax = tMinVal, tmin = tMaxVal, hmax = hMinVal, hmin = hMaxVal;
float sigmaT = 0.0, sigmaH = 0.0, tavg = 0.0, havg = 0.0;
int numReadings = muestras;
void setup() {
Serial.begin(9600);
setSyncProvider (RTC.get);
//setTime(2,22,0,15,04,16);
if (timeStatus()!=timeSet){
Serial.println ("No está el reloj");
}else{
Serial.println ("El reloj se sincronizo");
}
dht.begin();
int horas = hour();
int minutos = (minute()/2)*2+2; // Intervalos de registros cada 2 minutos.
if (minutos == 60) {
minutos = 0;
horas = hour()+1;
}
Alarm.alarmOnce(horas, minutos, 0, AlarmStart);
}
void resetValues() {
tmax = tMinVal;
tmin = tMaxVal;
hmax = hMinVal;
hmin = hMaxVal;
numReadings = muestras; //reinicar cuenta de muestras
sigmaT = 0.0; //reiniciar suma de T
sigmaH = 0.0; //reiniciar suma de H
}
void loop() {
Alarm.delay(1); // wait one second between clock display
}
void Registros(){
float h = dht.readHumidity();
float t = dht.readTemperature();
if (t > tmax) tmax = t; //dado a que tMax inicia en cero, cualquier valor que sea superior al anterior lo sustituirá
if (t < tmin) tmin = t; //dado a que tMin inicia en el valor más alto, cualquier valor inferior sustituye al ultimo registrado
if (h > hmax) hmax = h;
if (h < hmin) hmin = h;
sigmaT += t; //sumatoria de T
sigmaH += h; //sumatoria de H
--numReadings;
if (numReadings == 0){ //esto solo deberia ejecutarse cuando se tenga todas las muestras
tavg = sigmaT/muestras; //promedio de temperatura
havg = sigmaH/muestras; //promedio de humedad
String dataString= "";
dataString+= String (day());
dataString+= ("/");
dataString+= String (month());
dataString+= ("/");
dataString+= String (year());
dataString+= (" ");
dataString+= String (hour());
dataString+= String (":");
dataString+= String (minute());
dataString+= String (":");
dataString+= String (second());
dataString+= (" ");
dataString+= String (t);
dataString+= (" ");
dataString+= String (tmax);
dataString+= (" ");
dataString+= String (tmin);
dataString+= (" ");
dataString+= String (h);
dataString+= (" ");
dataString+= String (hmax);
dataString+= (" ");
dataString+= String (hmin);
dataString+= (" ");
dataString+= String (tavg);
dataString+= (" ");
dataString+= String (havg);
dataString+= (" ");
dataString+= String (muestras);
Serial.println(dataString);
resetValues(); //reiniciar los registros para el siguiente periodo.
}
}
void AlarmStart() {
Alarm.timerRepeat(120, Registros); // Para un dato cada 2 minutos.
}