#include SD.h>
//Libreria para el Lector de MicroSD
#include DHT.h>
//Libreria para DHT11 sensor
#include DS3231.h>
//libreria de RTC
#include string.h>
//Para ingresar Datos en Cadena
#include LiquidCrystal.h>
//Libreria para LCD
LiquidCrystal lcd(7, 8, 9, 10, 15, 14);
//Pines para LCD
DS3231 rtc(6, 5);
//Pines para uso de RTC
Time t;
// Variable de tipo Fecha
File myFile;
//variable para SD
#define DHTPIN 2
//Seleccionamos el pin en el que se conecta el sensor
#define DHTTYPE DHT11
//Se selecciona el DHT11 (hay //otros DHT)
DHT dht(DHTPIN, DHTTYPE);
//Se inicia una variable que ser� usada por Arduino para comunicarse con el sensor
String nombre=
"INICIALIZANDO..."; //texto para el LCD
char n;
String puntos=
"...";
char p;
char caracter;
String cadena=
"";
//Cadena de texto para almacenar fecha de Inicio y Final
String dia,mes,anio,hora, minuto,segundo;
//variable de inicio conteo
String diaF,mesF,anioF,horaF, minutoF,segundoF;
//variables de fin conteo
int opcion=0;
int conDia,conMes,conAnio,conHora, conMinut, conSegund;
//variable de inicion en horas
int conDiaF,conMesF,conAnioF, conHoraF, conMinutF, conSegundF;
//variable de fin en horas
String lcdDateInicion,lcdDateFinal;
//variables para LCD
boolean condicion =
true;
void setup() {
Serial.
begin(9600);
rtc.
begin();
dht.
begin();
lcd.
begin(16, 2);
for(
int i=0;i<16;i++){
n=nombre.
charAt(i);
lcd.
print(n);
delay(300);
}
if (!
SD.
begin(4)) {
Serial.
println(
"No se pudo inicializar");
return;
}
Serial.
println(
"inicializacion exitosa");
if(!
SD.
exists(
"Excel5.csv")){
myFile =
SD.
open(
"Excel5.csv", FILE_WRITE);
if(myFile) {
Serial.
println(
"Archivo nuevo, Escribiendo encabezado(fila 1)");
myFile.
println(
"Tiempo,Humedad,Temperatura");
myFile.close();
}
else {
Serial.
println(
"Error creando el archivo Excel5.csv");
}
}
//fin de exists
// rtc.setTime(11, 23,20); // Horas
//rtc.setDate(14, 06, 2016); // fechas
}
//fin de setup
void loop() {
float dht_hum = dht.readHumidity();
// lee la humedad
float t dht_temp = dht.
readTemperature();
// lee la temperatura
lcd.
clear();
for(
int i=0;i<3;i++){
p = puntos.
charAt(i);
lcd.
setCursor(i, 1);
lcd.
print(p);
delay(400);
lcd.
clear();
}
t=rtc.
getTime();
if(
Serial.
available()){
caracter =
char(
Serail.
read());
cadena.
concat(caracter);
while(cadena.
length()==28){
//:::::::::::::Date Inicio String::::::::::::::::
dia=cadena.
substring(0,2); mes=cadena.
substring(2,4);
anio=cadena.
substring(4,8);
hora=cadena.
substring(8,10); minuto=cadena.
substring(10,12);
segundo=cadena.
substring(12,14);
//::::::::::::Date final String:::::::::::::::::
diaF=cadena.
substring(14,16); mesF=cadena.
substring(16,18);
anioF=cadena.
substring(18,22);
horaF=cadena.
substring(22,24); minutoF=cadena.
substring(24,26);
segundoF=cadena.
substring(26,28);
//::::::::::::::::::Date Inicio Int:::::::::::::::
conDia=dia.
toInt();conMes=mes.
toInt();
conAnio=anio.
toInt();
conHora=hora.
toInt(); conMinut=minuto.
toInt();
conSegund=segundo.
toInt();
//:::::::::::::Date final Int::::::::::::::::::::
conDiaF=diaF.
toInt(); conMesF=mesF.
toInt();
conAnioF=anioF.
toInt();
conHoraF=horaF.
toInt(); conMinutF=minutoF.
toInt();
conSegundF=segundoF.
toInt();
//:::::::::::::Imprimir en el LCD::::::::::::::::::::
lcdDateInicion=dia+
'/'+mes+
'/'+
'.'+
'.'+hora+
':'+minuto+
':'+segundo;
//Imprimir en LCD
lcdDateFinal=diaF+
'/'+mesF+
'/'+
'.'+
'.'+horaF+
':'+minutoF+
':'+segundoF;
//Imprimir en LCD
t=rtc.
getTime();
lcd.
setCursor(0, 0);
lcd.
print(
"TIEMPO DE INICIO");
lcd.
setCursor(0, 1);
lcd.
print(lcdDateInicion);
delay(2000);
lcd.
clear();
lcd.
setCursor(0, 0);
lcd.
print(
"TIEMPO FINAL");
lcd.
setCursor(0, 1);
lcd.
print(lcdDateFinal);
delay(2000);
//verifica el tiempo de inicio
if(t.
date==conDia && t.
mon==conMes && t.
year==conAnio && t.
hour==conHora && t.
min==conMinut && t.
sec==conSegund ){
while(condicion){
myFile =
SD.
open(
"Excel5.csv", FILE_WRITE);
//abrimos el archivo
//reinicia el contador
if(opcion==4){
opcion = 0;
}
else{
opcion++;}
t=rtc.
getTime();
//actualizamos la hora y fecha
if(myFile){
myFile.
print(rtc.
getTimeStr());
myFile.
print(',');
myFile.
print(dht_hum);
myFile.
print(',');
myFile.
println(dht_temp);
myFile.
close();
//cerramos el archivo
else {
Serial.println(
"Error al abrir el archivo");
}
if(opcion==0){
lcd.
clear);
lcd.
setCursor(0, 0);
lcd.
print(
""GUARDANDO A SD"");
lcd.
setCursor(0, 1);
lcd.
print(lcdDateInicion);
}
else if(opcion==2){
lcd.
clear();
lcd.
setCursor(0, 0);
lcd.
print(
"FINALIZARA EN...");
lcd.
setCursor(0, 1);
lcd.
print(lcdDateFinal);
}
delay(1000);
//verifica el tiempo final
if(t.
date==conDiaF && t.
mon==conMesF && t.
year==conAnioF && t.
hour==conHoraF && t.
min==conMinutF && t.
sec==conSegundF){
lcd.
setCursor(0, 0);
lcd.
print(
"FINALIZADO");
delay(90000);
condicion=
false;
}
//fin de condici�n tiempo final
}
//fin while cuando la fecha de ingreso es igual guarda en sd los datos
}
//fin de if calida la fecha y hora de ingreso
}
//fin de while que espera la 28 caracteres
}
//fin de Serial.available
}
//fin de loop