Version Beta para la FRDM-KL46Z del original de Arduino Uno

Dependencies:   mbed TextLCD

Revision:
12:e134e66034c7
Parent:
10:fb06357df7d7
Child:
13:a6dd1f4321e3
--- a/main.cpp	Tue Nov 06 04:52:20 2018 +0000
+++ b/main.cpp	Tue Nov 13 08:13:05 2018 +0000
@@ -30,7 +30,13 @@
 *   Se añadió variable de "error_code" para monitoreo de operación del DHT
 *   Se añadió libreria RGB para convertirla a objetos para utilizarse en la 
 *   señalización de Alarmas
-*   Fallo de control de seguridad al Canceler el Proceso de Deshidratación
+*   Fallo de control de seguridad al Cancelar el Proceso de Deshidratación
+* - 13/11/18
+*   Problemas para realizar más lecturas no se actualizan las variables dentro
+*   de la biblioteca DHT
+*   _firsttime=false;
+*   _lastReadTime=currentTime;
+*   Error 7 = ERROR_NO_PATIENCE;
 *******************************************************************************/
 
 /*
@@ -61,7 +67,7 @@
 #define NOFRUTAS        11
 #define CONDALARM       2
 
-#define DHT_TIPO        DHT22
+#define DHT_TIPO        DHT11           // Define el tipo de sensor: DHT11 o DHT22
 #define DHT_PIN         PTA13
 #define  on             0               // Estado para boton presionado
 #define off             1               // Estado para boton sin presionar
@@ -162,8 +168,8 @@
 //TextLCD_SPI lcd(&spi_LCD, PTD4, TextLCD::LCD16x4, TextLCD::HD44780);   // SPI bus, SN74595 expander, CS pin, LCD Type 
 TextLCD_I2C lcd(&i2c_LCD, 0x7E, TextLCD::LCD20x4);                   // I2C bus, PCF8574A Arduino Shield, LCD Type
 
-//librerias del DHT22  
-DHT dht(PTA13, DHT22);              // DHT_PIN, DHT_TIPO (DHT11, DHT22)
+//librerias del Sensor de Humedad y Temperatura  
+DHT dht(PTA13, DHT_TIPO);              // DHT_PIN, DHT_TIPO (DHT11, DHT22)
 
 /*
 ** ===================================================================
@@ -230,8 +236,8 @@
 **   Variables que guardan datos de los sensores.
 ** -------------------------------------------------------------------*/
 
-float h;                    //Guarda la Humedad del ambiente.
-float t;                    //Guarda la Temperatura del ambiente.
+float humedad;                    //Guarda la Humedad del ambiente.
+float temperatura;                    //Guarda la Temperatura del ambiente.
 float TF;                   //Variable que guarda la temperatura final.
 float HF;                   //Variable que guarda la humedad final.
 
@@ -400,9 +406,9 @@
     wait_ms(500);
     PIN_BUZZER = Buzz_Off;
 /* Configufración del Display LCD */      /* Mucho OjO !!! */
-//  spi_LCD.frequency(1000000);    // Frecuencia de operación para el SPI
+//  spi_LCD.frequency(100000);    // Frecuencia de operación para el SPI (100KHz)
 //  spi_LCD.format(8,0);              // Modo de Operación para el SPI
-  i2c_LCD.frequency(100000);        // Frecuencia de operación para el I2C
+  i2c_LCD.frequency(100000);        // Frecuencia de operación para el I2C (100KHz)
   i2c_LCD.start();                  // Inicio de operación para el I2C 
 /* Arranque del Display LCD */  
   Terminal.printf("LCD Display is Starting...\n\r"); 
@@ -687,9 +693,9 @@
   lcd.setBacklight(TextLCD::LightOn);       // Enciende la Iluminación de Fondo
   lcd.setCursor(TextLCD::CurOff_BlkOff);    // Apaga el Cursor
   lcd.locate(12, 0);                //Coloca el cursor en la columna 12 y fila 0.
-  lcd.printf("%.2f",t);             //Imprime valores de temperatura.
+  lcd.printf("%.2f",temperatura);   //Imprime valores de temperatura.
   lcd.locate(8, 1);                 //Coloca el cursor en la columna 8 fila 1.
