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

Dependencies:   mbed TextLCD

Committer:
RazielLopez
Date:
Sun Sep 23 07:01:57 2018 +0000
Revision:
2:4973fac2b60e
Parent:
1:456851b4e285
Child:
3:e6dcc9400791
Prueba para imprimir variable Opci?n con m?todo printf

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