#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Servo.h>
#include <TinyGPS.h> //libreria gps
TinyGPS gps;
#include <SoftwareSerial.h>
SoftwareSerial serialgps(11, 10);
#include <SPI.h> //librerias sd
#include <SD.h> // librerias sd
#define DHTPIN 22 // El pin digital al que está conectado el sensor
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE); // Inicializa el objeto DHT
Servo servolive;
float humedad;
float temperatura;
float latitude;
char pulsacion; // almacena la tecla pulsada
int contador = 1; // cuenta el nivel del menu en el que se esta
const byte ROWS = 4; //Cuatro Filas
const byte COLS = 4; //Cuatro Columnas
int relay = 23;
int relay2= 24;
int relay3= 25;
unsigned int actual = 0;
unsigned int anterior = 0;
const int chipSelect = 53; // pin usado mega 53
int year;
byte month, day, hour, minute, second, hundredths; //variables para dias
unsigned long chars;
unsigned short sentences, failed_checksum;
bool guardarDatos = false;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'},
};
byte rowPins[ROWS] = {30,31,32,33}; //Puntos de conexion del teclado al arduino FILAS
byte colPins[COLS] = {34,35,36,37}; //Puntos de conexion del teclado al arduino COLUMNAS
Keypad Teclado1 = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //Configura el teclado
LiquidCrystal_I2C lcd(0x27,16,2); // dependiendo del fabricante del I2C el codigo 0x27 cambiar a
// 0x3F , 0x20 , 0x38 ,
////////////////////////////////// Void Setup() ///////////
void setup () {
lcd.init();
lcd.backlight();
pinMode(12, OUTPUT);
// muestra el intro de bienvenida
Serial.begin(9600); // Inicializa la comunicación serial
dht.begin(); // Inicializa el sensor DHT
servolive.attach(48);
pinMode(relay, OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(relay3,OUTPUT);
anterior = millis();
Serial.begin(9600);
serialgps.begin(9600);
pinMode(chipSelect, OUTPUT);
Serial.print("Inicializando SD...");
// ver si la tarjeta se esta inicializando
if (!SD.begin(chipSelect)) {
Serial.println("Fallo o tarjeta no presente");
//si no pasa eso
return;
}
Serial.println("Tarjeta SD OK");
}
////////////////////////// Void loop() ///////////////////////
void loop() {
{humedad = dht.readHumidity();
Serial.print(humedad);
temperatura = dht.readTemperature();
Serial.print(",");
Serial.println(temperatura);
// Verifica si alguna lectura falló
if (isnan(humedad) || isnan(temperatura)) {
Serial.println("Error al leer el sensor DHT!");
return;
}
{
if (temperatura <30 ){
digitalWrite(relay, HIGH);
}
if (temperatura > 32){
digitalWrite(relay, LOW);
}
if (humedad > 75){
digitalWrite (relay2 , LOW);
}
if (humedad < 76 ){
digitalWrite ( relay2 , HIGH);
}
digitalWrite (relay3 , LOW);}
{ actual= millis ();
if (actual - anterior > 8000){
servolive.write(0);}
if ( anterior - actual < 5000){
servolive.write(40);
}
}
String dataString = "";
while (serialgps.available()) {
int c = serialgps.read();
if (gps.encode(c)) {
float latitude, longitude;
gps.f_get_position(&latitude, &longitude);
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
// Abre el archivo DATOSGPS.txt
//Solo puede haber un archivo abierto a la vez,
//por lo que hay que cerrar este si queremos utilizar otro //printDate
File dataFile = SD.open("DATOSGPS.txt", FILE_WRITE);
// Si el archivo existe, escribimos en el.
if (dataFile) {
dataFile.print((millis() / 1000));
dataFile.print(",");
dataFile.println(dataString);
dataFile.print("Latitud: ");
dataFile.print(latitude, 5);
dataFile.print(" ");
dataFile.print(",");
dataFile.print("Longitud: ");
dataFile.print(longitude, 5);
dataFile.print(" ");
dataFile.print(",");
dataFile.print("Velocidad en Km/Hr: ");
dataFile.print(gps.f_speed_kmph());
dataFile.print(" ");
dataFile.print(",");
dataFile.print("Satelites encontrados: ");
dataFile.print(gps.satellites());
dataFile.print(" ");
dataFile.print(",");
dataFile.print("Fecha: ");
dataFile.print(day, DEC);
dataFile.print(" ");
dataFile.print("/");
dataFile.print(month, DEC);
dataFile.print(" ");
dataFile.print("/");
dataFile.print(year, DEC);
dataFile.print(" ");
dataFile.print(",");
dataFile.print("Numero de dato");
dataFile.close();
guardarDatos = false;
Serial.println(dataString);
}
// Si el archivo no se abre imprimir:
else {
Serial.println("Error abriendo DATOSGPS.txt");
}
}}
pulsacion = Teclado1.getKey() ; // Lee la tecla pulsada
if (pulsacion != 0) {
lcd.clear();
}
if(contador == 5){ menu_5();accion_5();}
if(contador == 4){ menu_4();accion_4();}
if(contador == 3){ menu_3();accion_3();}
if(contador == 2){ menu_2();accion_2();}
if(contador == 1){ menu_1();accion_1();}
// Lee la humedad relativa y la temperatura en grados Celsius
}}
// Lee la humedad relativa y la temperatura en grados Celsius
void menu_1(){
lcd.setCursor(0,0);
lcd.print("Welcome");
lcd.setCursor(0,1);
lcd.print( "Operator");
lcd.setCursor(10,1);
lcd.print("MAS >*");
}
/////////////////////Accion 1 //////////////////////////////
void accion_1(){
if(pulsacion == '*') contador=2;
}
/////////////////////Menu_2 //////////////////////////////////
void menu_2(){
lcd.setCursor(0,0);
lcd.print("Humd >1 ");
lcd.setCursor(8,0);
lcd.print("Temp >2");
lcd.setCursor(0,1);
lcd.print("MENU >#");
lcd.setCursor(8,1);
lcd.print("GPS >3");
}
/////////////////////accion_2 //////////////////////////////////
void accion_2(){
if(pulsacion == '1') contador=3;
if(pulsacion == '2') contador=4;
if (pulsacion == '3') contador=5;
if(pulsacion == '#') contador=1;
}
/////////////////////Menu_3 //////////////////////////////////
void menu_3(){
lcd.setCursor(0,0);
lcd.print("Humd ");
lcd.setCursor(5,0);
lcd.print(humedad);
lcd.print(" %");
lcd.setCursor(0,1);
lcd.print("MENU># <--0");
}
/////////////////////accion_3 //////////////////////////////////
void accion_3(){
if(pulsacion == '#') contador=1;
if(pulsacion == '0') contador=2;
}
/////////////////////Menu_4 //////////////////////////////////
void menu_4(){
lcd.setCursor(0,0);
lcd.print("Temp: ");
lcd.setCursor(6,0);
lcd.print(temperatura);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print("MENU># <--0");
}
/////////////////////accion_4 //////////////////////////////////
void accion_4(){
if(pulsacion == '#') contador=1;
if(pulsacion == '0') contador=2;
}
void menu_5(){
lcd.setCursor(0,0);
lcd.print("LAT ");
lcd.setCursor(4,0);
lcd.print(latitude);
lcd.setCursor(0,1);
lcd.print("MENU># <--0");
}
/////////////////////accion_4 //////////////////////////////////
void accion_5(){
if(pulsacion == '#') contador=1;
if(pulsacion == '0') contador=2;
}