-  lcd.printf("%.2f",h);             //Imprime valores de humedad.
+  lcd.printf("%.2f",humedad);       //Imprime valores de humedad.
   lcd.locate(6, 2);                 //Coloca el cursor en columna 6 fila 2.
   Porcentaje = DC * 100 / 255;      // 
   if (Motor) {                      //Vericamos estado del motor.
@@ -721,11 +727,11 @@
 void Imprime_Tiempo(int Columna,int Fila) {
   lcd.setBacklight(TextLCD::LightOn);       // Enciende la Iluminación de Fondo
   lcd.setCursor(TextLCD::CurOff_BlkOff);    // Apaga el Cursor
-  lcd.locate(Columna, Fila);
+  lcd.locate(Columna, Fila);                // Listo para escribir
   if (Hor < 10)
-    lcd.printf("0");
-  lcd.printf("%d",Hor);
-  lcd.printf(":");
+   lcd.printf("0");
+   lcd.printf("%d",Hor);
+   lcd.printf(":");
   if (Min < 10)
     lcd.printf("0");
   lcd.printf("%d",Min);
@@ -815,28 +821,38 @@
         PIN_BUZZER = Buzz_Off;              //Apaga el buzzer 
         wait(1);
       }
-      else        {                                //NO...
+      else        {                         //NO..., Todo está bien, entonces
         Imprime_InfoDeshidratacion();       //Colocamos mensajes en la LCD.
         while (!PuertaAb && Deshidratando && !Bandera) {   //Mientras la puerta este cerrada y la variable Desidratando sea verdadera.
-        error_code=dht.readData();          //Lee el Sensor de Humedad y Temperatura
-        if (error_code != 0) { 
+          error_code = 0;                           //Limpia el Código de Error      
+          Terminal.printf("\rReading DHT ... ");    //Envia mensaje a la Terminal        
+          error_code=dht.readData();                //Lee el Sensor de Humedad y Temperatura
+          Terminal.printf("\r\nError Code: %d \r\n", error_code);   //Imprime el Código de Error
+        if (error_code == 0) {                      // Si todo OK
+            Terminal.printf("Temperature is %4.2f C \r\n",dht.ReadTemperature(CELCIUS));
+            temperatura = dht.ReadTemperature(CELCIUS);             //Se lee la temperatura: CELCIUS=0,FARENHEIT=1,KELVIN=2          
+            Terminal.printf("Temperature is %4.2f F \r\n",dht.ReadTemperature(FARENHEIT));
+            Terminal.printf("Temperature is %4.2f K \r\n",dht.ReadTemperature(KELVIN));
+            Terminal.printf("Humidity is %4.2f \r\n"     ,dht.ReadHumidity());
+            humedad = dht.ReadHumidity();                           //Se lee la humedad
+            Terminal.printf("Dew point is %4.2f  \r\n"   ,dht.CalcdewPoint(dht.ReadTemperature(CELCIUS), dht.ReadHumidity()));
+            Terminal.printf("Dew point (fast) is %4.2f \r\n",dht.CalcdewPointFast(dht.ReadTemperature(CELCIUS), dht.ReadHumidity()));
+ //           dht.firsttime=false;
+//          Terminal.printf("\rHumedad: %.2f ", h);     //Envia el valor hacia la terminal  
+//          Terminal.printf("\tTemperatura: %.2f \r\n\v\v\v\v", t);   
+        } else {
             Terminal.printf("\rError Reading DHT   ");           //No se puedo leer DHT
             Terminal.printf("\r\nPlease Check Sensor !!! \n\r"); //Envia mensaje de error a la Terminal
             lcd.cls();                      //Limpiamos LCD.
             lcd.locate(1, 0);               //Coloca el cursor al inicio de la fila.
-            lcd.printf("Error de Sensores");//Encia mensaje de Error.
+            lcd.printf("Error de Sensores");//Envia mensaje de Error.
             lcd.locate(1, 1);               //Coloca el cursor al inicio de la fila.
-            lcd.printf("Revise Equipo ! "); //Encia mensaje de Error.
+            lcd.printf("Revise Equipo ! "); //Envia mensaje de Error.
             PIN_BUZZER = Buzz_On;           //Enciende el buzzer 
-            wait(10);                       //Espera 10 seg
+            wait(2);                       //Espera 2 seg
           }
-          Terminal.printf("\rReading DHT ... ");
-          Terminal.printf("\r\nError Code: %d \r\n", error_code);  
-          h = dht.ReadHumidity();                          //Se lee la humedad
-          Terminal.printf("\rHumedad: %.2f ", h);            
-          t = dht.ReadTemperature(CELCIUS);                //Se lee la temperatura: CELCIUS=0,FARENHEIT=1,KELVIN=2
-          Terminal.printf("\tTemperatura: %.2f \r\n\v\v\v\v", t);            
-          Checar_Calefactor(Temp[FrutaD]);                 //Verifica sesores y enciende componentes.
+         
+          Checar_Calefactor(Temp[FrutaD]);                 //Verifica sensores y enciende componentes.
           Imprime_InfoSensores();                          //Impresion de informacion de sensores,
           Imprime_Tiempo(7, 3);                            //Impresion de Tiempo.
           if (Hor == 5 && Min == 30) {                     //Tiempo Transcurrido es igual a 5:30:XX .
@@ -847,11 +863,12 @@
         }
       }
     }
+    
     //Deshidratacion terminada.
     Terminal.printf("\rDeshidratacion Terminada  \n\r");
     Terminal.printf("\rTiempo Terminado !!! \n\r");      
-    TF = t;                                             //Almacenamos el valor final de temperatura.
-    HF = h;                                             //Almacenamos el valor final de humedad.
+    TF = temperatura;                                             //Almacenamos el valor final de temperatura.
+    HF = humedad;                                             //Almacenamos el valor final de humedad.
     Terminal.printf("\rHumedad Final: %.2f ", HF);                     //Humedad Final
     Terminal.printf("\tTemperatura Interna: %.2f \r\n\v\v\v\v", TF);     //Temperatura Final
     Deshidratando = 0;                                  //Indica que termina la deshidratacion.
@@ -860,7 +877,7 @@
     return 1;                                           //Indicamos que termino la deshidratación.
   }
   else
-    return 0;                                             //Indica que no se inicio el proceso.
+    return 0;                                           //Continua proceso de Deshidratación.
 }
 /*
 ** ===================================================================
@@ -971,20 +988,20 @@
 ** ===================================================================
 */
 void Checar_Calefactor(int TempD) {
-  if ((t > (TempD - 2) && t < (TempD + 1)) || (h > 75))
+  if ((temperatura > (TempD - 2) && temperatura < (TempD + 1)) || (humedad > 75))
     MotorON(130);
-  else if (t < (TempD - 2) && (h <= 75))
+  else if (temperatura < (TempD - 2) && (humedad <= 75))
     MotorOFF();
-  else if (t >= (TempD + 1))
+  else if (temperatura >= (TempD + 1))      //
     MotorON(196);
 
-  if (t <= (TempD - 1)) {           //Checa si el quemador esta apagado y su tempertatura es igual o menor que la temperatura de la fruta.
-    wait_ms(1000);                  //Retardo de 1 seg.
-    CalefactorON();
+  if (temperatura <= (TempD - 1)) {         //Checa si el quemador esta apagado y su tempertatura es igual o menor que la temperatura de la fruta.
+    wait_ms(1000);                          //Retardo de 1 seg.
+    CalefactorON();                         //Enciende el elemento calaefactor
   }
-  else if (t >= (TempD + 1)) {      //Checa si el motor esta encendido y la si la temperatura es mayor a la maxima permitida
-    CalefactorOFF();
-    wait_ms(2000);                  //retardo de 2 segundos.
+  else if (temperatura >= (TempD + 1)) {    //Checa si el motor esta encendido y la si la temperatura es mayor a la maxima permitida
+    CalefactorOFF();                        //Apaga el elemento calefactor
+    wait_ms(2000);                          //retardo de 2 segundos.
   }
 }
 /*
@@ -1016,15 +1033,18 @@
 //Enfriamiento del Sistema  
   CalefactorOFF();                     //Apaga el Elemento Calefactor
   do {
-    t = dht.ReadTemperature(CELCIUS);  //Se lee la temperatura: CELCIUS=0, FARENHEIT=1, KELVIN=2
-    lcd.locate(13, 3);
-    lcd.printf("%.2f",t);              //Temperatura interna del Deshidratador
-    Terminal.printf("\rEnfriando, Temperatura: %.2f",t);   //
-    wait_ms(1000);                     //Espera 1 segundo
+//        error_code=dht.readData();          //Lee el Sensor de Humedad y Temperatura  
+//        Esta linea genera ERROR_CHECKSUM 
+//        wait(1);                              //Espera 1 segundo
+        temperatura = dht.ReadTemperature(CELCIUS);  //Se lee la temperatura: CELCIUS=0, FARENHEIT=1, KELVIN=2
+        lcd.locate(13, 3);
+        lcd.printf("%.2f",temperatura);              //Temperatura interna del Deshidratador
+        Terminal.printf("\rEnfriando, Temperatura: %.2f",temperatura);   // Envia Temperatura a la Terminal
+        wait_ms(1000);                     //Espera 1 segundo
      } 
-  while (t > 37);                      //Hasta que la Temperatura Llega a 37°C
+  while (temperatura > 37);                      //Hasta que la Temperatura Llega a 37°C
     MotorOFF();                        //Apaga el Elemento de Ventilación
-  if (t < 25 ){
+  if (temperatura < 25 ){
     printf("\rEs Seguro Abrir Deshidratador !!!   \n\r");    
     lcd.cls();                         //Limpia el LCD
     lcd.locate(3,1);