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

Dependencies:   mbed TextLCD

Committer:
Antulius
Date:
Thu Dec 13 07:45:35 2018 +0000
Revision:
13:a6dd1f4321e3
Parent:
12:e134e66034c7
Child:
14:cd1626949b77
Errores detectados en la Biblioteca DHT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Antulius 0:f1e9b42f90d0 1 /*******************************************************************************
Antulius 0:f1e9b42f90d0 2 *
Antulius 0:f1e9b42f90d0 3 * ARCHIVO: main.cpp
Antulius 0:f1e9b42f90d0 4 *
Antulius 0:f1e9b42f90d0 5 * PROYECTO: FRDM-KL46Z_Deshidratador
Antulius 0:f1e9b42f90d0 6 *
Antulius 0:f1e9b42f90d0 7 * PLATAFORMA: FRDM-KL46Z
Antulius 0:f1e9b42f90d0 8 *
Antulius 0:f1e9b42f90d0 9 * DISPOSITIVO: MKL46Z256VLL4
Antulius 0:f1e9b42f90d0 10 *
Antulius 0:f1e9b42f90d0 11 * HERRAMIENTA: Mbed Compiler
Antulius 0:f1e9b42f90d0 12 *
Antulius 0:f1e9b42f90d0 13 * DESCRIPCION: El programa principal lee los datos provenientes del sensor de
Antulius 0:f1e9b42f90d0 14 * humedad y temperatura DHT22. Formatea los datos y los despliega
Antulius 0:f1e9b42f90d0 15 * por la terminal serial.
Antulius 0:f1e9b42f90d0 16 * Posee un menú de Configuración por medio de la Pantalla LCD
Antulius 0:f1e9b42f90d0 17 *
Antulius 0:f1e9b42f90d0 18 *
Antulius 0:f1e9b42f90d0 19 * VERSION: Beta
Antulius 0:f1e9b42f90d0 20 * REV: A
Antulius 0:f1e9b42f90d0 21 * RELEASE: 0
Antulius 0:f1e9b42f90d0 22 *
Antulius 0:f1e9b42f90d0 23 * AUTOR(ES): Antulio Morgado Valle, Raziel López Escamilla
Antulius 0:f1e9b42f90d0 24 *
Antulius 0:f1e9b42f90d0 25 * FECHA: 10/20/2018
Antulius 0:f1e9b42f90d0 26 *
Antulius 9:5d4a4c23d7c5 27 * Bugs & Fixes:
Antulius 9:5d4a4c23d7c5 28 * - 30/10/18
Antulius 9:5d4a4c23d7c5 29 * Se corrigió menu de OTRO (Opera correctamente)
Antulius 9:5d4a4c23d7c5 30 * Se añadió variable de "error_code" para monitoreo de operación del DHT
Antulius 9:5d4a4c23d7c5 31 * Se añadió libreria RGB para convertirla a objetos para utilizarse en la
Antulius 9:5d4a4c23d7c5 32 * señalización de Alarmas
Antulius 12:e134e66034c7 33 * Fallo de control de seguridad al Cancelar el Proceso de Deshidratación
Antulius 12:e134e66034c7 34 * - 13/11/18
Antulius 12:e134e66034c7 35 * Problemas para realizar más lecturas no se actualizan las variables dentro
Antulius 12:e134e66034c7 36 * de la biblioteca DHT
Antulius 12:e134e66034c7 37 * _firsttime=false;
Antulius 12:e134e66034c7 38 * _lastReadTime=currentTime;
Antulius 12:e134e66034c7 39 * Error 7 = ERROR_NO_PATIENCE;
Antulius 13:a6dd1f4321e3 40 * - 12/12/18
Antulius 13:a6dd1f4321e3 41 * Error en la línea 67 en la Biblioteca DHT (Mbed_DHT.cpp) función time_t
Antulius 13:a6dd1f4321e3 42 * Las tarjetas FRMD no poseeen un Reloj de Tiempo Real, por lo tanto la
Antulius 13:a6dd1f4321e3 43 * función time_t no puede ejecutarse.
Antulius 13:a6dd1f4321e3 44 * Se probó con la Biblioteca dht22.
Antulius 13:a6dd1f4321e3 45 * La Biblioteca DHT está lista para que sea modificada para adaptarse al
Antulius 13:a6dd1f4321e3 46 * funcionamiento de las tarjetas FRDM a partir de las Bibliotecas: Mbed_DHT,
Antulius 13:a6dd1f4321e3 47 * dht22 y DHT de Arduino.
Antulius 13:a6dd1f4321e3 48 *
Antulius 13:a6dd1f4321e3 49 *
Antulius 13:a6dd1f4321e3 50 *
Antulius 0:f1e9b42f90d0 51 *******************************************************************************/
Antulius 0:f1e9b42f90d0 52
Antulius 0:f1e9b42f90d0 53 /*
Antulius 0:f1e9b42f90d0 54 ** ===================================================================
Antulius 0:f1e9b42f90d0 55 ** Librerias del Programa
Antulius 0:f1e9b42f90d0 56 ** ===================================================================
Antulius 0:f1e9b42f90d0 57 */
Antulius 0:f1e9b42f90d0 58 #include "mbed.h"
Antulius 0:f1e9b42f90d0 59 #include "stdio.h"
Antulius 0:f1e9b42f90d0 60 #include "TextLCD.h"
Antulius 0:f1e9b42f90d0 61 #include "I2C.h"
Antulius 0:f1e9b42f90d0 62 #include "SPI.h"
Antulius 0:f1e9b42f90d0 63 #include "Serial.h"
Antulius 13:a6dd1f4321e3 64 //#include "DHT.h"
Antulius 13:a6dd1f4321e3 65 #include "dht22.h"
Antulius 9:5d4a4c23d7c5 66 //#include "Led_RGB.h"
Antulius 0:f1e9b42f90d0 67
Antulius 0:f1e9b42f90d0 68 /*
Antulius 0:f1e9b42f90d0 69 ** ===================================================================
Antulius 0:f1e9b42f90d0 70 ** Definiciones y Constantes del programa.
Antulius 0:f1e9b42f90d0 71 ** ===================================================================
Antulius 0:f1e9b42f90d0 72 */
Antulius 0:f1e9b42f90d0 73
Antulius 0:f1e9b42f90d0 74 #define LCDFILAS 4
Antulius 0:f1e9b42f90d0 75 #define LCDCOLUMNAS 20
Antulius 0:f1e9b42f90d0 76
Antulius 0:f1e9b42f90d0 77 #define TAPWM 255
Antulius 0:f1e9b42f90d0 78
Antulius 0:f1e9b42f90d0 79 #define NOFRUTAS 11
Antulius 0:f1e9b42f90d0 80 #define CONDALARM 2
Antulius 0:f1e9b42f90d0 81
Antulius 12:e134e66034c7 82 #define DHT_TIPO DHT11 // Define el tipo de sensor: DHT11 o DHT22
Antulius 1:456851b4e285 83 #define DHT_PIN PTA13
Antulius 4:ffffec15fa97 84 #define on 0 // Estado para boton presionado
Antulius 4:ffffec15fa97 85 #define off 1 // Estado para boton sin presionar
Antulius 4:ffffec15fa97 86 #define hold 2 // Estado para boton mantenido presionado
Antulius 4:ffffec15fa97 87 #define release 3 // Estado para boton al liberarse
Antulius 4:ffffec15fa97 88 #define Buzz_On 1 // Buzzer Encendido
Antulius 4:ffffec15fa97 89 #define Buzz_Off 0 // Buzzer Apagado
Antulius 4:ffffec15fa97 90 #define HIGH 1 //
Antulius 4:ffffec15fa97 91 #define LOW 0 //
Antulius 0:f1e9b42f90d0 92 /*
Antulius 0:f1e9b42f90d0 93 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 94 ** Inicialización de los Pines de Entrada.
Antulius 0:f1e9b42f90d0 95 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 96 */
Antulius 0:f1e9b42f90d0 97 DigitalIn PIN_SWITCH (PTC4,PullUp); // Switch de Puerta Abierta
Antulius 0:f1e9b42f90d0 98 DigitalIn PIN_BOK (PTC6,PullUp); // Botón OK
Antulius 0:f1e9b42f90d0 99 DigitalIn PIN_BDERECHO (PTC7,PullUp); // Botón DERECHA
Antulius 0:f1e9b42f90d0 100 DigitalIn PIN_BARRIBA (PTC8,PullUp); // Botón ARRIBA
Antulius 0:f1e9b42f90d0 101 DigitalIn PIN_BABAJO (PTC9,PullUp); // Botón ABAJO
Antulius 0:f1e9b42f90d0 102 DigitalIn PIN_BIZQUIERDO (PTC10,PullUp); // Botón IZQUIERDA
Antulius 0:f1e9b42f90d0 103 DigitalIn PIN_BRETURN (PTC11,PullUp); // Botón RETURN
Antulius 0:f1e9b42f90d0 104 /*
Antulius 0:f1e9b42f90d0 105 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 106 ** Inicialización de los Pines de Salida.
Antulius 0:f1e9b42f90d0 107 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 108 */
Antulius 0:f1e9b42f90d0 109 DigitalOut PIN_BUZZER (PTB20); // Buzzer Piezo Eléctrico
Antulius 4:ffffec15fa97 110 DigitalOut PIN_MOTOR (PTA12); // Encendido/Apagado del Elemento de Ventilación
Antulius 0:f1e9b42f90d0 111 DigitalOut Red_Led (PTE29); // Led de Actividad del Programa
Antulius 0:f1e9b42f90d0 112 DigitalOut Green_Led (PTD5); // Led de Actividad del Programa
Antulius 9:5d4a4c23d7c5 113 // Soporte LED RGB
Antulius 9:5d4a4c23d7c5 114 //DigitalOut Led_Rojo(PTE6); // Led RGB
Antulius 9:5d4a4c23d7c5 115 //DigitalOut Led_Verde(PTE3); // Led RGB
Antulius 9:5d4a4c23d7c5 116 //DigitalOut Led_Azul (PTE2); // Led RGB
Antulius 0:f1e9b42f90d0 117 /*
Antulius 0:f1e9b42f90d0 118 ** -------------------------------------------------------------------
Antulius 4:ffffec15fa97 119 ** Inicialización de las Salidas PWM.
Antulius 0:f1e9b42f90d0 120 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 121 */
Antulius 4:ffffec15fa97 122 PwmOut PIN_QUEMADOR (PTE31); // PWM Control del Elemento Calefactor
Antulius 0:f1e9b42f90d0 123
Antulius 0:f1e9b42f90d0 124 /*
Antulius 0:f1e9b42f90d0 125 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 126 ** Inicialización de las Entradas Analógicas.
Antulius 0:f1e9b42f90d0 127 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 128 */
Antulius 0:f1e9b42f90d0 129 //AnalogIn Temperatura (PTB0); // Sensor de Temperatura: LM35
Antulius 0:f1e9b42f90d0 130 //AnalogIn Fotocelda (PTB1); // Sensor de Luminosidad: Fotocelda
Antulius 0:f1e9b42f90d0 131 //AnalogIn Ozono (PTB2); // Sensor de Ozono: KS123
Antulius 0:f1e9b42f90d0 132 /*
Antulius 0:f1e9b42f90d0 133 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 134 ** Inicialización de los Pines de Funciones Especiales.
Antulius 0:f1e9b42f90d0 135 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 136 */
Antulius 0:f1e9b42f90d0 137 /*************************************************
Antulius 0:f1e9b42f90d0 138 * Initialize the library with the numbers of the interface pins
Antulius 0:f1e9b42f90d0 139 * Board Freedom FRDM-KL46Z
Antulius 0:f1e9b42f90d0 140 * IDE Mbed On Line Compiler
Antulius 0:f1e9b42f90d0 141 * LCD I2C PCF8574A
Antulius 0:f1e9b42f90d0 142 * Pin Board LCD
Antulius 0:f1e9b42f90d0 143 * I2C_SCL SCL (white) + resistance pull-up 4.7k
Antulius 0:f1e9b42f90d0 144 * I2C_SDA SDA (blue) + resistance pull-up 4.7k
Antulius 0:f1e9b42f90d0 145 * 5V 5V (red)
Antulius 0:f1e9b42f90d0 146 * GND GND (black)
Antulius 0:f1e9b42f90d0 147 ***************************************************/
Antulius 0:f1e9b42f90d0 148 //LiquidCrystal_I2C lcd(0x7E, LCDCOLUMNAS, LCDFILAS);
Antulius 0:f1e9b42f90d0 149 //i2c_LCD lcd(0x7E, LCDCOLUMNAS, LCDFILAS);
Antulius 0:f1e9b42f90d0 150
Antulius 0:f1e9b42f90d0 151 /*************************************************
Antulius 0:f1e9b42f90d0 152 * Initialize the library with the numbers of the interface pins
Antulius 0:f1e9b42f90d0 153 * Board Freedom FRDM-KL46Z
Antulius 0:f1e9b42f90d0 154 * IDE Mbed On Line Compiler
Antulius 0:f1e9b42f90d0 155 * LCD SPI 74595
Antulius 0:f1e9b42f90d0 156 * Pin Board LCD
Antulius 0:f1e9b42f90d0 157 * SPI_MOSI SER (white)
Antulius 0:f1e9b42f90d0 158 * SPI_MISO none (blue)
Antulius 0:f1e9b42f90d0 159 * SPI_CLK SRCLK
Antulius 0:f1e9b42f90d0 160 * SPI_PCS RCLK
Antulius 0:f1e9b42f90d0 161 * 5V 5V (red)
Antulius 0:f1e9b42f90d0 162 * GND GND (black)
Antulius 0:f1e9b42f90d0 163 ***************************************************/
Antulius 10:fb06357df7d7 164 // Host PC Communication channels
Antulius 0:f1e9b42f90d0 165 Serial Terminal(USBTX, USBRX); // Tx, Rx
Antulius 0:f1e9b42f90d0 166 //Serial Terminal(PTA2,PTA1); // Terminal Serial
Antulius 10:fb06357df7d7 167 //Serial Terminal(PTE0, PTE1); // Tx, Rx Using MAX3232 or BlueTooth
Antulius 10:fb06357df7d7 168
Antulius 10:fb06357df7d7 169 // Bluetooth Communication support
Antulius 10:fb06357df7d7 170 Serial bluetooth(PTE0, PTE1); // Tx, Rx
Antulius 0:f1e9b42f90d0 171
Antulius 0:f1e9b42f90d0 172 // I2C Communication
Antulius 13:a6dd1f4321e3 173 //I2C i2c_LCD(PTC2,PTC1); // SDA, SCL
Antulius 9:5d4a4c23d7c5 174
Antulius 0:f1e9b42f90d0 175 // SPI Communication
Antulius 13:a6dd1f4321e3 176 SPI spi_LCD(PTD6,PTD7,PTD5,PTD4); // MOSI, MISO, SCLK, SSEL
Antulius 0:f1e9b42f90d0 177
Antulius 0:f1e9b42f90d0 178 // LCD instantiation
Antulius 0:f1e9b42f90d0 179 //TextLCD LCD(PTC5, PTC6, PTC8, PTC9, PTC10, PCT11, TextLCD::LCD20x2); // 4bit bus: rs, e, d4-d7
Antulius 13:a6dd1f4321e3 180 TextLCD_SPI lcd(&spi_LCD, PTD4, TextLCD::LCD16x4, TextLCD::HD44780); // SPI bus, SN74595 expander, CS pin, LCD Type
Antulius 13:a6dd1f4321e3 181 //TextLCD_I2C lcd(&i2c_LCD, 0x7E, TextLCD::LCD20x4); // I2C bus, PCF8574A Arduino Shield, LCD Type
Antulius 0:f1e9b42f90d0 182
Antulius 12:e134e66034c7 183 //librerias del Sensor de Humedad y Temperatura
Antulius 13:a6dd1f4321e3 184 //DHT dht(PTA13, DHT_TIPO); // DHT_PIN, DHT_TIPO (DHT11, DHT22)
Antulius 13:a6dd1f4321e3 185 DHT22 dht(PTA13); // DHT22_Pin
Antulius 0:f1e9b42f90d0 186
Antulius 0:f1e9b42f90d0 187 /*
Antulius 0:f1e9b42f90d0 188 ** ===================================================================
Antulius 0:f1e9b42f90d0 189 ** Variables del Programa
Antulius 0:f1e9b42f90d0 190 ** ===================================================================
Antulius 0:f1e9b42f90d0 191 */
Antulius 0:f1e9b42f90d0 192 /* -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 193 ** Variables Booleanas.
Antulius 0:f1e9b42f90d0 194 **
Antulius 0:f1e9b42f90d0 195 ** Para la Botonera, Checar_Botones()
Antulius 0:f1e9b42f90d0 196 ** Variables de cada Boton.
Antulius 0:f1e9b42f90d0 197 ** Posibles Valores:
Antulius 0:f1e9b42f90d0 198 ** 0 - No esta siendo apretado.
Antulius 0:f1e9b42f90d0 199 ** 1 - Esta siendo apretado.
Antulius 0:f1e9b42f90d0 200 ** -------------------------------------------------------------------*/
Antulius 0:f1e9b42f90d0 201 bool B_Arriba;
Antulius 0:f1e9b42f90d0 202 bool B_Abajo;
Antulius 0:f1e9b42f90d0 203 bool B_Izquierdo;
Antulius 0:f1e9b42f90d0 204 bool B_Derecho;
Antulius 0:f1e9b42f90d0 205 bool B_Ok;
Antulius 0:f1e9b42f90d0 206 bool B_Return;
Antulius 0:f1e9b42f90d0 207
Antulius 0:f1e9b42f90d0 208 /* -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 209 ** Variables Booleanas.
Antulius 0:f1e9b42f90d0 210 **
Antulius 0:f1e9b42f90d0 211 ** Para el Motor y Quemador
Antulius 0:f1e9b42f90d0 212 ** Variables de componentes a controlar.
Antulius 0:f1e9b42f90d0 213 ** Posibles Valores:
Antulius 0:f1e9b42f90d0 214 ** 0 - Dispositivo apagado.
Antulius 0:f1e9b42f90d0 215 ** 1 - Dispositivo encendido.
Antulius 0:f1e9b42f90d0 216 ** -------------------------------------------------------------------*/
Antulius 0:f1e9b42f90d0 217 bool Motor;
Antulius 0:f1e9b42f90d0 218 bool Quemador;
Antulius 0:f1e9b42f90d0 219
Antulius 0:f1e9b42f90d0 220 /* -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 221 ** Variables Booleanas.
Antulius 0:f1e9b42f90d0 222 **
Antulius 0:f1e9b42f90d0 223 ** Para el Control de Interfaz.
Antulius 0:f1e9b42f90d0 224 ** Variables que ayudan al desplazamiento de cada interfaz.
Antulius 0:f1e9b42f90d0 225 ** Posibles Valores.
Antulius 0:f1e9b42f90d0 226 ** 0 - Acción Autorizada.
Antulius 0:f1e9b42f90d0 227 ** 1- Acción No Autorizada.
Antulius 0:f1e9b42f90d0 228 ** -------------------------------------------------------------------*/
Antulius 0:f1e9b42f90d0 229 bool Bandera;
Antulius 0:f1e9b42f90d0 230 bool Avanzar;
Antulius 0:f1e9b42f90d0 231 bool Deshidratando;
Antulius 0:f1e9b42f90d0 232 bool PuertaAb;
Antulius 0:f1e9b42f90d0 233 bool Scroll_Cambio;
Antulius 0:f1e9b42f90d0 234
Antulius 0:f1e9b42f90d0 235 /* -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 236 ** Variables enteras sin signo.
Antulius 0:f1e9b42f90d0 237 **
Antulius 0:f1e9b42f90d0 238 ** La variables guardan las opciones disponibles de la interfaz.
Antulius 0:f1e9b42f90d0 239 ** -------------------------------------------------------------------*/
Antulius 0:f1e9b42f90d0 240
Antulius 0:f1e9b42f90d0 241 uint16_t Opcion; //Guarda la opción actual en la que se encuentra la interfaz.
Antulius 0:f1e9b42f90d0 242 uint16_t Opcion_Ant; //Guarda la opción Anterior en la que se encontraba la interfaz.
Antulius 0:f1e9b42f90d0 243 uint16_t Opcion_Max; //Guarda el número máximo de opciones disponibles en el menú que se encuentra la Interfaz.
Antulius 0:f1e9b42f90d0 244 uint16_t Scroll;
Antulius 0:f1e9b42f90d0 245
Antulius 0:f1e9b42f90d0 246 /* -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 247 ** Variables flotantes.
Antulius 0:f1e9b42f90d0 248 **
Antulius 0:f1e9b42f90d0 249 ** Variables que guardan datos de los sensores.
Antulius 0:f1e9b42f90d0 250 ** -------------------------------------------------------------------*/
Antulius 0:f1e9b42f90d0 251
Antulius 12:e134e66034c7 252 float humedad; //Guarda la Humedad del ambiente.
Antulius 12:e134e66034c7 253 float temperatura; //Guarda la Temperatura del ambiente.
Antulius 0:f1e9b42f90d0 254 float TF; //Variable que guarda la temperatura final.
Antulius 0:f1e9b42f90d0 255 float HF; //Variable que guarda la humedad final.
Antulius 0:f1e9b42f90d0 256
Antulius 0:f1e9b42f90d0 257 //Variables de Rangos de control
Antulius 0:f1e9b42f90d0 258 float Hot_min = 25;
Antulius 0:f1e9b42f90d0 259 float Hot_max = 35;
Antulius 0:f1e9b42f90d0 260 float Hum_min = 70;
Antulius 0:f1e9b42f90d0 261 float Hum_max = 90;
Antulius 0:f1e9b42f90d0 262
Antulius 0:f1e9b42f90d0 263 /* -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 264 ** Variables de tipo caracter.
Antulius 0:f1e9b42f90d0 265 **
Antulius 0:f1e9b42f90d0 266 ** Arreglo de Caracteres
Antulius 0:f1e9b42f90d0 267 ** -------------------------------------------------------------------*/
Antulius 0:f1e9b42f90d0 268 char Sensores[CONDALARM][20] = {" TEMPERATURA", " HUMEDAD"}; //Arreglo que guarda el nombre de los sensores
Antulius 0:f1e9b42f90d0 269 char Fruta[NOFRUTAS][20] = {"ARANDANO", "AJO", "HIGO", "MELON", "MANZANA", "PLATANO", "PAPA", "JITOMATE", "MANGO", "UVA", "OTRO"}; // Arreglo que guarda el nombre de las frutas disponibles
Antulius 0:f1e9b42f90d0 270 int16_t Temp[NOFRUTAS] = { 55, 55, 65, 60, 50, 70, 55, 65, 65, 55, 55}; // Vector que contiene temperatura de deshidratacion de la fruta.
Antulius 0:f1e9b42f90d0 271 int16_t Hume[NOFRUTAS] = { 15, 10, 16, 18, 14, 15, 12, 8, 16, 15, 15}; //Vector que contiene la humedad de la fruta.
Antulius 0:f1e9b42f90d0 272 int16_t Seg; //Variable que guarda segundos.
Antulius 0:f1e9b42f90d0 273 int16_t Min; //Variable que guarda minuros.
Antulius 0:f1e9b42f90d0 274 int16_t Hor; //Variable que guarda horas.
Antulius 0:f1e9b42f90d0 275
Antulius 0:f1e9b42f90d0 276 char Flecha = 126; //Tiene el valor en ascii de la flecha.
Antulius 0:f1e9b42f90d0 277 char Porcentaje = 37;
Antulius 0:f1e9b42f90d0 278 char Celcius = 223;
Antulius 0:f1e9b42f90d0 279 int16_t NInterrupciones;
Antulius 0:f1e9b42f90d0 280 int16_t DC;
Antulius 10:fb06357df7d7 281 float DUTYCYCLE=0.7071; //Valor RMS para el PWM
Antulius 10:fb06357df7d7 282 uint8_t buf[128]; //Buffer para Transmisión y Recepción Serial
Antulius 10:fb06357df7d7 283 /* -------------------------------------------------------------------
Antulius 10:fb06357df7d7 284 ** Variables para Códigos de Error.
Antulius 10:fb06357df7d7 285 **
Antulius 10:fb06357df7d7 286 ** Variables que guardan el estado de los dispositivos y sensores.
Antulius 10:fb06357df7d7 287 ** -------------------------------------------------------------------*/
Antulius 9:5d4a4c23d7c5 288 int16_t error_code; //Retorno del Código de Error de las funciones
Antulius 0:f1e9b42f90d0 289
Antulius 0:f1e9b42f90d0 290 /*
Antulius 0:f1e9b42f90d0 291 ** ===================================================================
Antulius 0:f1e9b42f90d0 292 ** Declaración de Funciones Prototipo
Antulius 0:f1e9b42f90d0 293 ** Funciones de Usuario.
Antulius 0:f1e9b42f90d0 294 ** ===================================================================
Antulius 0:f1e9b42f90d0 295 */
Antulius 0:f1e9b42f90d0 296 void setup(void);
Antulius 0:f1e9b42f90d0 297 void Checar_Botones();
Antulius 0:f1e9b42f90d0 298 bool Deshidratacion(int FrutaD);
Antulius 0:f1e9b42f90d0 299 void Checar_Calefactor(int TempD);
Antulius 0:f1e9b42f90d0 300 void Interrupcion();
Antulius 0:f1e9b42f90d0 301 void Intro();
Antulius 0:f1e9b42f90d0 302 void Imprime_Menu();
Antulius 0:f1e9b42f90d0 303 void Imprime_InfoDeshidratacion();
Antulius 0:f1e9b42f90d0 304 void Imprime_InfoSensores();
Antulius 0:f1e9b42f90d0 305 void Imprime_Tiempo(int, int);
Antulius 0:f1e9b42f90d0 306 void Inicio();
Antulius 0:f1e9b42f90d0 307 void Conf_Otro();
Antulius 0:f1e9b42f90d0 308 void Alarmas();
Antulius 0:f1e9b42f90d0 309 void Contacto();
Antulius 0:f1e9b42f90d0 310 void Acerca();
Antulius 0:f1e9b42f90d0 311 void Imprime_Flecha();
Antulius 0:f1e9b42f90d0 312 void Apagar_Calefactor();
Antulius 0:f1e9b42f90d0 313 void Reporte_Des();
Antulius 0:f1e9b42f90d0 314 bool inf_fruta(int);
Antulius 0:f1e9b42f90d0 315 bool Puerta_Abierta();
Antulius 0:f1e9b42f90d0 316 void Conteo_Cronometro();
Antulius 0:f1e9b42f90d0 317 void Init_Conometro();
Antulius 0:f1e9b42f90d0 318 void Init_Var();
Antulius 0:f1e9b42f90d0 319 void ConfT2_PWM3(int);
Antulius 0:f1e9b42f90d0 320 void CalefactorON();
Antulius 0:f1e9b42f90d0 321 void CalefactorOFF();
Antulius 0:f1e9b42f90d0 322 void MotorON(int);
Antulius 0:f1e9b42f90d0 323 void MotorOFF();
Antulius 0:f1e9b42f90d0 324
Antulius 0:f1e9b42f90d0 325 /*
Antulius 0:f1e9b42f90d0 326 ** ###################################################################
Antulius 0:f1e9b42f90d0 327 **
Antulius 0:f1e9b42f90d0 328 ** P R O G R A M A P R I N C I P A L
Antulius 0:f1e9b42f90d0 329 **
Antulius 0:f1e9b42f90d0 330 ** para la operación del microcontrolador MKL46Z256VLL4.
Antulius 0:f1e9b42f90d0 331 **
Antulius 0:f1e9b42f90d0 332 ** ###################################################################
Antulius 0:f1e9b42f90d0 333 */
Antulius 0:f1e9b42f90d0 334 int main()
Antulius 0:f1e9b42f90d0 335 {
Antulius 1:456851b4e285 336 /*
Antulius 1:456851b4e285 337 ** ===================================================================
Antulius 1:456851b4e285 338 ** InicializaciÓn interna de la Tarjeta FRDM-KL46Z.
Antulius 1:456851b4e285 339 ** ===================================================================
Antulius 1:456851b4e285 340 */
Antulius 0:f1e9b42f90d0 341
Antulius 1:456851b4e285 342 setup(); //Inicializa el Hardware Principal
Antulius 0:f1e9b42f90d0 343 /*
Antulius 0:f1e9b42f90d0 344 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 345 ** Inicialización de las Interrupciones.
Antulius 0:f1e9b42f90d0 346 ** Ticker Inicialzation
Antulius 0:f1e9b42f90d0 347 ** -------------------------------------------------------------------
Antulius 0:f1e9b42f90d0 348 */
Antulius 0:f1e9b42f90d0 349 Ticker TimerInt; // Asignación del vector de interrupción para el Ticker
Antulius 0:f1e9b42f90d0 350
Antulius 0:f1e9b42f90d0 351 TimerInt.attach(&Interrupcion, 0.250); // Periodo de Interrupción = 250ms
RazielLopez 6:46bc4477b9ef 352 while (true){
RazielLopez 6:46bc4477b9ef 353 Init_Var(); //Inicializamos variables iniciales.
RazielLopez 6:46bc4477b9ef 354 Scroll = 0; //Colocamos scroll de pantalla en 0;
RazielLopez 6:46bc4477b9ef 355 Opcion_Ant = 1; //Colocamos Opcion anterior en 1
RazielLopez 6:46bc4477b9ef 356 Opcion_Max = 4; //Número Máximo de opciones es 4.
RazielLopez 6:46bc4477b9ef 357 // interrupts(); //Autoriza las interrupciones.
RazielLopez 6:46bc4477b9ef 358 Terminal.printf("Main Menu\n\r");
RazielLopez 6:46bc4477b9ef 359 Imprime_Menu(); //Imprime el Menú.
RazielLopez 6:46bc4477b9ef 360 while (!Avanzar) { //Entra al Bucle hasta que el valor de Avanzar no cambie a 1.
RazielLopez 6:46bc4477b9ef 361 Imprime_Flecha(); //Imprime la Flecha en el display en la posicion de la opcion.
RazielLopez 6:46bc4477b9ef 362 wait_ms(250); //Colocamos un retraso de 250 ms para que no entre a un bucle infinito y tenga tiempo disponible para hacer otras interrupciones.
RazielLopez 6:46bc4477b9ef 363 }
RazielLopez 6:46bc4477b9ef 364 switch (Opcion) { //Dependiendo la opción seleccionada llama a la función correspondiente.
RazielLopez 6:46bc4477b9ef 365 case 1:
RazielLopez 6:46bc4477b9ef 366 Inicio();
RazielLopez 6:46bc4477b9ef 367 break;
RazielLopez 6:46bc4477b9ef 368 case 2:
RazielLopez 6:46bc4477b9ef 369 Conf_Otro();
RazielLopez 6:46bc4477b9ef 370 break;
RazielLopez 6:46bc4477b9ef 371 case 3:
RazielLopez 6:46bc4477b9ef 372 Contacto();
RazielLopez 6:46bc4477b9ef 373 break;
RazielLopez 6:46bc4477b9ef 374 case 4:
RazielLopez 6:46bc4477b9ef 375 Acerca();
RazielLopez 6:46bc4477b9ef 376 break;
RazielLopez 6:46bc4477b9ef 377 }
Antulius 0:f1e9b42f90d0 378 }
RazielLopez 6:46bc4477b9ef 379
Antulius 0:f1e9b42f90d0 380 }
Antulius 1:456851b4e285 381 /*
Antulius 1:456851b4e285 382 ** ###################################################################
Antulius 1:456851b4e285 383 ** FIN DEL PROGRAMA PRINCIPAL
Antulius 1:456851b4e285 384 ** ###################################################################
Antulius 1:456851b4e285 385 */
Antulius 1:456851b4e285 386 /*
Antulius 1:456851b4e285 387 ** ===================================================================
Antulius 1:456851b4e285 388 ** Prototipo : setup ()
Antulius 1:456851b4e285 389 ** Componente : Cpu [MKL46Z256VLL]
Antulius 1:456851b4e285 390 ** Descripción :
Antulius 1:456851b4e285 391 ** Esta función inicializa el hardware y puertos de comunicación
Antulius 1:456851b4e285 392 ** "Serial", "I2C" y "LCD"
Antulius 1:456851b4e285 393 ** Argumentos : Ninguno
Antulius 1:456851b4e285 394 ** Retorna : Nada
Antulius 1:456851b4e285 395 ** ===================================================================
Antulius 1:456851b4e285 396 */
Antulius 0:f1e9b42f90d0 397 void setup() {
Antulius 1:456851b4e285 398 /* Inicia la comunicación la Terminal */ /* 115200 Bauds, 8 bits, 1 stop, N parity */
Antulius 1:456851b4e285 399 Terminal.baud(115200); // Se inicia la comunicación serial.
Antulius 1:456851b4e285 400 Terminal.printf(" System is Wake Up!.\n\r");
Antulius 10:fb06357df7d7 401 /* Inicialización del Bluetooth */
Antulius 10:fb06357df7d7 402 bluetooth.baud(115200); // Se inicia la comunicación Bluetooth.
Antulius 10:fb06357df7d7 403 // bluetooth.scanf("%s", buf); //Lee un caracter desde el Bluetooth
Antulius 10:fb06357df7d7 404 // bluetooth.printf("recv: %s", buf); //Hace eco al Bluetooth
Antulius 10:fb06357df7d7 405 // Terminal.printf("recv: %s\r\n", buf); //Imprime en la terminal el caracter recibido
Antulius 10:fb06357df7d7 406 bluetooth.printf("Bluetooth Starting OK! ... \n\r");
Antulius 10:fb06357df7d7 407 Terminal.printf("Bluetooth Starting OK! ... \n\r");
Antulius 1:456851b4e285 408 /* Prueba del Buzzer */
Antulius 1:456851b4e285 409 Terminal.printf("Testing Buzzer... \n\r");
Antulius 0:f1e9b42f90d0 410 PIN_BUZZER = Buzz_On;
Antulius 0:f1e9b42f90d0 411 wait_ms(750);
Antulius 0:f1e9b42f90d0 412 PIN_BUZZER = Buzz_Off;
Antulius 0:f1e9b42f90d0 413 wait_ms(125);
Antulius 0:f1e9b42f90d0 414 PIN_BUZZER = Buzz_On;
Antulius 0:f1e9b42f90d0 415 wait_ms(250);
Antulius 0:f1e9b42f90d0 416 PIN_BUZZER = Buzz_Off;
Antulius 0:f1e9b42f90d0 417 wait_ms(125);
Antulius 0:f1e9b42f90d0 418 PIN_BUZZER = Buzz_On;
Antulius 0:f1e9b42f90d0 419 wait_ms(500);
Antulius 0:f1e9b42f90d0 420 PIN_BUZZER = Buzz_Off;
Antulius 0:f1e9b42f90d0 421 /* Configufración del Display LCD */ /* Mucho OjO !!! */
Antulius 13:a6dd1f4321e3 422 spi_LCD.frequency(100000); // Frecuencia de operación para el SPI (100KHz)
Antulius 13:a6dd1f4321e3 423 spi_LCD.format(8,0); // Modo de Operación para el SPI
Antulius 13:a6dd1f4321e3 424 // i2c_LCD.frequency(100000); // Frecuencia de operación para el I2C (100KHz)
Antulius 13:a6dd1f4321e3 425 // i2c_LCD.start(); // Inicio de operación para el I2C
Antulius 0:f1e9b42f90d0 426 /* Arranque del Display LCD */
Antulius 1:456851b4e285 427 Terminal.printf("LCD Display is Starting...\n\r");
Antulius 0:f1e9b42f90d0 428 // lcd.init(TextLCD::LCDDatalength, 4 ); // Enciende la Iluminación de Fondo
Antulius 0:f1e9b42f90d0 429 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 0:f1e9b42f90d0 430 lcd.setCursor(TextLCD::CurOff_BlkOff);
Antulius 0:f1e9b42f90d0 431 lcd.cls(); // Limpia el Display LCD
Antulius 0:f1e9b42f90d0 432 lcd.printf("Hello World!\n"); // El LCD saluda al Mundo!
Antulius 0:f1e9b42f90d0 433 lcd.printf("Hola Mundo!\n"); // El LCD saluda al Mundo!
Antulius 0:f1e9b42f90d0 434 lcd.printf("Ciao Mondo!\n"); // El LCD saluda al Mundo!
Antulius 1:456851b4e285 435 lcd.printf("Bonjour le Monde"); // El LCD saluda al Mundo!
Antulius 1:456851b4e285 436 wait(2);
Antulius 1:456851b4e285 437 lcd.cls(); // Limpia el Display LCD
Antulius 1:456851b4e285 438 lcd.setBacklight(TextLCD::LightOff); // Apaga la Iluminación de Fondo
Antulius 13:a6dd1f4321e3 439 Timer Elpased_Time; //Inicialia el Vector del Tiempo a Transcurrir
Antulius 13:a6dd1f4321e3 440 Elpased_Time.start(); //Inicialia el Tiempo a Transcurrir
Antulius 1:456851b4e285 441 for (int row=0; row<lcd.rows(); row++)// Prueba toda la Pantalla
Antulius 0:f1e9b42f90d0 442 {
Antulius 0:f1e9b42f90d0 443 uint16_t col=0;
Antulius 1:456851b4e285 444 lcd.putc('0' + row);
Antulius 0:f1e9b42f90d0 445 for (col=1; col<lcd.columns()-1; col++)
Antulius 0:f1e9b42f90d0 446 {
Antulius 1:456851b4e285 447 lcd.putc('*'); //llena lalinea con el caracter "*"
Antulius 0:f1e9b42f90d0 448 }
Antulius 1:456851b4e285 449 lcd.putc('+'); //Al final pone el caracter "+"
Antulius 0:f1e9b42f90d0 450 }
Antulius 5:0c35e593b3f2 451 Elpased_Time.start(); //Calcula el tiempo transcurrido
Antulius 1:456851b4e285 452 Terminal.printf("All my hard work took %f sec\r\n", Elpased_Time.read());
Antulius 1:456851b4e285 453 wait(1);
Antulius 1:456851b4e285 454 Terminal.printf("LCD Display and TextLCD Enhanced Test Completed.\n\r");
Antulius 1:456851b4e285 455 lcd.cls();
Antulius 1:456851b4e285 456 lcd.setCursor(TextLCD::CurOff_BlkOn); //
Antulius 1:456851b4e285 457 // Set and show user defined characters. A maximum of 8 UDCs are supported by the HD44780.
Antulius 1:456851b4e285 458 // They are defined by a 5x7 bitpattern.
Antulius 1:456851b4e285 459 lcd.setUDC(0, (char *) udc_0); // Show |>
Antulius 1:456851b4e285 460 lcd.putc(0);
Antulius 10:fb06357df7d7 461 Terminal.printf("LCD Starting OK! ... \n\r");
Antulius 1:456851b4e285 462 wait_ms(500);
Antulius 10:fb06357df7d7 463 Terminal.printf("\rPrinting Intro \n\r");
Antulius 1:456851b4e285 464 Intro(); // Se ejecuta la Introducción en la LCD.
Antulius 1:456851b4e285 465 uint16_t NInterrupciones = 0; //Contador de Interrupciones (util para ahorro de energía).
Antulius 0:f1e9b42f90d0 466 }
Antulius 0:f1e9b42f90d0 467
Antulius 0:f1e9b42f90d0 468 /*** Fin de la initialization interna. ***/
Antulius 0:f1e9b42f90d0 469
Antulius 0:f1e9b42f90d0 470
Antulius 0:f1e9b42f90d0 471 /*
Antulius 0:f1e9b42f90d0 472 ** ===================================================================
Antulius 0:f1e9b42f90d0 473 ** Prototipo : Init_Var (Inicializa variables de estado)
Antulius 0:f1e9b42f90d0 474 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 475 ** Descripción :
Antulius 0:f1e9b42f90d0 476 ** Esta función inicializa las banderas de estado para
Antulius 0:f1e9b42f90d0 477 ** "Bandera", "Avanzar" y "Opción"
Antulius 0:f1e9b42f90d0 478 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 479 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 480 ** ===================================================================
Antulius 0:f1e9b42f90d0 481 */
Antulius 0:f1e9b42f90d0 482 void Init_Var() {
Antulius 0:f1e9b42f90d0 483 Bandera = 0; //Bandera en 0.
Antulius 0:f1e9b42f90d0 484 Avanzar = 0; //Avanzar en 0.
Antulius 5:0c35e593b3f2 485 Opcion = 1; //Colocamos en Opcion 1.
Antulius 0:f1e9b42f90d0 486 }
Antulius 0:f1e9b42f90d0 487
Antulius 0:f1e9b42f90d0 488 /*
Antulius 0:f1e9b42f90d0 489 ** ===================================================================
Antulius 0:f1e9b42f90d0 490 ** Prototipo : Imprime_Flecha() (Imprime la Flecha)
Antulius 0:f1e9b42f90d0 491 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 492 ** Descripción :
Antulius 0:f1e9b42f90d0 493 ** Con ayuda de las opciones, imprime la flecha en la opcion
Antulius 0:f1e9b42f90d0 494 ** seleccionada, moviendola a traves del menú.
Antulius 0:f1e9b42f90d0 495 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 496 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 497 ** ===================================================================
Antulius 0:f1e9b42f90d0 498 */
Antulius 0:f1e9b42f90d0 499
Antulius 0:f1e9b42f90d0 500 void Imprime_Flecha() {
Antulius 0:f1e9b42f90d0 501 lcd.locate(0, Opcion_Ant - 1 - Scroll); //Coloca cursor de la LCD en la Opcion Anterior.
Antulius 1:456851b4e285 502 lcd.printf(" "); //Borra la flecha que previamente impresa.
Antulius 0:f1e9b42f90d0 503 lcd.locate(0, Opcion - 1 - Scroll); //Coloca cursor de la LCD en la Opcion Actual.
Antulius 1:456851b4e285 504 lcd.setUDC(0, (char *) udc_0); // Show |>
Antulius 1:456851b4e285 505 lcd.putc(0); //Imprime la nueva flecha.
Antulius 0:f1e9b42f90d0 506 }
Antulius 0:f1e9b42f90d0 507
Antulius 0:f1e9b42f90d0 508 /*
Antulius 0:f1e9b42f90d0 509 ** ===================================================================
Antulius 0:f1e9b42f90d0 510 ** Prototipo : Checar_Botones() (Verifica el estado de la botonera)
Antulius 0:f1e9b42f90d0 511 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 512 ** Descripción :
Antulius 0:f1e9b42f90d0 513 ** Verifica si algún boton está siendo presionado,
Antulius 0:f1e9b42f90d0 514 ** e indaga su posición y envia por la terminal serial
Antulius 0:f1e9b42f90d0 515 ** la ubicación del botón seleccionado
Antulius 0:f1e9b42f90d0 516 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 517 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 518 ** ===================================================================
Antulius 0:f1e9b42f90d0 519 */
Antulius 0:f1e9b42f90d0 520
Antulius 0:f1e9b42f90d0 521 void Checar_Botones() {
Antulius 1:456851b4e285 522
Antulius 1:456851b4e285 523 B_Arriba = !PIN_BARRIBA; //Lee el pin y lo asigna a la variable booleana correspondiente.
Antulius 0:f1e9b42f90d0 524 if (B_Arriba) //Si se presionó envia mensaje al serial para mostarlo en la terminal.
Antulius 1:456851b4e285 525 Terminal.printf("Arriba \r");
Antulius 0:f1e9b42f90d0 526
Antulius 1:456851b4e285 527 B_Abajo = !PIN_BABAJO;
Antulius 0:f1e9b42f90d0 528 if (B_Abajo)
Antulius 1:456851b4e285 529 Terminal.printf("Abajo \r");
Antulius 0:f1e9b42f90d0 530
Antulius 1:456851b4e285 531 B_Izquierdo = !PIN_BIZQUIERDO;
Antulius 1:456851b4e285 532 if (B_Izquierdo)
Antulius 1:456851b4e285 533 Terminal.printf("Izquierdo\r");
Antulius 1:456851b4e285 534
Antulius 1:456851b4e285 535 B_Derecho = !PIN_BDERECHO;
Antulius 0:f1e9b42f90d0 536 if (B_Derecho)
Antulius 1:456851b4e285 537 Terminal.printf("Derecho \r");
Antulius 0:f1e9b42f90d0 538
Antulius 1:456851b4e285 539 B_Ok = !PIN_BOK;
Antulius 0:f1e9b42f90d0 540 if (B_Ok)
Antulius 1:456851b4e285 541 Terminal.printf("Ok \r");
Antulius 0:f1e9b42f90d0 542
Antulius 1:456851b4e285 543 B_Return = !PIN_BRETURN;
Antulius 0:f1e9b42f90d0 544 if (B_Return)
Antulius 1:456851b4e285 545 Terminal.printf("Return \r");
Antulius 0:f1e9b42f90d0 546
Antulius 0:f1e9b42f90d0 547 if (B_Arriba || B_Abajo || B_Izquierdo || B_Derecho || B_Ok || B_Return ) { //Verifica si algun boton fue apretado
RazielLopez 6:46bc4477b9ef 548 PIN_BUZZER = Buzz_On; //Enciende el buzzer.
Antulius 0:f1e9b42f90d0 549 } else
Antulius 0:f1e9b42f90d0 550 PIN_BUZZER = Buzz_Off; //Si no se presiono algun boton se apaga el buzzer.
Antulius 0:f1e9b42f90d0 551 }
Antulius 0:f1e9b42f90d0 552
Antulius 0:f1e9b42f90d0 553 /*
Antulius 0:f1e9b42f90d0 554 ** ===================================================================
Antulius 0:f1e9b42f90d0 555 ** Prototipo : Interrupcion() (Verifica el estado de la botonera)
Antulius 0:f1e9b42f90d0 556 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 557 ** Descripción :
Antulius 0:f1e9b42f90d0 558 ** Con las interrupciones activadas se manda llamar a esta funcion.
Antulius 0:f1e9b42f90d0 559 ** Verifica si algun boton esta siendo presionado y habilita o
Antulius 0:f1e9b42f90d0 560 ** deshabiita banderas para Avanzar dentro del menú de la interfaz.
Antulius 0:f1e9b42f90d0 561 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 562 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 563 ** ===================================================================
Antulius 0:f1e9b42f90d0 564 */
Antulius 0:f1e9b42f90d0 565
Antulius 0:f1e9b42f90d0 566 void Interrupcion() {
Antulius 0:f1e9b42f90d0 567
Antulius 0:f1e9b42f90d0 568 if (Deshidratando) {
Antulius 0:f1e9b42f90d0 569 Conteo_Cronometro(); //Cronometro Activado.
Antulius 0:f1e9b42f90d0 570 PuertaAb = !PIN_SWITCH; //Checa el estado de la puerta.
Antulius 9:5d4a4c23d7c5 571 NInterrupciones ++; //Incrementa el numero de interrupciones
Antulius 0:f1e9b42f90d0 572 }
Antulius 1:456851b4e285 573
Antulius 0:f1e9b42f90d0 574 Checar_Botones(); //Lee el estado de los botones.
Antulius 0:f1e9b42f90d0 575
Antulius 0:f1e9b42f90d0 576 if (B_Arriba || B_Abajo || B_Izquierdo || B_Derecho || B_Ok || B_Return ) { //Checa si algun boton fue presionado.
Antulius 0:f1e9b42f90d0 577 if (Opcion_Max && (B_Arriba || B_Abajo)) { //Checamos si exite opciones disponibles y si se activo el boton de arriba y abajo.
Antulius 0:f1e9b42f90d0 578
Antulius 0:f1e9b42f90d0 579 if (B_Arriba && (Opcion == Scroll + 1) && (Scroll != 0) && (Opcion_Max > 4)) { //Entra al if si se Activa el Boton de arriba, existe un scroll, nos encontramos en la opcion mas alta disponible en el display.
Antulius 0:f1e9b42f90d0 580 Scroll_Cambio = 1; //Indicamos que se debe hacer un cambio de Scroll.
Antulius 0:f1e9b42f90d0 581 Scroll--; //Decrementamos el Scroll.
Antulius 0:f1e9b42f90d0 582 Opcion_Ant = Opcion; //Actualizamos valor a la variable que guarda las opciones anteriores.
Antulius 0:f1e9b42f90d0 583 Opcion--; //Decrementa el valor de opción.
Antulius 0:f1e9b42f90d0 584 }
Antulius 0:f1e9b42f90d0 585 else if (B_Arriba && (Opcion != 1) ) { //Checamos si presionamos Arriba la opcion no es la primera.
Antulius 0:f1e9b42f90d0 586 Opcion_Ant = Opcion; //Actualizamos valor a la variable que guarda las opciones anteriores.
Antulius 0:f1e9b42f90d0 587 Opcion--;
RazielLopez 2:4973fac2b60e 588 Terminal.printf("%d",Opcion);
Antulius 0:f1e9b42f90d0 589 }
Antulius 0:f1e9b42f90d0 590 else if (B_Abajo && (Opcion == Scroll + 4) && (Opcion < (Opcion_Max)) && (Opcion_Max > 4)) { //Checamos si presionamos Abajo la opcion es la 4ta de la pantalla, el scroll no es el ultimo posible y nuestras opciones son mayores a 4.
Antulius 0:f1e9b42f90d0 591 Scroll_Cambio = 1; //Indicamos que se debe hacer un cambio de Scroll.
Antulius 0:f1e9b42f90d0 592 Scroll++; //Decrementamos el Scroll.
Antulius 0:f1e9b42f90d0 593 Opcion_Ant = Opcion; //Atualiza opcion anterior.
Antulius 0:f1e9b42f90d0 594 Opcion++;
Antulius 0:f1e9b42f90d0 595 }
Antulius 0:f1e9b42f90d0 596 else if (B_Abajo && (Opcion != Opcion_Max) ) { //Checa si se presiona el boton de abajo y la opcion actual no es la ultima opción.
Antulius 0:f1e9b42f90d0 597 Opcion_Ant = Opcion; //Atualiza opcion anterior.
Antulius 0:f1e9b42f90d0 598 Opcion++; //Incrementa la opcion.
Antulius 0:f1e9b42f90d0 599 }
Antulius 0:f1e9b42f90d0 600 }
Antulius 0:f1e9b42f90d0 601 else if (B_Ok) { //Verifica si presionamos el Boton OK.
Antulius 0:f1e9b42f90d0 602 Bandera = 1; //Cambia bandera a 1 permitiendo el paso a la siguiente acción.
Antulius 5:0c35e593b3f2 603 Avanzar = 1; //Permite el paso a la siguiente opción.
Antulius 0:f1e9b42f90d0 604 }
Antulius 1:456851b4e285 605 else if (B_Return) { //Checa si se presiono el boton de Regreso.
Antulius 5:0c35e593b3f2 606 Bandera = 1; //Cambia bandera a 1 permitiendo el paso a la siguiente acción.
Antulius 9:5d4a4c23d7c5 607 // Avanzar = 0; //Permite el paso a la opción anterior.
Antulius 0:f1e9b42f90d0 608 }
Antulius 0:f1e9b42f90d0 609 }
Antulius 0:f1e9b42f90d0 610 }
Antulius 0:f1e9b42f90d0 611
Antulius 0:f1e9b42f90d0 612
Antulius 0:f1e9b42f90d0 613 /*
Antulius 0:f1e9b42f90d0 614 ** ===================================================================
Antulius 0:f1e9b42f90d0 615 ** Prototipo : Intro() (Envia mensajes a la pantalla LCD)
Antulius 0:f1e9b42f90d0 616 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 617 ** Descripción :
Antulius 0:f1e9b42f90d0 618 ** Envia mensajes al inicio del programa a traves del LCD.
Antulius 0:f1e9b42f90d0 619 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 620 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 621 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 622 ** ===================================================================
Antulius 0:f1e9b42f90d0 623 */
Antulius 0:f1e9b42f90d0 624 void Intro() {
Antulius 1:456851b4e285 625 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 1:456851b4e285 626 lcd.setCursor(TextLCD::CurOff_BlkOff); // Apaga el Cursor
Antulius 0:f1e9b42f90d0 627 lcd.cls();
Antulius 0:f1e9b42f90d0 628 lcd.locate(0,0);
Antulius 0:f1e9b42f90d0 629 lcd.locate(7, 0);
Antulius 0:f1e9b42f90d0 630 lcd.printf("I.P.N.");
Antulius 0:f1e9b42f90d0 631 lcd.locate(5, 1);
Antulius 0:f1e9b42f90d0 632 lcd.printf("E.S.I.M.E.");
Antulius 0:f1e9b42f90d0 633 lcd.locate(3, 2);
Antulius 0:f1e9b42f90d0 634 lcd.printf("DESHIDRATADOR");
Antulius 0:f1e9b42f90d0 635 wait_ms(2000);
Antulius 0:f1e9b42f90d0 636 }
Antulius 0:f1e9b42f90d0 637
Antulius 0:f1e9b42f90d0 638 /*
Antulius 0:f1e9b42f90d0 639 ** ===================================================================
Antulius 0:f1e9b42f90d0 640 ** Prototipo : Imprime_Menu() (Imprime el Menú en la pantalla LCD)
Antulius 0:f1e9b42f90d0 641 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 642 ** Descripción :
Antulius 0:f1e9b42f90d0 643 ** Envia mensajes y coloca mensajes del menú en la LCD.
Antulius 0:f1e9b42f90d0 644 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 645 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 646 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 647 ** ===================================================================
Antulius 0:f1e9b42f90d0 648 */
Antulius 0:f1e9b42f90d0 649 void Imprime_Menu() {
Antulius 1:456851b4e285 650 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 1:456851b4e285 651 lcd.setCursor(TextLCD::CurOff_BlkOff); // Apaga el Cursor
Antulius 0:f1e9b42f90d0 652 lcd.cls();
Antulius 0:f1e9b42f90d0 653 lcd.locate(0,0);
Antulius 0:f1e9b42f90d0 654 lcd.locate(1, 0);
Antulius 0:f1e9b42f90d0 655 lcd.printf("MENU");
Antulius 0:f1e9b42f90d0 656 lcd.locate(1, 1);
Antulius 0:f1e9b42f90d0 657 lcd.printf("PERSONALIZAR");
Antulius 9:5d4a4c23d7c5 658 //lcd.printf("CONFiG OTRO");
Antulius 0:f1e9b42f90d0 659 lcd.locate(1, 2);
Antulius 0:f1e9b42f90d0 660 lcd.printf("CONTACTO");
Antulius 0:f1e9b42f90d0 661 lcd.locate(1, 3);
Antulius 0:f1e9b42f90d0 662 lcd.printf("ACERCA DE... ");
Antulius 0:f1e9b42f90d0 663 }
Antulius 0:f1e9b42f90d0 664
Antulius 0:f1e9b42f90d0 665 /*
Antulius 0:f1e9b42f90d0 666 ** ===================================================================
Antulius 0:f1e9b42f90d0 667 ** Prototipo : Imprime_InfoDeshidratacion() (Imprime info en la pantalla LCD)
Antulius 0:f1e9b42f90d0 668 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 669 ** Descripción :
Antulius 0:f1e9b42f90d0 670 ** Envia mensajes sobre las variables y el estado de operación
Antulius 0:f1e9b42f90d0 671 ** del deshidratador y coloca mensajes en la pantalla LCD.
Antulius 0:f1e9b42f90d0 672 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 673 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 674 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 675 ** ===================================================================
Antulius 0:f1e9b42f90d0 676 */
Antulius 0:f1e9b42f90d0 677 void Imprime_InfoDeshidratacion() {
Antulius 1:456851b4e285 678 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 1:456851b4e285 679 lcd.setCursor(TextLCD::CurOff_BlkOff); // Apaga el Cursor
Antulius 0:f1e9b42f90d0 680 lcd.cls();
Antulius 0:f1e9b42f90d0 681 lcd.locate(0, 0);
Antulius 0:f1e9b42f90d0 682 lcd.printf("TEMPERATURA: ");
Antulius 0:f1e9b42f90d0 683 lcd.locate(0, 1);
Antulius 0:f1e9b42f90d0 684 lcd.printf("HUMEDAD: %");
Antulius 0:f1e9b42f90d0 685 lcd.locate(0, 2);
Antulius 0:f1e9b42f90d0 686 lcd.printf("VENT: QUEM: ");
Antulius 0:f1e9b42f90d0 687 lcd.locate(0, 3);
Antulius 0:f1e9b42f90d0 688 lcd.printf("TIEMPO:");
Antulius 0:f1e9b42f90d0 689 }
Antulius 0:f1e9b42f90d0 690 /*
Antulius 0:f1e9b42f90d0 691 ** ===================================================================
Antulius 0:f1e9b42f90d0 692 ** Prototipo : Imprime_InfoSensores() (Imprime info en la pantalla LCD)
Antulius 0:f1e9b42f90d0 693 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 694 ** Descripción :
Antulius 0:f1e9b42f90d0 695 ** Imprime las mediciones datos e información obtenida de los
Antulius 0:f1e9b42f90d0 696 ** sensores y es enviada a la pantalla LCD.
Antulius 0:f1e9b42f90d0 697 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 698 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 699 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 700 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 701 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 702 ** ===================================================================
Antulius 0:f1e9b42f90d0 703 */
Antulius 0:f1e9b42f90d0 704 void Imprime_InfoSensores() {
Antulius 0:f1e9b42f90d0 705 uint16_t Porcentaje;
Antulius 1:456851b4e285 706 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 1:456851b4e285 707 lcd.setCursor(TextLCD::CurOff_BlkOff); // Apaga el Cursor
Antulius 4:ffffec15fa97 708 lcd.locate(12, 0); //Coloca el cursor en la columna 12 y fila 0.
Antulius 12:e134e66034c7 709 lcd.printf("%.2f",temperatura); //Imprime valores de temperatura.
Antulius 4:ffffec15fa97 710 lcd.locate(8, 1); //Coloca el cursor en la columna 8 fila 1.
Antulius 12:e134e66034c7 711 lcd.printf("%.2f",humedad); //Imprime valores de humedad.
Antulius 4:ffffec15fa97 712 lcd.locate(6, 2); //Coloca el cursor en columna 6 fila 2.
Antulius 4:ffffec15fa97 713 Porcentaje = DC * 100 / 255; //
Antulius 4:ffffec15fa97 714 if (Motor) { //Vericamos estado del motor.
Antulius 4:ffffec15fa97 715 lcd.printf("%d",Porcentaje); //Si - Imprime en LCD ON.
Antulius 4:ffffec15fa97 716 lcd.printf("%"); //
Antulius 4:ffffec15fa97 717 } else //No.
Antulius 4:ffffec15fa97 718 lcd.printf("OFF"); //Imprime en LCD OFF.
Antulius 9:5d4a4c23d7c5 719 lcd.locate(16, 2); //Colocamos cursor en columna 16 , fila 2.
Antulius 4:ffffec15fa97 720 if (Quemador) //Verificamos estado del quemador.
Antulius 4:ffffec15fa97 721 lcd.printf("ON "); //Si - imprime mensaje en LCD de ON.
Antulius 4:ffffec15fa97 722 else //No.
Antulius 4:ffffec15fa97 723 lcd.printf("OFF"); //Imprime mesaje en LCD de OFF.
Antulius 0:f1e9b42f90d0 724 }
Antulius 0:f1e9b42f90d0 725 /*
Antulius 0:f1e9b42f90d0 726 ** ===================================================================
Antulius 0:f1e9b42f90d0 727 ** Prototipo : Imprime_Tiempo() (Imprime info en la pantalla LCD)
Antulius 0:f1e9b42f90d0 728 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 729 ** Descripción :
Antulius 0:f1e9b42f90d0 730 ** Imprime en la LCD el tiempo transcurrido.
Antulius 0:f1e9b42f90d0 731 ** Formatea el mensaje y los despliega en la pantalla LCD.
Antulius 0:f1e9b42f90d0 732 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 733 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 734 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 735 ** Variables Globales:
Antulius 0:f1e9b42f90d0 736 ** uint16_t Columna - Almacena el valor de columna en la que desea imprimir en la LCD.
Antulius 0:f1e9b42f90d0 737 ** uint16_t Fila - Almacena el valor de fila en la que desea imprimir en la LCD.
Antulius 0:f1e9b42f90d0 738 ** ===================================================================
Antulius 0:f1e9b42f90d0 739 */
Antulius 0:f1e9b42f90d0 740 void Imprime_Tiempo(int Columna,int Fila) {
Antulius 1:456851b4e285 741 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 1:456851b4e285 742 lcd.setCursor(TextLCD::CurOff_BlkOff); // Apaga el Cursor
Antulius 12:e134e66034c7 743 lcd.locate(Columna, Fila); // Listo para escribir
Antulius 0:f1e9b42f90d0 744 if (Hor < 10)
Antulius 12:e134e66034c7 745 lcd.printf("0");
Antulius 12:e134e66034c7 746 lcd.printf("%d",Hor);
Antulius 12:e134e66034c7 747 lcd.printf(":");
Antulius 0:f1e9b42f90d0 748 if (Min < 10)
Antulius 0:f1e9b42f90d0 749 lcd.printf("0");
Antulius 4:ffffec15fa97 750 lcd.printf("%d",Min);
Antulius 1:456851b4e285 751 lcd.printf(":");
Antulius 0:f1e9b42f90d0 752 if (Seg < 10)
Antulius 0:f1e9b42f90d0 753 lcd.printf("0");
Antulius 4:ffffec15fa97 754 lcd.printf("%d",Seg);
Antulius 1:456851b4e285 755 lcd.printf(" ");
Antulius 0:f1e9b42f90d0 756 }
Antulius 0:f1e9b42f90d0 757 /*
Antulius 0:f1e9b42f90d0 758 ** ===================================================================
Antulius 0:f1e9b42f90d0 759 ** Prototipo : Inicio() (Despliega Menú en la pantalla LCD)
Antulius 0:f1e9b42f90d0 760 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 761 ** Descripción :
Antulius 0:f1e9b42f90d0 762 ** Inicia el proceso de deshidratación.
Antulius 0:f1e9b42f90d0 763 ** Imprime el menú de inicio en la pantalla LCD y permite
Antulius 0:f1e9b42f90d0 764 ** navegar dentro de él.
Antulius 0:f1e9b42f90d0 765 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 766 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 767 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 768 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 769 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 770 ** ===================================================================
Antulius 0:f1e9b42f90d0 771 */
Antulius 0:f1e9b42f90d0 772 void Inicio() {
Antulius 4:ffffec15fa97 773 bool MenuInicio; //Variable que permite regresar a esta opción.
Antulius 4:ffffec15fa97 774 MenuInicio = true; //Inicializamos variable con verdadero.
Antulius 4:ffffec15fa97 775 Scroll = 0; //Colocamos Scroll de pantalla en 0 (no hay scroll);
Antulius 4:ffffec15fa97 776 while (MenuInicio) { //Mientras este en 1 MenuInicio repetira el proceso de esta opción.
Antulius 4:ffffec15fa97 777 Init_Var(); //Se inicializan las variables.
Antulius 4:ffffec15fa97 778 Opcion_Ant = 1; //Opcion anterior en 1.
Antulius 4:ffffec15fa97 779 Opcion_Max = NOFRUTAS; //El máximo número de opciones.
Antulius 0:f1e9b42f90d0 780 do {
Antulius 4:ffffec15fa97 781 Scroll_Cambio = 0; //Indicamos que no hay cambio de scroll por ahora.
Antulius 4:ffffec15fa97 782 lcd.cls(); //Limpiamos LCD.
Antulius 4:ffffec15fa97 783 for (int c = 0; c < 4; c++) { //FOR que imprime nombres de las frutas en las 4 lineas de la LDC.
Antulius 4:ffffec15fa97 784 lcd.locate(1, c); //Coloca el cursor al inicio de la fila.
Antulius 4:ffffec15fa97 785 lcd.printf(Fruta[c + Scroll]); //Imprime el nombre de la Fruta dependiendo el valor del scroll.
Antulius 0:f1e9b42f90d0 786 }
Antulius 4:ffffec15fa97 787 while (!Bandera && !Scroll_Cambio) { //Entra en un bucle de espera hasta que se active la bandera con 1.
Antulius 4:ffffec15fa97 788 Imprime_Flecha(); //Imprime la Flecha en el display en la posicion de la opcion.
Antulius 4:ffffec15fa97 789 wait_ms(250); //Aplicamos un retardo para no hacer un bucle infinito.
Antulius 0:f1e9b42f90d0 790 }
Antulius 0:f1e9b42f90d0 791 } while (Scroll_Cambio); //Este ciclo se repite mientras exista cambios en el Scroll.
Antulius 0:f1e9b42f90d0 792 if (Avanzar) //Si se activa la variable avanzar con 1.
Antulius 0:f1e9b42f90d0 793 MenuInicio = Deshidratacion(Opcion - 1); //Comienza Deshidratacion.
Antulius 0:f1e9b42f90d0 794 else
Antulius 0:f1e9b42f90d0 795 MenuInicio = 0; //regresa al menu anterior.
Antulius 0:f1e9b42f90d0 796 }
Antulius 0:f1e9b42f90d0 797 }
Antulius 0:f1e9b42f90d0 798
Antulius 0:f1e9b42f90d0 799 /*
Antulius 0:f1e9b42f90d0 800 ** ===================================================================
Antulius 0:f1e9b42f90d0 801 ** Prototipo : Deshidratación() (Despliega Menú en la pantalla LCD)
Antulius 0:f1e9b42f90d0 802 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 803 ** Descripción :
Antulius 0:f1e9b42f90d0 804 ** Supervisa el proceso de deshidratación.
Antulius 0:f1e9b42f90d0 805 ** Imprime el menú de estado en la pantalla LCD y actualiza
Antulius 0:f1e9b42f90d0 806 ** los datos en tirmpo real.
Antulius 0:f1e9b42f90d0 807 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 808 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 809 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 810 ** Llamado por: Inicio()
Antulius 0:f1e9b42f90d0 811 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 812 ** Retorna : valor BOOLEANO.
Antulius 0:f1e9b42f90d0 813 ** 0 - Deshidratacion cancelada
Antulius 0:f1e9b42f90d0 814 ** 1 - Final de la deshidratación.
Antulius 0:f1e9b42f90d0 815 ** ===================================================================
Antulius 0:f1e9b42f90d0 816 */
Antulius 0:f1e9b42f90d0 817 bool Deshidratacion(int FrutaD) {
RazielLopez 6:46bc4477b9ef 818
Antulius 0:f1e9b42f90d0 819 //Mostramos informacion de fruta.
Antulius 0:f1e9b42f90d0 820 Deshidratando = inf_fruta(FrutaD);
Antulius 0:f1e9b42f90d0 821 if (Deshidratando) {
Antulius 0:f1e9b42f90d0 822 //Colocamos variables en condiciones iniciales.
Antulius 0:f1e9b42f90d0 823 Opcion_Max = 0; //0 no existen opciones disponibles.
Antulius 0:f1e9b42f90d0 824 Init_Var(); //Se inicializan las variables.
Antulius 0:f1e9b42f90d0 825 Init_Conometro(); //Iniciamos variables del cronometro.
Antulius 0:f1e9b42f90d0 826 //ConfT2_PWM3(TAPWM); //Configuracion de Timer2 PARA MODO FAST PWM EN PIN 3.
Antulius 4:ffffec15fa97 827 PIN_QUEMADOR = DUTYCYCLE; //Enciende el Quemador
Antulius 13:a6dd1f4321e3 828 while (!Bandera && !Avanzar) { //Ciclo que se repite hasta que la bandera no sea activada.
Antulius 13:a6dd1f4321e3 829 if (PuertaAb)
Antulius 13:a6dd1f4321e3 830 { //Checa si la puerta esta abierta
Antulius 13:a6dd1f4321e3 831 Deshidratando = Puerta_Abierta(); //SI - Dependiedo de la decision del usuario puede o no continuar la deshidratación.
Antulius 13:a6dd1f4321e3 832 PIN_BUZZER = Buzz_On; //Enciende el buzzer.
Antulius 13:a6dd1f4321e3 833 wait(2);
Antulius 13:a6dd1f4321e3 834 PIN_BUZZER = Buzz_Off; //Apaga el buzzer
Antulius 13:a6dd1f4321e3 835 wait(1);
Antulius 13:a6dd1f4321e3 836 }
Antulius 13:a6dd1f4321e3 837 else { //NO..., Todo está bien, entonces
Antulius 13:a6dd1f4321e3 838 Imprime_InfoDeshidratacion(); //Colocamos mensajes en la LCD.
Antulius 13:a6dd1f4321e3 839 while (!PuertaAb && Deshidratando && !Bandera) { //Mientras la puerta este cerrada y la variable Desidratando sea verdadera.
Antulius 13:a6dd1f4321e3 840 error_code = 0; //Limpia el Código de Error
Antulius 13:a6dd1f4321e3 841 Terminal.printf("\rReading DHT ... "); //Envia mensaje a la Terminal
Antulius 13:a6dd1f4321e3 842 // error_code=dht.readData(); //Lee el Sensor de Humedad y Temperatura
Antulius 13:a6dd1f4321e3 843 error_code=dht.read(); //Lee el Sensor de Humedad y Temperatura
Antulius 13:a6dd1f4321e3 844 Terminal.printf("\r\nError Code: %d \r\n", error_code); //Imprime el Código de Error
Antulius 13:a6dd1f4321e3 845 wait(3); //Espera 2 seg entre mediciones
Antulius 13:a6dd1f4321e3 846 if (error_code == 0) { // Si todo OK
Antulius 13:a6dd1f4321e3 847 Terminal.printf("Temperature is %4.2f C \r\n",dht.ReadTemperature(CELCIUS));
Antulius 13:a6dd1f4321e3 848 temperatura = dht.ReadTemperature(CELCIUS); //Se lee la temperatura: CELCIUS=0,FARENHEIT=1,KELVIN=2
Antulius 13:a6dd1f4321e3 849 Terminal.printf("Temperature is %4.2f F \r\n",dht.ReadTemperature(FARENHEIT));
Antulius 13:a6dd1f4321e3 850 Terminal.printf("Temperature is %4.2f K \r\n",dht.ReadTemperature(KELVIN));
Antulius 13:a6dd1f4321e3 851 Terminal.printf("Humidity is %4.2f \r\n" ,dht.ReadHumidity());
Antulius 13:a6dd1f4321e3 852 humedad = dht.ReadHumidity(); //Se lee la humedad
Antulius 13:a6dd1f4321e3 853 Terminal.printf("Dew point is %4.2f \r\n" ,dht.CalcdewPoint(dht.ReadTemperature(CELCIUS), dht.ReadHumidity()));
Antulius 13:a6dd1f4321e3 854 Terminal.printf("Dew point (fast) is %4.2f \r\n",dht.CalcdewPointFast(dht.ReadTemperature(CELCIUS), dht.ReadHumidity()));
Antulius 13:a6dd1f4321e3 855 // dht.firsttime=false;
Antulius 13:a6dd1f4321e3 856 // Terminal.printf("\rHumedad: %.2f ", h); //Envia el valor hacia la terminal
Antulius 13:a6dd1f4321e3 857 // Terminal.printf("\tTemperatura: %.2f \r\n\v\v\v\v", t);
Antulius 13:a6dd1f4321e3 858 }
Antulius 13:a6dd1f4321e3 859 /* else {
Antulius 13:a6dd1f4321e3 860 Terminal.printf("\rError Reading DHT "); //No se puedo leer DHT
Antulius 13:a6dd1f4321e3 861 Terminal.printf("\r\nPlease Check Sensor !!! \n\r"); //Envia mensaje de error a la Terminal
Antulius 13:a6dd1f4321e3 862 lcd.cls(); //Limpiamos LCD.
Antulius 13:a6dd1f4321e3 863 lcd.locate(1, 0); //Coloca el cursor al inicio de la fila.
Antulius 13:a6dd1f4321e3 864 lcd.printf("Error de Sensores");//Envia mensaje de Error.
Antulius 13:a6dd1f4321e3 865 lcd.locate(1, 1); //Coloca el cursor al inicio de la fila.
Antulius 13:a6dd1f4321e3 866 lcd.printf("Revise Equipo ! "); //Envia mensaje de Error.
Antulius 13:a6dd1f4321e3 867 PIN_BUZZER = Buzz_On; //Enciende el buzzer
Antulius 13:a6dd1f4321e3 868 }
Antulius 13:a6dd1f4321e3 869 //-----------------------------------------------------
Antulius 13:a6dd1f4321e3 870 // Actualiza el Proceso.
Antulius 13:a6dd1f4321e3 871 //-----------------------------------------------------
Antulius 13:a6dd1f4321e3 872 */ Checar_Calefactor(Temp[FrutaD]); //Verifica sensores y enciende componentes.
Antulius 13:a6dd1f4321e3 873 Imprime_InfoSensores(); //Impresion de informacion de sensores,
Antulius 13:a6dd1f4321e3 874 Imprime_Tiempo(7, 3); //Impresion de Tiempo.
Antulius 13:a6dd1f4321e3 875
Antulius 13:a6dd1f4321e3 876 if (Hor == 5 && Min == 30) { //Tiempo Transcurrido es igual a 5:30:XX .
Antulius 13:a6dd1f4321e3 877 Bandera = 1; // SI - Termina el proceso.
Antulius 13:a6dd1f4321e3 878 Terminal.printf("\rDemasiado Tiempo de Deshidratacion ...\n\r");
Antulius 13:a6dd1f4321e3 879 Terminal.printf("\rTiempo Terminado !!! \n\r");
Antulius 13:a6dd1f4321e3 880 }
Antulius 13:a6dd1f4321e3 881 }
Antulius 13:a6dd1f4321e3 882 }
Antulius 13:a6dd1f4321e3 883 }
Antulius 13:a6dd1f4321e3 884 //-----------------------------------------------------
Antulius 13:a6dd1f4321e3 885 // Proceso de Deshidratacion terminado.
Antulius 13:a6dd1f4321e3 886 //-----------------------------------------------------
Antulius 10:fb06357df7d7 887 Terminal.printf("\rDeshidratacion Terminada \n\r");
Antulius 10:fb06357df7d7 888 Terminal.printf("\rTiempo Terminado !!! \n\r");
Antulius 12:e134e66034c7 889 TF = temperatura; //Almacenamos el valor final de temperatura.
Antulius 12:e134e66034c7 890 HF = humedad; //Almacenamos el valor final de humedad.
Antulius 10:fb06357df7d7 891 Terminal.printf("\rHumedad Final: %.2f ", HF); //Humedad Final
Antulius 10:fb06357df7d7 892 Terminal.printf("\tTemperatura Interna: %.2f \r\n\v\v\v\v", TF); //Temperatura Final
Antulius 9:5d4a4c23d7c5 893 Deshidratando = 0; //Indica que termina la deshidratacion.
Antulius 9:5d4a4c23d7c5 894 Apagar_Calefactor(); //Apaga el calefactor.
Antulius 9:5d4a4c23d7c5 895 Reporte_Des(); //Muestra reporte de deshidratacion.
Antulius 9:5d4a4c23d7c5 896 return 1; //Indicamos que termino la deshidratación.
Antulius 0:f1e9b42f90d0 897 }
Antulius 0:f1e9b42f90d0 898 else
Antulius 12:e134e66034c7 899 return 0; //Continua proceso de Deshidratación.
Antulius 0:f1e9b42f90d0 900 }
Antulius 0:f1e9b42f90d0 901 /*
Antulius 0:f1e9b42f90d0 902 ** ===================================================================
Antulius 0:f1e9b42f90d0 903 ** Prototipo : inf_fruta() (Confugura pramatros de deshidratación)
Antulius 0:f1e9b42f90d0 904 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 905 ** Descripción :
Antulius 0:f1e9b42f90d0 906 ** Despliega en la LCD la informacion de la fruta seleccionada.
Antulius 0:f1e9b42f90d0 907 ** Imprime el menú de estado en la pantalla LCD y actualiza
Antulius 0:f1e9b42f90d0 908 ** los datos en tirmpo real.
Antulius 0:f1e9b42f90d0 909 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 910 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 911 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 912 ** Argumentos :
Antulius 0:f1e9b42f90d0 913 ** uint16_t Fruit - recibe el numero de fruta contenido en los arreglos.
Antulius 0:f1e9b42f90d0 914 ** Retorna : valor BOOLEANO.
Antulius 0:f1e9b42f90d0 915 ** 0 - Continuar con deshidratacion.
Antulius 0:f1e9b42f90d0 916 ** 1 - Cancelar.
Antulius 0:f1e9b42f90d0 917 ** ===================================================================
Antulius 0:f1e9b42f90d0 918 */
Antulius 0:f1e9b42f90d0 919 bool inf_fruta(int Fruit) {
Antulius 0:f1e9b42f90d0 920
Antulius 0:f1e9b42f90d0 921 //Colocamos variables en condiciones iniciales.
Antulius 4:ffffec15fa97 922 Opcion_Max = 0; //0 no existen opciones disponibles.
Antulius 4:ffffec15fa97 923 Init_Var(); //Inicializamos variables
Antulius 4:ffffec15fa97 924 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 1:456851b4e285 925 lcd.setCursor(TextLCD::CurOff_BlkOff); // Apaga el Cursor
Antulius 4:ffffec15fa97 926 lcd.cls(); //Limpiamos pantalla.
Antulius 0:f1e9b42f90d0 927 lcd.locate(0, 0);
Antulius 4:ffffec15fa97 928 lcd.printf(Fruta[Fruit]); //Imprimimos nombre de fruta.
Antulius 0:f1e9b42f90d0 929 lcd.locate(0, 1);
Antulius 0:f1e9b42f90d0 930 lcd.printf("TEMPERATURA MAX: ");
Antulius 4:ffffec15fa97 931 lcd.printf("%d", Temp[Fruit]); //Imprimimos temperatura maxima de fruta.
Antulius 0:f1e9b42f90d0 932 lcd.locate(0, 2);
Antulius 0:f1e9b42f90d0 933 lcd.printf("HUMEDAD MAX: ");
Antulius 4:ffffec15fa97 934 lcd.printf("%d", Hume[Fruit]); //Imprimimos humedad maxima de fruta.
Antulius 0:f1e9b42f90d0 935 lcd.locate(0, 3);
Antulius 0:f1e9b42f90d0 936 lcd.printf("ATRAS OK");
Antulius 0:f1e9b42f90d0 937
Antulius 4:ffffec15fa97 938 while (!Bandera) { //Esperamos hasta que se presione algún boton (atras o adelante).
Antulius 0:f1e9b42f90d0 939 wait_ms(250);
Antulius 0:f1e9b42f90d0 940 }
Antulius 4:ffffec15fa97 941 if (Avanzar) //Verificamos si el Boton fue el de Avanzar.
Antulius 0:f1e9b42f90d0 942 return 1;
Antulius 0:f1e9b42f90d0 943 else
Antulius 4:ffffec15fa97 944 return 0; //
Antulius 0:f1e9b42f90d0 945 }
Antulius 0:f1e9b42f90d0 946 /*
Antulius 0:f1e9b42f90d0 947 ** ===================================================================
Antulius 0:f1e9b42f90d0 948 ** Prototipo : Puerta_Abierta() (Despliega info en la pantalla LCD)
Antulius 0:f1e9b42f90d0 949 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 950 ** Descripción :
Antulius 0:f1e9b42f90d0 951 ** Rutina que se ejecuta a la hora de abrir la puerta durante
Antulius 0:f1e9b42f90d0 952 ** el proceso de deshidratación.
Antulius 0:f1e9b42f90d0 953 ** Pone en pause el proceso hasta que se cierre nuevamente la
Antulius 0:f1e9b42f90d0 954 ** puerta.
Antulius 0:f1e9b42f90d0 955 ** Imprime el estado en la pantalla LCD.
Antulius 0:f1e9b42f90d0 956 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 957 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 958 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 959 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 960 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 961 ** ===================================================================
Antulius 0:f1e9b42f90d0 962 */
Antulius 0:f1e9b42f90d0 963 bool Puerta_Abierta() {
Antulius 0:f1e9b42f90d0 964 Init_Var();
Antulius 10:fb06357df7d7 965 Terminal.printf("\r\nPuerta Abierta ");
Antulius 10:fb06357df7d7 966 Terminal.printf("\r\nProceso Suspendido !!! \r\n");
Antulius 0:f1e9b42f90d0 967 CalefactorOFF();
Antulius 1:456851b4e285 968 lcd.setBacklight(TextLCD::LightOn); // Enciende la Iluminación de Fondo
Antulius 1:456851b4e285 969 lcd.setCursor(TextLCD::CurOff_BlkOff); // Apaga el Cursor
Antulius 0:f1e9b42f90d0 970 lcd.cls();
Antulius 0:f1e9b42f90d0 971 lcd.locate(0, 0);
Antulius 9:5d4a4c23d7c5 972 lcd.printf(" PUERTA ABIERTA");
Antulius 0:f1e9b42f90d0 973 lcd.locate(0, 1);
Antulius 9:5d4a4c23d7c5 974 lcd.printf(" PROCESO");
Antulius 9:5d4a4c23d7c5 975 lcd.locate(0, 2);
Antulius 9:5d4a4c23d7c5 976 lcd.printf(" SUSPENDIDO");
Antulius 9:5d4a4c23d7c5 977 PIN_BUZZER = Buzz_On; //Enciende el buzzer.
Antulius 1:456851b4e285 978 wait_ms(5000); //Espera 5 segundos
Antulius 0:f1e9b42f90d0 979 lcd.cls();
Antulius 0:f1e9b42f90d0 980 lcd.locate(0, 0);
Antulius 9:5d4a4c23d7c5 981 lcd.printf(" POR FAVOR ");
Antulius 0:f1e9b42f90d0 982 lcd.locate(0, 1);
Antulius 9:5d4a4c23d7c5 983 lcd.printf(" CIERRE");
Antulius 0:f1e9b42f90d0 984 lcd.locate(0, 2);
Antulius 9:5d4a4c23d7c5 985 lcd.printf(" LA PUERTA");
Antulius 0:f1e9b42f90d0 986 lcd.locate(0, 3);
Antulius 9:5d4a4c23d7c5 987 lcd.printf(" PARA CONTINUAR!");
Antulius 9:5d4a4c23d7c5 988 PIN_BUZZER = Buzz_Off; //Apaga el buzzer
Antulius 0:f1e9b42f90d0 989 while (PuertaAb && !Avanzar) //Mientras la puerta está abierta
Antulius 0:f1e9b42f90d0 990 wait_ms(250);
Antulius 0:f1e9b42f90d0 991 return !Avanzar; //Se detiene el proceso
Antulius 0:f1e9b42f90d0 992 }
Antulius 0:f1e9b42f90d0 993 /*
Antulius 0:f1e9b42f90d0 994 ** ===================================================================
Antulius 0:f1e9b42f90d0 995 ** Prototipo : Checar_Calefactor() (Verifica estado del calefactor)
Antulius 0:f1e9b42f90d0 996 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 997 ** Descripción :
Antulius 0:f1e9b42f90d0 998 ** Enciende o apaga de calefactor con ayuda de las variables de
Antulius 0:f1e9b42f90d0 999 ** humedad y temperatura.
Antulius 0:f1e9b42f90d0 1000 ** Imprime el menú de estado en la pantalla LCD y actualiza
Antulius 0:f1e9b42f90d0 1001 ** los datos en tirmpo real.
Antulius 0:f1e9b42f90d0 1002 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 1003 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 1004 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1005 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1006 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1007 ** ===================================================================
Antulius 0:f1e9b42f90d0 1008 */
Antulius 0:f1e9b42f90d0 1009 void Checar_Calefactor(int TempD) {
Antulius 12:e134e66034c7 1010 if ((temperatura > (TempD - 2) && temperatura < (TempD + 1)) || (humedad > 75))
Antulius 0:f1e9b42f90d0 1011 MotorON(130);
Antulius 12:e134e66034c7 1012 else if (temperatura < (TempD - 2) && (humedad <= 75))
Antulius 0:f1e9b42f90d0 1013 MotorOFF();
Antulius 12:e134e66034c7 1014 else if (temperatura >= (TempD + 1)) //
Antulius 0:f1e9b42f90d0 1015 MotorON(196);
Antulius 0:f1e9b42f90d0 1016
Antulius 12:e134e66034c7 1017 if (temperatura <= (TempD - 1)) { //Checa si el quemador esta apagado y su tempertatura es igual o menor que la temperatura de la fruta.
Antulius 12:e134e66034c7 1018 wait_ms(1000); //Retardo de 1 seg.
Antulius 12:e134e66034c7 1019 CalefactorON(); //Enciende el elemento calaefactor
Antulius 0:f1e9b42f90d0 1020 }
Antulius 12:e134e66034c7 1021 else if (temperatura >= (TempD + 1)) { //Checa si el motor esta encendido y la si la temperatura es mayor a la maxima permitida
Antulius 12:e134e66034c7 1022 CalefactorOFF(); //Apaga el elemento calefactor
Antulius 12:e134e66034c7 1023 wait_ms(2000); //retardo de 2 segundos.
Antulius 0:f1e9b42f90d0 1024 }
Antulius 0:f1e9b42f90d0 1025 }
Antulius 0:f1e9b42f90d0 1026 /*
Antulius 0:f1e9b42f90d0 1027 ** ===================================================================
Antulius 0:f1e9b42f90d0 1028 ** Prototipo : Apagar_Calefactor() (Apaga el calefactor)
Antulius 0:f1e9b42f90d0 1029 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1030 ** Descripción :
Antulius 0:f1e9b42f90d0 1031 ** Apaga de calefactor despues de haber terminado el proceso
Antulius 0:f1e9b42f90d0 1032 ** de deshidratacion.
Antulius 0:f1e9b42f90d0 1033 ** Imprime el menú de estado en la pantalla LCD y actualiza
Antulius 0:f1e9b42f90d0 1034 ** los datos en tirmpo real.
Antulius 0:f1e9b42f90d0 1035 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 1036 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 1037 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1038 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1039 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1040 ** ===================================================================
Antulius 0:f1e9b42f90d0 1041 */
Antulius 0:f1e9b42f90d0 1042 void Apagar_Calefactor() {
Antulius 0:f1e9b42f90d0 1043 lcd.cls();
Antulius 0:f1e9b42f90d0 1044 lcd.locate(5, 0);
Antulius 0:f1e9b42f90d0 1045 lcd.printf("ENFRIANDO");
Antulius 0:f1e9b42f90d0 1046 lcd.locate(6, 1);
Antulius 0:f1e9b42f90d0 1047 lcd.printf("SISTEMA");
Antulius 0:f1e9b42f90d0 1048 lcd.locate(2, 2);
Antulius 0:f1e9b42f90d0 1049 lcd.printf("ESPERE POR FAVOR");
Antulius 0:f1e9b42f90d0 1050 lcd.locate(0, 3);
Antulius 0:f1e9b42f90d0 1051 lcd.printf("TEMPERATURA: ");
Antulius 4:ffffec15fa97 1052 //Enfriamiento del Sistema
Antulius 9:5d4a4c23d7c5 1053 CalefactorOFF(); //Apaga el Elemento Calefactor
Antulius 0:f1e9b42f90d0 1054 do {
Antulius 12:e134e66034c7 1055 // error_code=dht.readData(); //Lee el Sensor de Humedad y Temperatura
Antulius 12:e134e66034c7 1056 // Esta linea genera ERROR_CHECKSUM
Antulius 12:e134e66034c7 1057 // wait(1); //Espera 1 segundo
Antulius 12:e134e66034c7 1058 temperatura = dht.ReadTemperature(CELCIUS); //Se lee la temperatura: CELCIUS=0, FARENHEIT=1, KELVIN=2
Antulius 12:e134e66034c7 1059 lcd.locate(13, 3);
Antulius 12:e134e66034c7 1060 lcd.printf("%.2f",temperatura); //Temperatura interna del Deshidratador
Antulius 12:e134e66034c7 1061 Terminal.printf("\rEnfriando, Temperatura: %.2f",temperatura); // Envia Temperatura a la Terminal
Antulius 12:e134e66034c7 1062 wait_ms(1000); //Espera 1 segundo
Antulius 9:5d4a4c23d7c5 1063 }
Antulius 12:e134e66034c7 1064 while (temperatura > 37); //Hasta que la Temperatura Llega a 37°C
Antulius 9:5d4a4c23d7c5 1065 MotorOFF(); //Apaga el Elemento de Ventilación
Antulius 12:e134e66034c7 1066 if (temperatura < 25 ){
Antulius 9:5d4a4c23d7c5 1067 printf("\rEs Seguro Abrir Deshidratador !!! \n\r");
Antulius 9:5d4a4c23d7c5 1068 lcd.cls(); //Limpia el LCD
Antulius 9:5d4a4c23d7c5 1069 lcd.locate(3,1);
Antulius 9:5d4a4c23d7c5 1070 lcd.printf("Es Seguro Abrir "); //Apertura segura del Deshidratador
Antulius 9:5d4a4c23d7c5 1071 lcd.locate(3,2);
Antulius 9:5d4a4c23d7c5 1072 lcd.printf(" Deshidratador "); //Apertura segura del Deshidratador
Antulius 9:5d4a4c23d7c5 1073 wait(30); //Espera 30 segundos
Antulius 9:5d4a4c23d7c5 1074 }
Antulius 0:f1e9b42f90d0 1075 }
Antulius 0:f1e9b42f90d0 1076 /*
Antulius 0:f1e9b42f90d0 1077 ** ===================================================================
Antulius 0:f1e9b42f90d0 1078 ** Prototipo : Reporte_Des() (Reporta el estado del proceso)
Antulius 0:f1e9b42f90d0 1079 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1080 ** Descripción :
Antulius 0:f1e9b42f90d0 1081 ** Despliega en la LCD valores finales de humedad, temperatura
Antulius 0:f1e9b42f90d0 1082 ** y tiempo total del proceso de deshidratación.
Antulius 0:f1e9b42f90d0 1083 ** Imprime el menú de estado en la pantalla LCD y actualiza
Antulius 0:f1e9b42f90d0 1084 ** los datos en tirmpo real.
Antulius 0:f1e9b42f90d0 1085 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 1086 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 1087 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1088 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1089 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1090 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1091 ** ===================================================================
Antulius 0:f1e9b42f90d0 1092 */
Antulius 0:f1e9b42f90d0 1093 void Reporte_Des() {
Antulius 0:f1e9b42f90d0 1094 //Colocamos variables en condiciones iniciales.
Antulius 0:f1e9b42f90d0 1095 Opcion_Max = 0; //0 no existen opciones disponibles.
Antulius 0:f1e9b42f90d0 1096 Init_Var();
Antulius 0:f1e9b42f90d0 1097
Antulius 0:f1e9b42f90d0 1098 lcd.cls();
Antulius 0:f1e9b42f90d0 1099 lcd.locate(0, 0);
Antulius 0:f1e9b42f90d0 1100 lcd.printf(" PROCESO TERMINADO");
Antulius 0:f1e9b42f90d0 1101 lcd.locate(0, 1);
Antulius 0:f1e9b42f90d0 1102 lcd.printf("TEMP. FINAL: ");
Antulius 4:ffffec15fa97 1103 lcd.printf("%.2f",TF);
Antulius 0:f1e9b42f90d0 1104 lcd.locate(0, 2);
Antulius 0:f1e9b42f90d0 1105 lcd.printf("HUM. FINAL: ");
Antulius 4:ffffec15fa97 1106 lcd.printf("%.2f",HF);
Antulius 0:f1e9b42f90d0 1107 lcd.locate(0, 3);
Antulius 0:f1e9b42f90d0 1108 lcd.printf("TIEMPO DES:");
Antulius 0:f1e9b42f90d0 1109
Antulius 0:f1e9b42f90d0 1110 Imprime_Tiempo(12, 3);
Antulius 0:f1e9b42f90d0 1111 while (!Avanzar) {
Antulius 0:f1e9b42f90d0 1112 wait_ms(250);
Antulius 0:f1e9b42f90d0 1113 }
Antulius 0:f1e9b42f90d0 1114
Antulius 0:f1e9b42f90d0 1115 }
Antulius 0:f1e9b42f90d0 1116 /*
Antulius 0:f1e9b42f90d0 1117 ** ===================================================================
Antulius 0:f1e9b42f90d0 1118 ** Prototipo : Conf_Otro() (Configura parámetros de deshidratación)
Antulius 0:f1e9b42f90d0 1119 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1120 ** Descripción :
Antulius 0:f1e9b42f90d0 1121 ** Configura valores de opcion del menú: OTRO
Antulius 0:f1e9b42f90d0 1122 ** en el cual se puede seleccionar valores para la temperatura
Antulius 0:f1e9b42f90d0 1123 ** y humedad de otro alimento que se desee deshidratar.
Antulius 0:f1e9b42f90d0 1124 ** Imprime el menú de estado en la pantalla LCD y actualiza
Antulius 0:f1e9b42f90d0 1125 ** los datos en tirmpo real.
Antulius 0:f1e9b42f90d0 1126 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 1127 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 1128 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1129 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1130 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1131 ** ===================================================================
Antulius 0:f1e9b42f90d0 1132 */
Antulius 0:f1e9b42f90d0 1133 void Conf_Otro() {
Antulius 0:f1e9b42f90d0 1134 uint16_t MenuConf;
Antulius 0:f1e9b42f90d0 1135 uint16_t Temp_Aux;
Antulius 0:f1e9b42f90d0 1136 uint16_t Hume_Aux;
Antulius 0:f1e9b42f90d0 1137 MenuConf = 1;
Antulius 0:f1e9b42f90d0 1138 while (MenuConf) {
Antulius 9:5d4a4c23d7c5 1139 Init_Var(); //se inicializan los valores
Antulius 9:5d4a4c23d7c5 1140 Scroll = 0; //No hay scroll.
Antulius 9:5d4a4c23d7c5 1141 Opcion_Ant = 1; //Iniciamos Opcion anterior = 1.
Antulius 9:5d4a4c23d7c5 1142 Opcion_Max = CONDALARM; //Opciones iguales a las alarmas disponibles.
Antulius 9:5d4a4c23d7c5 1143 lcd.cls(); //Limpiamos pantalla.
Antulius 0:f1e9b42f90d0 1144 lcd.locate(1, 0);
Antulius 9:5d4a4c23d7c5 1145 lcd.printf("TEMP. MAX: ");
Antulius 9:5d4a4c23d7c5 1146 lcd.printf("%d", Temp[NOFRUTAS - 1]); //Imprimimos temperatura maxima de fruta.
Antulius 0:f1e9b42f90d0 1147 lcd.locate(1, 1);
Antulius 0:f1e9b42f90d0 1148 lcd.printf("HUMEDAD MAX: ");
Antulius 9:5d4a4c23d7c5 1149 lcd.printf("%d", Hume[NOFRUTAS - 1]); //Imprimimos humedad maxima de fruta.
Antulius 0:f1e9b42f90d0 1150 lcd.locate(0, 3);
Antulius 0:f1e9b42f90d0 1151 lcd.printf("CANCELAR OK");
Antulius 9:5d4a4c23d7c5 1152 Temp_Aux = Temp[NOFRUTAS - 1]; //Son guardadas en una variable auxiliar.
Antulius 9:5d4a4c23d7c5 1153 Hume_Aux = Hume[NOFRUTAS - 1]; //Humedad gurdada en una variable auxiliar
Antulius 9:5d4a4c23d7c5 1154 while (!Bandera) { //
Antulius 9:5d4a4c23d7c5 1155 Temp[NOFRUTAS - 1] = Temp_Aux; //Aplica cambio a variable original de temperatura.
Antulius 9:5d4a4c23d7c5 1156 Hume[NOFRUTAS - 1] = Hume_Aux; //Aplica cambio a variable original de humedad.
Antulius 9:5d4a4c23d7c5 1157 wait_ms(250);
Antulius 0:f1e9b42f90d0 1158 Imprime_Flecha();
Antulius 9:5d4a4c23d7c5 1159 if (Opcion == 1 && B_Derecho) { //Opcion de temperatura DERECHA.
Antulius 9:5d4a4c23d7c5 1160 Temp_Aux++; //Incrementa tempertura de variable auxiliar.
Antulius 0:f1e9b42f90d0 1161 }
Antulius 0:f1e9b42f90d0 1162 else if (Opcion == 1 && B_Izquierdo) { //Opcion de temperatura IZQUIERDA.
Antulius 9:5d4a4c23d7c5 1163 Temp_Aux--; //Decrementa temperatura de la variable auxiliar.
Antulius 0:f1e9b42f90d0 1164 }
Antulius 0:f1e9b42f90d0 1165 else if (Opcion == 2 && B_Derecho) { //Opcion de humedad DERECHA.
Antulius 9:5d4a4c23d7c5 1166 Hume_Aux++; //Incrementa humedad de la variable auxiliar.
Antulius 0:f1e9b42f90d0 1167 }
Antulius 0:f1e9b42f90d0 1168 else if (Opcion == 2 && B_Izquierdo) { //Opcion de humedad IZQUIERA.
Antulius 9:5d4a4c23d7c5 1169 Hume_Aux--; //Decrementa humedad de la variable auxiliar.
Antulius 9:5d4a4c23d7c5 1170 }
Antulius 9:5d4a4c23d7c5 1171 //Mostramos valores modificados.
Antulius 9:5d4a4c23d7c5 1172 lcd.locate(1, 0);
Antulius 9:5d4a4c23d7c5 1173 lcd.printf("TEMP. MAX: ");
Antulius 9:5d4a4c23d7c5 1174 lcd.printf("%d", Temp[NOFRUTAS - 1]); //Actualizamos Temperatura maxima de fruta.
Antulius 9:5d4a4c23d7c5 1175 lcd.locate(1, 1);
Antulius 9:5d4a4c23d7c5 1176 lcd.printf("HUMEDAD MAX: ");
Antulius 9:5d4a4c23d7c5 1177 lcd.printf("%d", Hume[NOFRUTAS - 1]); //Actualizamos Humedad maxima de fruta.
Antulius 9:5d4a4c23d7c5 1178 }
Antulius 9:5d4a4c23d7c5 1179 if (Avanzar) { //Si aprieta el boton OK
Antulius 9:5d4a4c23d7c5 1180 lcd.cls(); //Limpiamos pantalla.
Antulius 0:f1e9b42f90d0 1181 lcd.locate(0, 1);
Antulius 0:f1e9b42f90d0 1182 lcd.printf(" VALORES");
Antulius 0:f1e9b42f90d0 1183 lcd.locate(1, 2);
Antulius 0:f1e9b42f90d0 1184 lcd.printf(" ACTUALIZADOS");
Antulius 0:f1e9b42f90d0 1185 wait_ms(2000);
Antulius 0:f1e9b42f90d0 1186 }
Antulius 0:f1e9b42f90d0 1187 MenuConf = 0;
Antulius 0:f1e9b42f90d0 1188 }
Antulius 0:f1e9b42f90d0 1189 }
Antulius 0:f1e9b42f90d0 1190 /*
Antulius 0:f1e9b42f90d0 1191 ** ===================================================================
Antulius 0:f1e9b42f90d0 1192 ** Prototipo : Init_Cronometro() (Configura el cronómetro)
Antulius 0:f1e9b42f90d0 1193 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1194 ** Descripción :
Antulius 0:f1e9b42f90d0 1195 ** Configura valores iniciales del cronómetro.
Antulius 0:f1e9b42f90d0 1196 ** Imprime el menú de estado en la pantalla LCD y actualiza
Antulius 0:f1e9b42f90d0 1197 ** los datos en tirmpo real.
Antulius 0:f1e9b42f90d0 1198 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 1199 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 1200 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1201 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1202 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1203 ** ===================================================================
Antulius 0:f1e9b42f90d0 1204 */
Antulius 0:f1e9b42f90d0 1205 void Init_Conometro() {
Antulius 0:f1e9b42f90d0 1206 Seg = 0;
Antulius 0:f1e9b42f90d0 1207 Min = 0;
Antulius 0:f1e9b42f90d0 1208 Hor = 0;
Antulius 0:f1e9b42f90d0 1209 }
Antulius 0:f1e9b42f90d0 1210 /*
Antulius 0:f1e9b42f90d0 1211 ** ===================================================================
Antulius 0:f1e9b42f90d0 1212 ** Prototipo : Conteo_Cronometro() (incrementa el cronómetro)
Antulius 0:f1e9b42f90d0 1213 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1214 ** Descripción :
Antulius 0:f1e9b42f90d0 1215 ** Incrementa variables que realizan el conteo del tiempo
Antulius 0:f1e9b42f90d0 1216 ** transcurrido del proceso de deshidratación.
Antulius 0:f1e9b42f90d0 1217 ** Imprime el menú de estado en la pantalla LCD y actualiza
Antulius 0:f1e9b42f90d0 1218 ** los datos en tirmpo real.
Antulius 0:f1e9b42f90d0 1219 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 1220 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 1221 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1222 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1223 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1224 ** ===================================================================
Antulius 0:f1e9b42f90d0 1225 */
Antulius 0:f1e9b42f90d0 1226 void Conteo_Cronometro() {
Antulius 0:f1e9b42f90d0 1227 NInterrupciones++; //Incrementa valor de interrupciones (Deacuerdo a la interrupcion se incrementa cada 250 ms).
Antulius 0:f1e9b42f90d0 1228 if (NInterrupciones >= 4) { //Al completar al menos 4 interrupciones (4x250ms=1S) tendriamos al menos 1s.
Antulius 0:f1e9b42f90d0 1229 Seg++; //Incrementamos el valor de la variable que almacena los segundos.
Antulius 0:f1e9b42f90d0 1230 NInterrupciones = NInterrupciones - 4; //Decrementamos las 4 interrupciones que representan el segundo.
Antulius 0:f1e9b42f90d0 1231 if (Seg > 59) { //Si tenemos mas de 59 segundos...
Antulius 0:f1e9b42f90d0 1232 Seg = 0; //Reiniciamos variable Seg.
Antulius 0:f1e9b42f90d0 1233 Min++; //Incrementamos los minutos.
Antulius 0:f1e9b42f90d0 1234 if (Min > 59) { //Si tenemos mas de 59 minutos...
Antulius 0:f1e9b42f90d0 1235 Min = 0; //Reiniciams la variable Min.
Antulius 0:f1e9b42f90d0 1236 Hor++; //Incrementamos el valor de las horas.
Antulius 0:f1e9b42f90d0 1237 }
Antulius 0:f1e9b42f90d0 1238 }
Antulius 0:f1e9b42f90d0 1239 }
Antulius 0:f1e9b42f90d0 1240 }
Antulius 0:f1e9b42f90d0 1241 /*
Antulius 0:f1e9b42f90d0 1242 ** ===================================================================
Antulius 0:f1e9b42f90d0 1243 ** Prototipo : ConfT2_PWM3() (configuración del PWM3)
Antulius 0:f1e9b42f90d0 1244 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1245 ** Descripción :
Antulius 0:f1e9b42f90d0 1246 ** Configuracion de Timer2 PARA MODO FAST PWM EN PIN 3.
Antulius 0:f1e9b42f90d0 1247 ** Argumentos : Recibe varieble entera
Antulius 0:f1e9b42f90d0 1248 ** uint16_t DUTYCYCLE - Ciclo util del PWM
Antulius 4:ffffec15fa97 1249 ** 0.0=0% 1.0=100%
Antulius 0:f1e9b42f90d0 1250 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1251 ** ===================================================================
Antulius 0:f1e9b42f90d0 1252 */
Antulius 0:f1e9b42f90d0 1253 void ConfT2_PWM3(int DUTYCYCLE) {
Antulius 0:f1e9b42f90d0 1254 //TIMER2
Antulius 0:f1e9b42f90d0 1255
Antulius 0:f1e9b42f90d0 1256 // TCCR2A = _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
Antulius 0:f1e9b42f90d0 1257 // TCCR2B = _BV(CS22) | _BV(CS21) | _BV(CS20);
Antulius 4:ffffec15fa97 1258 // OCR2B = DUTYCYCLE; //Ancho de pulso.
Antulius 0:f1e9b42f90d0 1259 //Aqui termina configuración.
Antulius 0:f1e9b42f90d0 1260 }
Antulius 0:f1e9b42f90d0 1261 /*
Antulius 0:f1e9b42f90d0 1262 ** ===================================================================
Antulius 0:f1e9b42f90d0 1263 ** Prototipo : CalefactorON() (Encendido del elemento Calefactor)
Antulius 0:f1e9b42f90d0 1264 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1265 ** Descripción :
Antulius 0:f1e9b42f90d0 1266 ** Enciende el elemento Calefactor.
Antulius 0:f1e9b42f90d0 1267 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1268 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1269 ** ===================================================================
Antulius 0:f1e9b42f90d0 1270 */
Antulius 0:f1e9b42f90d0 1271 void CalefactorON() {
Antulius 4:ffffec15fa97 1272 Quemador = 1; //Coloca la Bandera de Estado en 1.
Antulius 4:ffffec15fa97 1273 DUTYCYCLE = HIGH; //Pone al Máximo el Quemador
Antulius 4:ffffec15fa97 1274 PIN_QUEMADOR = DUTYCYCLE; //Actualiza el PWM del Quemador
Antulius 0:f1e9b42f90d0 1275 }
Antulius 0:f1e9b42f90d0 1276 /*
Antulius 0:f1e9b42f90d0 1277 ** ===================================================================
Antulius 0:f1e9b42f90d0 1278 ** Prototipo : CalefactorOFF() (Apagado del elemento Calefactor)
Antulius 0:f1e9b42f90d0 1279 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1280 ** Descripción :
Antulius 0:f1e9b42f90d0 1281 ** Apaga el elemento Calefactor.
Antulius 0:f1e9b42f90d0 1282 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1283 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1284 ** ===================================================================
Antulius 0:f1e9b42f90d0 1285 */
Antulius 0:f1e9b42f90d0 1286 void CalefactorOFF() {
Antulius 4:ffffec15fa97 1287 Quemador = 0; //Colocamos la Bandera de Estado en 0.
Antulius 4:ffffec15fa97 1288 PIN_QUEMADOR = LOW; //Pone al Mínimo el Quemador
Antulius 0:f1e9b42f90d0 1289 }
Antulius 0:f1e9b42f90d0 1290 /*
Antulius 0:f1e9b42f90d0 1291 ** ===================================================================
Antulius 0:f1e9b42f90d0 1292 ** Prototipo : MotorON() (Enciende el Ventilador)
Antulius 0:f1e9b42f90d0 1293 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1294 ** Descripción :
Antulius 0:f1e9b42f90d0 1295 ** Enciende el ventilador del deshidratador.
Antulius 0:f1e9b42f90d0 1296 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1297 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1298 ** ===================================================================
Antulius 0:f1e9b42f90d0 1299 */
Antulius 0:f1e9b42f90d0 1300 void MotorON(int CicloUtil) {
Antulius 4:ffffec15fa97 1301 Motor = 1; //Actualiza la Bandera de Estado en 1.
Antulius 4:ffffec15fa97 1302 DC = CicloUtil; //
Antulius 4:ffffec15fa97 1303 PIN_MOTOR = DC; //Encendemos Ventilador.
Antulius 0:f1e9b42f90d0 1304 }
Antulius 0:f1e9b42f90d0 1305 /*
Antulius 0:f1e9b42f90d0 1306 ** ===================================================================
Antulius 0:f1e9b42f90d0 1307 ** Prototipo : MotorOFF() (Apaga el Ventilador)
Antulius 0:f1e9b42f90d0 1308 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1309 ** Descripción :
Antulius 0:f1e9b42f90d0 1310 ** Apaga el ventilador del deshidratador.
Antulius 0:f1e9b42f90d0 1311 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1312 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1313 ** ===================================================================
Antulius 0:f1e9b42f90d0 1314 */
Antulius 0:f1e9b42f90d0 1315 void MotorOFF() {
Antulius 4:ffffec15fa97 1316 Motor = 0; //Colocamos la Bandera de Estado en 0.
Antulius 0:f1e9b42f90d0 1317 PIN_MOTOR = 0; //Apagamos Ventilador.
Antulius 0:f1e9b42f90d0 1318 }
Antulius 0:f1e9b42f90d0 1319 /*
Antulius 0:f1e9b42f90d0 1320 ** ===================================================================
Antulius 0:f1e9b42f90d0 1321 ** Prototipo : Contacto() (Muestra info en la pantalla LCD)
Antulius 0:f1e9b42f90d0 1322 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1323 ** Descripción :
Antulius 0:f1e9b42f90d0 1324 ** Muestra en la pantalla información de contacto con los autores.
Antulius 0:f1e9b42f90d0 1325 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 1326 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 1327 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1328 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1329 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1330 ** ===================================================================
Antulius 0:f1e9b42f90d0 1331 */
Antulius 0:f1e9b42f90d0 1332 void Contacto() {
Antulius 0:f1e9b42f90d0 1333 Bandera = 0;
Antulius 0:f1e9b42f90d0 1334 Avanzar = 0;
Antulius 0:f1e9b42f90d0 1335 lcd.cls();
Antulius 0:f1e9b42f90d0 1336 lcd.locate(0,0);
Antulius 0:f1e9b42f90d0 1337 lcd.printf("ATEAM & TEAM-T Unltd");
Antulius 0:f1e9b42f90d0 1338 lcd.locate(0, 1);
Antulius 0:f1e9b42f90d0 1339 lcd.printf("Antulio Morgado Valle");
Antulius 0:f1e9b42f90d0 1340 lcd.locate(0, 2);
Antulius 0:f1e9b42f90d0 1341 lcd.printf("Raziel Lopez Escamilla");
Antulius 0:f1e9b42f90d0 1342 lcd.locate(0, 3);
Antulius 0:f1e9b42f90d0 1343 lcd.printf("IPN ESIME Zacatenco");
Antulius 0:f1e9b42f90d0 1344 while (!Bandera)
Antulius 0:f1e9b42f90d0 1345 wait_ms(250);
Antulius 0:f1e9b42f90d0 1346 }
Antulius 0:f1e9b42f90d0 1347 /*
Antulius 0:f1e9b42f90d0 1348 ** ===================================================================
Antulius 0:f1e9b42f90d0 1349 ** Prototipo : Acerca() (Muestra info en la pantalla LCD)
Antulius 0:f1e9b42f90d0 1350 ** Componente : Cpu [MKL46Z256VLL]
Antulius 0:f1e9b42f90d0 1351 ** Descripción :
Antulius 0:f1e9b42f90d0 1352 ** Muestra en la pantalla información del prototipo y de los autores.
Antulius 0:f1e9b42f90d0 1353 ** Envia los respectivos mensajes y los despliega en la
Antulius 0:f1e9b42f90d0 1354 ** pantalla LCD.
Antulius 0:f1e9b42f90d0 1355 ** Limpia la interfaz del LCD
Antulius 0:f1e9b42f90d0 1356 ** Argumentos : Ninguno
Antulius 0:f1e9b42f90d0 1357 ** Retorna : Nada
Antulius 0:f1e9b42f90d0 1358 ** ===================================================================
Antulius 0:f1e9b42f90d0 1359 */
Antulius 0:f1e9b42f90d0 1360 void Acerca() {
Antulius 0:f1e9b42f90d0 1361 Bandera = 0;
Antulius 0:f1e9b42f90d0 1362 Avanzar = 0;
Antulius 0:f1e9b42f90d0 1363 lcd.cls();
Antulius 0:f1e9b42f90d0 1364 lcd.locate(0,0);
Antulius 0:f1e9b42f90d0 1365 lcd.printf("PROTOTIPO ELABORADO ");
Antulius 0:f1e9b42f90d0 1366 lcd.locate(0, 1);
Antulius 0:f1e9b42f90d0 1367 lcd.printf(" POR PROFESORES Y ");
Antulius 0:f1e9b42f90d0 1368 lcd.locate(0, 2);
Antulius 0:f1e9b42f90d0 1369 lcd.printf(" ALUMNOS DE ESIME ");
Antulius 0:f1e9b42f90d0 1370 lcd.locate(0, 3);
Antulius 0:f1e9b42f90d0 1371 lcd.printf("Version: Beta");
Antulius 0:f1e9b42f90d0 1372 while (!Bandera)
Antulius 0:f1e9b42f90d0 1373 wait_ms(250);
Antulius 0:f1e9b42f90d0 1374 }