TP01-SE2018-PUNTO3

Dependencies:   mbed

Committer:
KilianPolkov
Date:
Tue Jun 05 00:18:10 2018 +0000
Revision:
0:8519ab8e8a30
Version 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
KilianPolkov 0:8519ab8e8a30 1 /* BOTON ARRIBA: 2do izquierda, BOTON ABAJO: 3ero izquierda, BOTON OK/STOP: 1ero derecha*/
KilianPolkov 0:8519ab8e8a30 2
KilianPolkov 0:8519ab8e8a30 3 /* consola */
KilianPolkov 0:8519ab8e8a30 4 /* pc.printf("TEMP: %d\n", temperaturaActual);
KilianPolkov 0:8519ab8e8a30 5 pc.printf("TIME: %d\n", tiempoActual);
KilianPolkov 0:8519ab8e8a30 6 pc.printf("MOTOR: %d\n", MOTOR_estado);
KilianPolkov 0:8519ab8e8a30 7 */
KilianPolkov 0:8519ab8e8a30 8
KilianPolkov 0:8519ab8e8a30 9 #include "mbed.h"
KilianPolkov 0:8519ab8e8a30 10 #include <string.h>
KilianPolkov 0:8519ab8e8a30 11
KilianPolkov 0:8519ab8e8a30 12 /* -----definiciones----- */
KilianPolkov 0:8519ab8e8a30 13 #define DATA 1 // para mandar caracter al display LCD
KilianPolkov 0:8519ab8e8a30 14 #define CMND 0 // para configurar registro al display LCD
KilianPolkov 0:8519ab8e8a30 15 #define APRETADO 0 // para indicar el apretado del pulsador
KilianPolkov 0:8519ab8e8a30 16 #define NO_APRETADO 1 // para indicar el no apretado del pulsador
KilianPolkov 0:8519ab8e8a30 17
KilianPolkov 0:8519ab8e8a30 18 /* -----enumeraciones----- */
KilianPolkov 0:8519ab8e8a30 19 enum{MENU_MODO, MENU_TEMPERATURA, MENU_CENTRIFUGADO, MENU_TIEMPO, MENU_ENJUAGUE, MENU_LAVADO, CONFIG_MODO, CONFIG_TEMPERATURA, CONFIG_CENTRIFUGADO, CONFIG_TIEMPO, CONFIG_ENJUAGUE, LAVANDO, PAUSADO}; // SELECTOR_Step
KilianPolkov 0:8519ab8e8a30 20 enum{OFF, ENJUAGADO, ENJABONADO, SUAVIZADO, DESAGOTE, CENTRIFUGADO}; // LAVADO_Step
KilianPolkov 0:8519ab8e8a30 21 enum{ALGODON, SINTETICO, PROGRAMA_BEBE, PESADO, RAPIDO}; // MODO_Step
KilianPolkov 0:8519ab8e8a30 22 enum{RPM_OFF = 0, RPM_MIN = 3, RPM_NORMAL = 6, RPM_MAX = 9}; // CENTRIFUGADO_Step
KilianPolkov 0:8519ab8e8a30 23 enum{TEMP_MIN = 10, TEMP_BAJA = 20, TEMP_NORMAL = 30, TEMP_ALTA = 40, TEMP_MAX = 50}; // TEMP_Step
KilianPolkov 0:8519ab8e8a30 24 enum{TIEMPO_FINAL_MIN = 30, TIEMPO_FINAL_BAJO = 40, TIEMPO_FINAL_NORMAL = 50, TIEMPO_FINAL_MEDIO = 60, TIEMPO_FINAL_ALTO = 70, TIEMPO_FINAL_MAX = 80}; // TIEMPO_Step
KilianPolkov 0:8519ab8e8a30 25 enum{TIEMPO_OFF = 0, TIEMPO_MIN = 5, TIEMPO_NORMAL = 10, TIEMPO_MAX = 15}; // ENJUAGUE_Step y variables tiempo
KilianPolkov 0:8519ab8e8a30 26 enum{PULS_NO_APRETADO, PULS_FLANCO_1, PULS_APRETADO, PULS_FLANCO_2}; // PULS_Step
KilianPolkov 0:8519ab8e8a30 27 enum{NO_CALENTAR = 1, CALENTAR = 0}; // ACTUADOR_Step
KilianPolkov 0:8519ab8e8a30 28 enum{NO_GIRAR = 0, GIRAR = 1}; // MOTOR_Step
KilianPolkov 0:8519ab8e8a30 29
KilianPolkov 0:8519ab8e8a30 30 /* -----clases----- */
KilianPolkov 0:8519ab8e8a30 31 /* entradas */
KilianPolkov 0:8519ab8e8a30 32 DigitalIn PULSDOWN(PTB0); // boton abajo
KilianPolkov 0:8519ab8e8a30 33 DigitalIn PULSUP(PTB1); // boton arriba
KilianPolkov 0:8519ab8e8a30 34 DigitalIn PULSOK(PTB3); // boton aceptar
KilianPolkov 0:8519ab8e8a30 35 AnalogIn LM35(PTC1); // sensor de temperatura analogico
KilianPolkov 0:8519ab8e8a30 36 /* salidas */
KilianPolkov 0:8519ab8e8a30 37 DigitalOut CALENTADOR(LED1); // es un led para indicar el encendido/apagado del CALENTADOR
KilianPolkov 0:8519ab8e8a30 38 DigitalOut MOTOR(PTC9); // es el enable para el driver del MOTOR
KilianPolkov 0:8519ab8e8a30 39 PwmOut pwm(PTA5); // es la señal para variar la velocidad del MOTOR
KilianPolkov 0:8519ab8e8a30 40 /* objetos */
KilianPolkov 0:8519ab8e8a30 41 Ticker timerMili; // instancia de la clase Ticker
KilianPolkov 0:8519ab8e8a30 42 Ticker timerSeg; // instancia de la clase Ticker
KilianPolkov 0:8519ab8e8a30 43 Serial pc(USBTX, USBRX); // instancia de la clase Serial
KilianPolkov 0:8519ab8e8a30 44 I2C i2c(PTE0, PTE1); // instancia de la clase I2C - PTEO: SDA (data), PTE1: SCL (clock)
KilianPolkov 0:8519ab8e8a30 45
KilianPolkov 0:8519ab8e8a30 46 typedef unsigned char BYTE; // sirve para escribir "BYTE" en ves de "unsigned char" que es mas largo
KilianPolkov 0:8519ab8e8a30 47
KilianPolkov 0:8519ab8e8a30 48 /* -----variables globales----- */
KilianPolkov 0:8519ab8e8a30 49 /* modulo i2c */
KilianPolkov 0:8519ab8e8a30 50 const int address = 0x7E; // address de 8bits I2C
KilianPolkov 0:8519ab8e8a30 51 int i2c_error = 0; // si hay error en el ACK se pone en 1, sino en 0
KilianPolkov 0:8519ab8e8a30 52 char fila1[17];
KilianPolkov 0:8519ab8e8a30 53 char fila2[17];
KilianPolkov 0:8519ab8e8a30 54 /* sensor LM35 */
KilianPolkov 0:8519ab8e8a30 55 char i = 0;
KilianPolkov 0:8519ab8e8a30 56 float sensado[10], promedio;
KilianPolkov 0:8519ab8e8a30 57 /* estados de funciones */
KilianPolkov 0:8519ab8e8a30 58 BYTE SELECTOR_estado; // SELECTOR_Step
KilianPolkov 0:8519ab8e8a30 59 BYTE LAVADO_estado; // LAVADO_Step
KilianPolkov 0:8519ab8e8a30 60 BYTE LAVADO_ultimoEstado; // LAVADO_Step
KilianPolkov 0:8519ab8e8a30 61 BYTE MODO_estado; // MODO_Step
KilianPolkov 0:8519ab8e8a30 62 BYTE CENTRIFUGADO_estado; // CENTRIFUGADO_Step
KilianPolkov 0:8519ab8e8a30 63 BYTE TEMP_estado; // TEMP_Step
KilianPolkov 0:8519ab8e8a30 64 BYTE TIEMPO_estado; // TIEMPO_Step
KilianPolkov 0:8519ab8e8a30 65 BYTE ENJUAGUE_estado; // ENJUAGUE_Step
KilianPolkov 0:8519ab8e8a30 66 BYTE PULS_tout; // PULS_Step
KilianPolkov 0:8519ab8e8a30 67 BYTE ACTUADOR_estado; // ACTUADOR_Step
KilianPolkov 0:8519ab8e8a30 68 BYTE MOTOR_estado; // MOTOR_Step
KilianPolkov 0:8519ab8e8a30 69 /* estados de pulsadores */
KilianPolkov 0:8519ab8e8a30 70 BYTE PULSOK_estado, PULSUP_estado, PULSDOWN_estado; //variables utilizadas en la maquina de estados
KilianPolkov 0:8519ab8e8a30 71 /* variables maquinas de estados */
KilianPolkov 0:8519ab8e8a30 72 char temperaturaSeteada, temperaturaActual, rpmSeteado, vecesEnjuagado;
KilianPolkov 0:8519ab8e8a30 73 char tiempoActual, tiempoDiferido, tiempoSeteado, tiempoEnjuague, tiempoEnjabonado, tiempoSuavizado, tiempoDesagote, tiempoCentrifugado; // tiempos
KilianPolkov 0:8519ab8e8a30 74
KilianPolkov 0:8519ab8e8a30 75 /* -----prototipos funciones----- */
KilianPolkov 0:8519ab8e8a30 76 /* funciones generales */
KilianPolkov 0:8519ab8e8a30 77 void miliSegundo(void); // se ejecuta cada milisegundo
KilianPolkov 0:8519ab8e8a30 78 void segundo(void); // se ejecuta cada segundo
KilianPolkov 0:8519ab8e8a30 79 void initMCU(void); // se ejecuta una sola vez al inicializar el microcontrolador
KilianPolkov 0:8519ab8e8a30 80 void showTimeNow(void); // imprime en pantalla el tiempo actual
KilianPolkov 0:8519ab8e8a30 81 void detectForBack(void); // vuelve al menu principal MENU_MODO
KilianPolkov 0:8519ab8e8a30 82 void readSensor(void); // lee 10 valores y saca el promedio del sensor LM35
KilianPolkov 0:8519ab8e8a30 83 char isWashing(void); // devuelve true si esta lavando, sino false
KilianPolkov 0:8519ab8e8a30 84 /* funciones maquina de estados */
KilianPolkov 0:8519ab8e8a30 85 void SELECTOR_Step(void); // maquina de estados principal
KilianPolkov 0:8519ab8e8a30 86 void LAVADO_Step(void); // maquina de estados lavado
KilianPolkov 0:8519ab8e8a30 87 void MODO_Step(void); // maquina de estados para setear modo o programa (algodon, sintetico)
KilianPolkov 0:8519ab8e8a30 88 void CENTRIFUGADO_Step(void); // maquina de estados para setear centrifugado (configura las RPM, si esta en 0 RPM es que no centrifuga)
KilianPolkov 0:8519ab8e8a30 89 void TEMP_Step(void); // maquina de estados para setear temperatura (para configurar manualmente la temperatura en vez de utilizar los modos o programas)
KilianPolkov 0:8519ab8e8a30 90 void TIEMPO_Step(void); // maquina de estados para setear el tiempo diferido (cuando finaliza el ciclo de lavado)
KilianPolkov 0:8519ab8e8a30 91 void ENJUAGUE_Step(void); // maquina de estados para setear ciclos de enjuague
KilianPolkov 0:8519ab8e8a30 92 void ACTUADOR_Step(void); // maquina de estados para activar/desactivar el calentador
KilianPolkov 0:8519ab8e8a30 93 void MOTOR_Step(void); // maquina de estados para activar/desactivar el motor
KilianPolkov 0:8519ab8e8a30 94 BYTE PULS_Step(BYTE PULSADOR, BYTE& estado);// maquina de estados para detectar el flanco de los pulsadores
KilianPolkov 0:8519ab8e8a30 95 /* funciones I2C */
KilianPolkov 0:8519ab8e8a30 96 void LCD_wr( BYTE dato ); // funcion para escritura de un byte
KilianPolkov 0:8519ab8e8a30 97 /* funciones display LCD */
KilianPolkov 0:8519ab8e8a30 98 void LCD_init(void); // inicializacion del display LCD
KilianPolkov 0:8519ab8e8a30 99 void LCD_send(BYTE data, BYTE reset); // manda 4 bits mas significativos, despues 4 bits menos significativos
KilianPolkov 0:8519ab8e8a30 100 void printstr(char* s); // muestra en el display LCD un string
KilianPolkov 0:8519ab8e8a30 101 void LCD_print(void); // muestra el display LCD
KilianPolkov 0:8519ab8e8a30 102
KilianPolkov 0:8519ab8e8a30 103 int main() {
KilianPolkov 0:8519ab8e8a30 104 LCD_init();
KilianPolkov 0:8519ab8e8a30 105 initMCU();
KilianPolkov 0:8519ab8e8a30 106 while(1) {
KilianPolkov 0:8519ab8e8a30 107 /* ejecuta */
KilianPolkov 0:8519ab8e8a30 108 SELECTOR_Step(); // maquina de estados principal
KilianPolkov 0:8519ab8e8a30 109 LCD_print(); // printea en el LCD
KilianPolkov 0:8519ab8e8a30 110
KilianPolkov 0:8519ab8e8a30 111 /* girar o no girar el motor */
KilianPolkov 0:8519ab8e8a30 112 if(LAVADO_estado == ENJUAGADO || LAVADO_estado == CENTRIFUGADO)
KilianPolkov 0:8519ab8e8a30 113 MOTOR_estado = GIRAR;
KilianPolkov 0:8519ab8e8a30 114 else
KilianPolkov 0:8519ab8e8a30 115 MOTOR_estado = NO_GIRAR;
KilianPolkov 0:8519ab8e8a30 116
KilianPolkov 0:8519ab8e8a30 117 /* activa o desactiva el motor dependiendo de MOTOR_estado */
KilianPolkov 0:8519ab8e8a30 118 MOTOR_Step();
KilianPolkov 0:8519ab8e8a30 119
KilianPolkov 0:8519ab8e8a30 120 /* si esta lavando */
KilianPolkov 0:8519ab8e8a30 121 if(isWashing()) { // si no para de girar cuando esta pausado, CAMBIAR ACA
KilianPolkov 0:8519ab8e8a30 122 showTimeNow();
KilianPolkov 0:8519ab8e8a30 123 ACTUADOR_Step(); // maquina de estados para activar/desactivar el calentador
KilianPolkov 0:8519ab8e8a30 124 }
KilianPolkov 0:8519ab8e8a30 125 }
KilianPolkov 0:8519ab8e8a30 126 }
KilianPolkov 0:8519ab8e8a30 127
KilianPolkov 0:8519ab8e8a30 128 /* -----contador que se decrementa cada milisegundo----- */
KilianPolkov 0:8519ab8e8a30 129 void miliSegundo() {
KilianPolkov 0:8519ab8e8a30 130 if(PULS_tout > 0) PULS_tout--;
KilianPolkov 0:8519ab8e8a30 131 }
KilianPolkov 0:8519ab8e8a30 132
KilianPolkov 0:8519ab8e8a30 133 /* -----cada segundo se decrementa el valor del temporizador(si no esta pausado) y tambien se lee el valor de temperatura del LM35----- */
KilianPolkov 0:8519ab8e8a30 134 void segundo() {
KilianPolkov 0:8519ab8e8a30 135 readSensor();
KilianPolkov 0:8519ab8e8a30 136 if(isWashing()) tiempoActual--;
KilianPolkov 0:8519ab8e8a30 137 }
KilianPolkov 0:8519ab8e8a30 138
KilianPolkov 0:8519ab8e8a30 139 /* -----guarda en el vector de la fila1 el tiempoActual----- */
KilianPolkov 0:8519ab8e8a30 140 void showTimeNow() {
KilianPolkov 0:8519ab8e8a30 141 strcpy(fila1, "TIME ACTUAL:xxs ");
KilianPolkov 0:8519ab8e8a30 142 fila1[12] = (tiempoActual / 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 143 fila1[13] = (tiempoActual % 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 144 }
KilianPolkov 0:8519ab8e8a30 145
KilianPolkov 0:8519ab8e8a30 146 /* -----vuelve al menu principal MENU_MODO----- */
KilianPolkov 0:8519ab8e8a30 147 void detectForBack() {
KilianPolkov 0:8519ab8e8a30 148 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_MODO; // cuando se presiona el pulsador vuelve al menu principal
KilianPolkov 0:8519ab8e8a30 149 }
KilianPolkov 0:8519ab8e8a30 150
KilianPolkov 0:8519ab8e8a30 151 /* -----lee 10 valores y saca el promedio del sensor LM35----- */
KilianPolkov 0:8519ab8e8a30 152 void readSensor(void) {
KilianPolkov 0:8519ab8e8a30 153 promedio = 0;
KilianPolkov 0:8519ab8e8a30 154 for(i = 0; i < 10; i++){
KilianPolkov 0:8519ab8e8a30 155 sensado[i] = LM35.read();
KilianPolkov 0:8519ab8e8a30 156 }
KilianPolkov 0:8519ab8e8a30 157 for(i = 0; i < 10; i++){
KilianPolkov 0:8519ab8e8a30 158 promedio += sensado[i]/10;
KilianPolkov 0:8519ab8e8a30 159 }
KilianPolkov 0:8519ab8e8a30 160 temperaturaActual = (promedio*3.25*100);
KilianPolkov 0:8519ab8e8a30 161 }
KilianPolkov 0:8519ab8e8a30 162
KilianPolkov 0:8519ab8e8a30 163 /* -----devuelve true si esta lavando, sino false----- */
KilianPolkov 0:8519ab8e8a30 164 char isWashing() {
KilianPolkov 0:8519ab8e8a30 165 if(LAVADO_estado == ENJUAGADO || LAVADO_estado == ENJABONADO || LAVADO_estado == SUAVIZADO || LAVADO_estado == DESAGOTE || LAVADO_estado == CENTRIFUGADO) return 1; // devuelve true
KilianPolkov 0:8519ab8e8a30 166 return 0; // si no se cumple la sentencia if, devuelve false
KilianPolkov 0:8519ab8e8a30 167 }
KilianPolkov 0:8519ab8e8a30 168
KilianPolkov 0:8519ab8e8a30 169 /* -----se ejecuta una sola vez al inicializar el microcontrolador----- */
KilianPolkov 0:8519ab8e8a30 170 void initMCU(void) {
KilianPolkov 0:8519ab8e8a30 171 pc.printf("PROGRAMA INICIALIZADO\n");
KilianPolkov 0:8519ab8e8a30 172
KilianPolkov 0:8519ab8e8a30 173 /* PWM */
KilianPolkov 0:8519ab8e8a30 174 pwm.period_ms(10);
KilianPolkov 0:8519ab8e8a30 175 pwm.pulsewidth_ms(RPM_OFF);
KilianPolkov 0:8519ab8e8a30 176 pc.printf("pwm set to %.2f %%\n", pwm.read() * 100);
KilianPolkov 0:8519ab8e8a30 177
KilianPolkov 0:8519ab8e8a30 178 /* TIMER */
KilianPolkov 0:8519ab8e8a30 179 PULS_tout = TIEMPO_OFF;
KilianPolkov 0:8519ab8e8a30 180 timerMili.attach(&miliSegundo, 0.001); // timer en 1ms
KilianPolkov 0:8519ab8e8a30 181 timerSeg.attach(&segundo, 1); // timer en 1s
KilianPolkov 0:8519ab8e8a30 182
KilianPolkov 0:8519ab8e8a30 183 /* SELECTOR_Step */
KilianPolkov 0:8519ab8e8a30 184 SELECTOR_estado = MENU_MODO;
KilianPolkov 0:8519ab8e8a30 185
KilianPolkov 0:8519ab8e8a30 186 /* LAVADO_Step */
KilianPolkov 0:8519ab8e8a30 187 LAVADO_estado = OFF;
KilianPolkov 0:8519ab8e8a30 188 tiempoCentrifugado = TIEMPO_OFF; // se inicializa en 0s por si no se configura el centrifugado, se puede modificar
KilianPolkov 0:8519ab8e8a30 189 tiempoEnjuague = TIEMPO_MIN; // se inicializa en 5s, se puede modificar
KilianPolkov 0:8519ab8e8a30 190 tiempoEnjabonado = TIEMPO_MIN; // se inicializa en 5s, se puede modificar
KilianPolkov 0:8519ab8e8a30 191 tiempoSuavizado = TIEMPO_MIN; // se inicializa en 5s, se puede modificar
KilianPolkov 0:8519ab8e8a30 192 tiempoDesagote = TIEMPO_MIN; // se inicializa en 5s, se puede modificar
KilianPolkov 0:8519ab8e8a30 193 vecesEnjuagado = 1; // se inicializa en 1, despues se incrementa hasta 3 porque es la cantidad maxima de enjuagues
KilianPolkov 0:8519ab8e8a30 194
KilianPolkov 0:8519ab8e8a30 195 /* MODO_Step */
KilianPolkov 0:8519ab8e8a30 196 MODO_estado = ALGODON;
KilianPolkov 0:8519ab8e8a30 197
KilianPolkov 0:8519ab8e8a30 198 /* CENTRIFUGADO_Step */
KilianPolkov 0:8519ab8e8a30 199 CENTRIFUGADO_estado = RPM_OFF;
KilianPolkov 0:8519ab8e8a30 200 rpmSeteado = RPM_OFF; // se inicializa en 0rps, se puede modificar
KilianPolkov 0:8519ab8e8a30 201
KilianPolkov 0:8519ab8e8a30 202 /* TEMP_Step */
KilianPolkov 0:8519ab8e8a30 203 TEMP_estado = TEMP_MIN;
KilianPolkov 0:8519ab8e8a30 204
KilianPolkov 0:8519ab8e8a30 205 /* TIEMPO_Step */
KilianPolkov 0:8519ab8e8a30 206 TIEMPO_estado = TIEMPO_FINAL_BAJO;
KilianPolkov 0:8519ab8e8a30 207 tiempoActual = tiempoDiferido = tiempoSeteado = TIEMPO_FINAL_BAJO; // se inicializa en 40s, se puede modificar
KilianPolkov 0:8519ab8e8a30 208
KilianPolkov 0:8519ab8e8a30 209 /* PULSADORES */
KilianPolkov 0:8519ab8e8a30 210 PULSOK_estado = PULS_NO_APRETADO;
KilianPolkov 0:8519ab8e8a30 211 PULSUP_estado = PULS_NO_APRETADO;
KilianPolkov 0:8519ab8e8a30 212 PULSDOWN_estado = PULS_NO_APRETADO;
KilianPolkov 0:8519ab8e8a30 213
KilianPolkov 0:8519ab8e8a30 214 /* ACTUADOR_Step */
KilianPolkov 0:8519ab8e8a30 215 ACTUADOR_estado = NO_CALENTAR;
KilianPolkov 0:8519ab8e8a30 216 CALENTADOR = NO_CALENTAR;
KilianPolkov 0:8519ab8e8a30 217
KilianPolkov 0:8519ab8e8a30 218 /* MOTOR_Step */
KilianPolkov 0:8519ab8e8a30 219 MOTOR_estado = NO_GIRAR;
KilianPolkov 0:8519ab8e8a30 220
KilianPolkov 0:8519ab8e8a30 221 /* ENJUAGUE_Step */
KilianPolkov 0:8519ab8e8a30 222 ENJUAGUE_estado = TIEMPO_MIN;
KilianPolkov 0:8519ab8e8a30 223 }
KilianPolkov 0:8519ab8e8a30 224
KilianPolkov 0:8519ab8e8a30 225 /* -----maquina de estados principal----- */
KilianPolkov 0:8519ab8e8a30 226 void SELECTOR_Step() {
KilianPolkov 0:8519ab8e8a30 227 switch(SELECTOR_estado) {
KilianPolkov 0:8519ab8e8a30 228 default:
KilianPolkov 0:8519ab8e8a30 229 case MENU_MODO:
KilianPolkov 0:8519ab8e8a30 230 strcpy(fila1, "MENU: ");
KilianPolkov 0:8519ab8e8a30 231 strcpy(fila2, "CONFIG MODE ");
KilianPolkov 0:8519ab8e8a30 232 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_LAVADO;
KilianPolkov 0:8519ab8e8a30 233 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_TEMPERATURA;
KilianPolkov 0:8519ab8e8a30 234 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1) SELECTOR_estado = CONFIG_MODO;
KilianPolkov 0:8519ab8e8a30 235 break;
KilianPolkov 0:8519ab8e8a30 236 case MENU_TEMPERATURA:
KilianPolkov 0:8519ab8e8a30 237 strcpy(fila2, "CONFIG TEMP ");
KilianPolkov 0:8519ab8e8a30 238 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_MODO;
KilianPolkov 0:8519ab8e8a30 239 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_CENTRIFUGADO;
KilianPolkov 0:8519ab8e8a30 240 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1) SELECTOR_estado = CONFIG_TEMPERATURA;
KilianPolkov 0:8519ab8e8a30 241 break;
KilianPolkov 0:8519ab8e8a30 242 case MENU_CENTRIFUGADO:
KilianPolkov 0:8519ab8e8a30 243 strcpy(fila2, "CONFIG RPM ");
KilianPolkov 0:8519ab8e8a30 244 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_TEMPERATURA;
KilianPolkov 0:8519ab8e8a30 245 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_TIEMPO;
KilianPolkov 0:8519ab8e8a30 246 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1) SELECTOR_estado = CONFIG_CENTRIFUGADO;
KilianPolkov 0:8519ab8e8a30 247 break;
KilianPolkov 0:8519ab8e8a30 248 case MENU_TIEMPO:
KilianPolkov 0:8519ab8e8a30 249 strcpy(fila2, "CONFIG TIME ");
KilianPolkov 0:8519ab8e8a30 250 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_CENTRIFUGADO;
KilianPolkov 0:8519ab8e8a30 251 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_ENJUAGUE;
KilianPolkov 0:8519ab8e8a30 252 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1) SELECTOR_estado = CONFIG_TIEMPO;
KilianPolkov 0:8519ab8e8a30 253 break;
KilianPolkov 0:8519ab8e8a30 254 case MENU_ENJUAGUE:
KilianPolkov 0:8519ab8e8a30 255 strcpy(fila2, "CONFIG ENJUAGUE ");
KilianPolkov 0:8519ab8e8a30 256 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_TIEMPO;
KilianPolkov 0:8519ab8e8a30 257 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_LAVADO;
KilianPolkov 0:8519ab8e8a30 258 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1) SELECTOR_estado = CONFIG_ENJUAGUE;
KilianPolkov 0:8519ab8e8a30 259 break;
KilianPolkov 0:8519ab8e8a30 260 case MENU_LAVADO:
KilianPolkov 0:8519ab8e8a30 261 strcpy(fila2, "COMENZAR ");
KilianPolkov 0:8519ab8e8a30 262 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_ENJUAGUE;
KilianPolkov 0:8519ab8e8a30 263 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) SELECTOR_estado = MENU_MODO;
KilianPolkov 0:8519ab8e8a30 264 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1) {
KilianPolkov 0:8519ab8e8a30 265 SELECTOR_estado = LAVANDO;
KilianPolkov 0:8519ab8e8a30 266 LAVADO_estado = ENJUAGADO;
KilianPolkov 0:8519ab8e8a30 267 tiempoSeteado -= tiempoEnjuague; //primer ciclo de lavado
KilianPolkov 0:8519ab8e8a30 268 }
KilianPolkov 0:8519ab8e8a30 269 break;
KilianPolkov 0:8519ab8e8a30 270 case CONFIG_MODO:
KilianPolkov 0:8519ab8e8a30 271 MODO_Step();
KilianPolkov 0:8519ab8e8a30 272 detectForBack();
KilianPolkov 0:8519ab8e8a30 273 break;
KilianPolkov 0:8519ab8e8a30 274 case CONFIG_TEMPERATURA:
KilianPolkov 0:8519ab8e8a30 275 TEMP_Step();
KilianPolkov 0:8519ab8e8a30 276 detectForBack();
KilianPolkov 0:8519ab8e8a30 277 break;
KilianPolkov 0:8519ab8e8a30 278 case CONFIG_CENTRIFUGADO:
KilianPolkov 0:8519ab8e8a30 279 CENTRIFUGADO_Step();
KilianPolkov 0:8519ab8e8a30 280 detectForBack();
KilianPolkov 0:8519ab8e8a30 281 break;
KilianPolkov 0:8519ab8e8a30 282 case CONFIG_TIEMPO:
KilianPolkov 0:8519ab8e8a30 283 TIEMPO_Step();
KilianPolkov 0:8519ab8e8a30 284 detectForBack();
KilianPolkov 0:8519ab8e8a30 285 break;
KilianPolkov 0:8519ab8e8a30 286 case CONFIG_ENJUAGUE:
KilianPolkov 0:8519ab8e8a30 287 ENJUAGUE_Step();
KilianPolkov 0:8519ab8e8a30 288 detectForBack();
KilianPolkov 0:8519ab8e8a30 289 break;
KilianPolkov 0:8519ab8e8a30 290 case LAVANDO:
KilianPolkov 0:8519ab8e8a30 291 LAVADO_Step();
KilianPolkov 0:8519ab8e8a30 292 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1) {
KilianPolkov 0:8519ab8e8a30 293 LAVADO_estado = OFF; // pone en OFF, es decir, deja de lavar en LAVADO_Step
KilianPolkov 0:8519ab8e8a30 294 SELECTOR_estado = PAUSADO; // va al estado PAUSADO del SELECTOR_Step
KilianPolkov 0:8519ab8e8a30 295 }
KilianPolkov 0:8519ab8e8a30 296 break;
KilianPolkov 0:8519ab8e8a30 297 case PAUSADO:
KilianPolkov 0:8519ab8e8a30 298 strcpy(fila2, "PAUSADO... ");
KilianPolkov 0:8519ab8e8a30 299 if(PULS_Step(PULSOK, PULSOK_estado) == PULS_FLANCO_1){
KilianPolkov 0:8519ab8e8a30 300 LAVADO_estado = LAVADO_ultimoEstado; // vuelve al ultimo estado de LAVADO_estado
KilianPolkov 0:8519ab8e8a30 301 SELECTOR_estado = LAVANDO; // vuelve al estado LAVANDO del SELECTOR_Step
KilianPolkov 0:8519ab8e8a30 302 }
KilianPolkov 0:8519ab8e8a30 303 break;
KilianPolkov 0:8519ab8e8a30 304 }
KilianPolkov 0:8519ab8e8a30 305 }
KilianPolkov 0:8519ab8e8a30 306
KilianPolkov 0:8519ab8e8a30 307 /* -----maquina de estados lavado----- */
KilianPolkov 0:8519ab8e8a30 308 void LAVADO_Step() {
KilianPolkov 0:8519ab8e8a30 309 switch(LAVADO_estado) {
KilianPolkov 0:8519ab8e8a30 310 default:
KilianPolkov 0:8519ab8e8a30 311 case OFF:
KilianPolkov 0:8519ab8e8a30 312 tiempoSeteado = tiempoActual = tiempoDiferido;
KilianPolkov 0:8519ab8e8a30 313 vecesEnjuagado = 1;
KilianPolkov 0:8519ab8e8a30 314 CALENTADOR = NO_CALENTAR;
KilianPolkov 0:8519ab8e8a30 315 SELECTOR_estado = MENU_MODO;
KilianPolkov 0:8519ab8e8a30 316 break;
KilianPolkov 0:8519ab8e8a30 317 case ENJUAGADO:
KilianPolkov 0:8519ab8e8a30 318 strcpy(fila2, "ENJUAGANDO... ");
KilianPolkov 0:8519ab8e8a30 319 /* finaliza tiempo enjuagado */
KilianPolkov 0:8519ab8e8a30 320 if(tiempoActual == tiempoSeteado) {
KilianPolkov 0:8519ab8e8a30 321 switch(vecesEnjuagado) {
KilianPolkov 0:8519ab8e8a30 322 case 1: /* finaliza primer enjuague */
KilianPolkov 0:8519ab8e8a30 323 tiempoSeteado -= tiempoEnjabonado; // segundo ciclo de lavado
KilianPolkov 0:8519ab8e8a30 324 LAVADO_estado = ENJABONADO;
KilianPolkov 0:8519ab8e8a30 325 break;
KilianPolkov 0:8519ab8e8a30 326 case 2: /* finaliza segundo enjuague, despues del enjabonado */
KilianPolkov 0:8519ab8e8a30 327 tiempoSeteado -= tiempoSuavizado; // cuarto ciclo de lavado
KilianPolkov 0:8519ab8e8a30 328 LAVADO_estado = SUAVIZADO;
KilianPolkov 0:8519ab8e8a30 329 break;
KilianPolkov 0:8519ab8e8a30 330 case 3: /* finaliza tercer enjuague, despues del suavizado */
KilianPolkov 0:8519ab8e8a30 331 tiempoSeteado -= tiempoDesagote; // sexto ciclo de lavado
KilianPolkov 0:8519ab8e8a30 332 LAVADO_estado = DESAGOTE;
KilianPolkov 0:8519ab8e8a30 333 break;
KilianPolkov 0:8519ab8e8a30 334 }
KilianPolkov 0:8519ab8e8a30 335 }
KilianPolkov 0:8519ab8e8a30 336 LAVADO_ultimoEstado = ENJUAGADO;
KilianPolkov 0:8519ab8e8a30 337 break;
KilianPolkov 0:8519ab8e8a30 338 case ENJABONADO:
KilianPolkov 0:8519ab8e8a30 339 strcpy(fila2, "ENJABONANDO... ");
KilianPolkov 0:8519ab8e8a30 340 /* finaliza tiempo enjabonado */
KilianPolkov 0:8519ab8e8a30 341 if(tiempoActual == tiempoSeteado) {
KilianPolkov 0:8519ab8e8a30 342 vecesEnjuagado++;
KilianPolkov 0:8519ab8e8a30 343 tiempoSeteado -= tiempoEnjuague; // tercer ciclo de lavado
KilianPolkov 0:8519ab8e8a30 344 LAVADO_estado = ENJUAGADO;
KilianPolkov 0:8519ab8e8a30 345 }
KilianPolkov 0:8519ab8e8a30 346 LAVADO_ultimoEstado = ENJABONADO;
KilianPolkov 0:8519ab8e8a30 347 break;
KilianPolkov 0:8519ab8e8a30 348 case SUAVIZADO:
KilianPolkov 0:8519ab8e8a30 349 strcpy(fila2, "SUAVIZANDO... ");
KilianPolkov 0:8519ab8e8a30 350 /* finaliza tiempo suavizado */
KilianPolkov 0:8519ab8e8a30 351 if(tiempoActual == tiempoSeteado) {
KilianPolkov 0:8519ab8e8a30 352 vecesEnjuagado++;
KilianPolkov 0:8519ab8e8a30 353 tiempoSeteado -= tiempoEnjuague; // quinto ciclo de lavado
KilianPolkov 0:8519ab8e8a30 354 LAVADO_estado = ENJUAGADO;
KilianPolkov 0:8519ab8e8a30 355 }
KilianPolkov 0:8519ab8e8a30 356 LAVADO_ultimoEstado = SUAVIZADO;
KilianPolkov 0:8519ab8e8a30 357 break;
KilianPolkov 0:8519ab8e8a30 358 case DESAGOTE:
KilianPolkov 0:8519ab8e8a30 359 strcpy(fila2, "DESAGOTANDO... ");
KilianPolkov 0:8519ab8e8a30 360 /* finaliza tiempo desagote */
KilianPolkov 0:8519ab8e8a30 361 if(tiempoActual == tiempoSeteado && rpmSeteado != RPM_OFF) {
KilianPolkov 0:8519ab8e8a30 362 tiempoSeteado -= tiempoCentrifugado; // septimo ciclo de lavado, se ejecuta solo si queres centrifugar
KilianPolkov 0:8519ab8e8a30 363 LAVADO_estado = CENTRIFUGADO;
KilianPolkov 0:8519ab8e8a30 364 }
KilianPolkov 0:8519ab8e8a30 365 LAVADO_ultimoEstado = DESAGOTE;
KilianPolkov 0:8519ab8e8a30 366 if(tiempoActual == 0) LAVADO_estado = OFF;
KilianPolkov 0:8519ab8e8a30 367 break;
KilianPolkov 0:8519ab8e8a30 368 case CENTRIFUGADO:
KilianPolkov 0:8519ab8e8a30 369 strcpy(fila2, "CENTRIFUGANDO...");
KilianPolkov 0:8519ab8e8a30 370 LAVADO_ultimoEstado = CENTRIFUGADO;
KilianPolkov 0:8519ab8e8a30 371 if(tiempoActual == 0) LAVADO_estado = OFF;
KilianPolkov 0:8519ab8e8a30 372 break;
KilianPolkov 0:8519ab8e8a30 373 }
KilianPolkov 0:8519ab8e8a30 374 }
KilianPolkov 0:8519ab8e8a30 375
KilianPolkov 0:8519ab8e8a30 376 /* -----maquina de estados para setear modo o programa (algodon, sintetico, etc)----- */
KilianPolkov 0:8519ab8e8a30 377 void MODO_Step() {
KilianPolkov 0:8519ab8e8a30 378 strcpy(fila1, "CONFIG: ");
KilianPolkov 0:8519ab8e8a30 379 switch(MODO_estado) {
KilianPolkov 0:8519ab8e8a30 380 default:
KilianPolkov 0:8519ab8e8a30 381 case ALGODON:
KilianPolkov 0:8519ab8e8a30 382 strcpy(fila2, "MODO:ALGODON ");
KilianPolkov 0:8519ab8e8a30 383 temperaturaSeteada = TEMP_BAJA;
KilianPolkov 0:8519ab8e8a30 384 tiempoEnjuague = TIEMPO_MAX; //15s tiempo enjuague
KilianPolkov 0:8519ab8e8a30 385 if(rpmSeteado)
KilianPolkov 0:8519ab8e8a30 386 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_ALTO; //70s tiempo total, 10s tiempo centrifugado
KilianPolkov 0:8519ab8e8a30 387 else
KilianPolkov 0:8519ab8e8a30 388 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_MEDIO; //60s tiempo total, 0s tiempo centrifugado
KilianPolkov 0:8519ab8e8a30 389 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) MODO_estado = PESADO;
KilianPolkov 0:8519ab8e8a30 390 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) MODO_estado = SINTETICO;
KilianPolkov 0:8519ab8e8a30 391 break;
KilianPolkov 0:8519ab8e8a30 392 case SINTETICO:
KilianPolkov 0:8519ab8e8a30 393 strcpy(fila2, "MODO:SINTETICO ");
KilianPolkov 0:8519ab8e8a30 394 temperaturaSeteada = TEMP_NORMAL;
KilianPolkov 0:8519ab8e8a30 395 tiempoEnjuague = TIEMPO_NORMAL; //10s tiempo enjuague
KilianPolkov 0:8519ab8e8a30 396 if(rpmSeteado)
KilianPolkov 0:8519ab8e8a30 397 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_MEDIO; //60s tiempo total, 15s tiempo centrifugado
KilianPolkov 0:8519ab8e8a30 398 else
KilianPolkov 0:8519ab8e8a30 399 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_NORMAL; //50s tiempo total, 0s tiempo centrifugado
KilianPolkov 0:8519ab8e8a30 400 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) MODO_estado = ALGODON;
KilianPolkov 0:8519ab8e8a30 401 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) MODO_estado = RAPIDO;
KilianPolkov 0:8519ab8e8a30 402 break;
KilianPolkov 0:8519ab8e8a30 403 case RAPIDO:
KilianPolkov 0:8519ab8e8a30 404 strcpy(fila2, "MODO:RAPIDO ");
KilianPolkov 0:8519ab8e8a30 405 temperaturaSeteada = TEMP_NORMAL;
KilianPolkov 0:8519ab8e8a30 406 tiempoEnjuague = TIEMPO_MIN; //5s tiempo enjuague
KilianPolkov 0:8519ab8e8a30 407 if(rpmSeteado)
KilianPolkov 0:8519ab8e8a30 408 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_BAJO; //40s tiempo total, 10s tiempo centrifugado
KilianPolkov 0:8519ab8e8a30 409 else
KilianPolkov 0:8519ab8e8a30 410 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_MIN; //30s tiempo total, 0s tiempo centrifugado
KilianPolkov 0:8519ab8e8a30 411 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) MODO_estado = SINTETICO;
KilianPolkov 0:8519ab8e8a30 412 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) MODO_estado = PROGRAMA_BEBE;
KilianPolkov 0:8519ab8e8a30 413 break;
KilianPolkov 0:8519ab8e8a30 414 case PROGRAMA_BEBE:
KilianPolkov 0:8519ab8e8a30 415 strcpy(fila2, "MODO:BEBE ");
KilianPolkov 0:8519ab8e8a30 416 temperaturaSeteada = TEMP_MAX;
KilianPolkov 0:8519ab8e8a30 417 tiempoEnjuague = TIEMPO_MAX; //15s tiempo enjuague
KilianPolkov 0:8519ab8e8a30 418 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_MAX; //80s tiempo total, 20s tiempo centrifugado
KilianPolkov 0:8519ab8e8a30 419 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) MODO_estado = RAPIDO;
KilianPolkov 0:8519ab8e8a30 420 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) MODO_estado = PESADO;
KilianPolkov 0:8519ab8e8a30 421 break;
KilianPolkov 0:8519ab8e8a30 422 case PESADO:
KilianPolkov 0:8519ab8e8a30 423 strcpy(fila2, "MODO:PESADO ");
KilianPolkov 0:8519ab8e8a30 424 temperaturaSeteada = TEMP_NORMAL;
KilianPolkov 0:8519ab8e8a30 425 tiempoEnjuague = TIEMPO_MIN; //5s tiempo enjuague
KilianPolkov 0:8519ab8e8a30 426 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_NORMAL; //50s tiempo total, 20s tiempo centrifugado
KilianPolkov 0:8519ab8e8a30 427 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) MODO_estado = PROGRAMA_BEBE;
KilianPolkov 0:8519ab8e8a30 428 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) MODO_estado = ALGODON;
KilianPolkov 0:8519ab8e8a30 429 break;
KilianPolkov 0:8519ab8e8a30 430 }
KilianPolkov 0:8519ab8e8a30 431 }
KilianPolkov 0:8519ab8e8a30 432
KilianPolkov 0:8519ab8e8a30 433 /* -----maquina de estados para setear centrifugado (configura las RPM, si esta en 0 RPM es que no centrifuga)----- */
KilianPolkov 0:8519ab8e8a30 434 void CENTRIFUGADO_Step() {
KilianPolkov 0:8519ab8e8a30 435 strcpy(fila1, "CONFIG: ");
KilianPolkov 0:8519ab8e8a30 436 strcpy(fila2, "RPM SET:xx ");
KilianPolkov 0:8519ab8e8a30 437 fila2[8] = (rpmSeteado / 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 438 fila2[9] = (rpmSeteado % 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 439 switch(CENTRIFUGADO_estado) {
KilianPolkov 0:8519ab8e8a30 440 default:
KilianPolkov 0:8519ab8e8a30 441 case RPM_OFF:
KilianPolkov 0:8519ab8e8a30 442 rpmSeteado = RPM_OFF;
KilianPolkov 0:8519ab8e8a30 443 pwm.pulsewidth_ms(RPM_OFF);
KilianPolkov 0:8519ab8e8a30 444 tiempoCentrifugado = TIEMPO_OFF;
KilianPolkov 0:8519ab8e8a30 445 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) CENTRIFUGADO_estado = RPM_MAX;
KilianPolkov 0:8519ab8e8a30 446 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) CENTRIFUGADO_estado = RPM_MIN;
KilianPolkov 0:8519ab8e8a30 447 break;
KilianPolkov 0:8519ab8e8a30 448 case RPM_MIN:
KilianPolkov 0:8519ab8e8a30 449 rpmSeteado = RPM_MIN;
KilianPolkov 0:8519ab8e8a30 450 pwm.pulsewidth_ms(RPM_MIN);
KilianPolkov 0:8519ab8e8a30 451 tiempoCentrifugado = TIEMPO_MIN;
KilianPolkov 0:8519ab8e8a30 452 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) CENTRIFUGADO_estado = RPM_OFF;
KilianPolkov 0:8519ab8e8a30 453 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) CENTRIFUGADO_estado = RPM_NORMAL;
KilianPolkov 0:8519ab8e8a30 454 break;
KilianPolkov 0:8519ab8e8a30 455 case RPM_NORMAL:
KilianPolkov 0:8519ab8e8a30 456 rpmSeteado = RPM_NORMAL;
KilianPolkov 0:8519ab8e8a30 457 pwm.pulsewidth_ms(RPM_NORMAL);
KilianPolkov 0:8519ab8e8a30 458 tiempoCentrifugado = TIEMPO_MIN;
KilianPolkov 0:8519ab8e8a30 459 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) CENTRIFUGADO_estado = RPM_MIN;
KilianPolkov 0:8519ab8e8a30 460 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) CENTRIFUGADO_estado = RPM_MAX;
KilianPolkov 0:8519ab8e8a30 461 break;
KilianPolkov 0:8519ab8e8a30 462 case RPM_MAX:
KilianPolkov 0:8519ab8e8a30 463 rpmSeteado = RPM_MAX;
KilianPolkov 0:8519ab8e8a30 464 pwm.pulsewidth_ms(RPM_MAX);
KilianPolkov 0:8519ab8e8a30 465 tiempoCentrifugado = TIEMPO_MIN;
KilianPolkov 0:8519ab8e8a30 466 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) CENTRIFUGADO_estado = RPM_NORMAL;
KilianPolkov 0:8519ab8e8a30 467 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) CENTRIFUGADO_estado = RPM_OFF;
KilianPolkov 0:8519ab8e8a30 468 break;
KilianPolkov 0:8519ab8e8a30 469 }
KilianPolkov 0:8519ab8e8a30 470 }
KilianPolkov 0:8519ab8e8a30 471
KilianPolkov 0:8519ab8e8a30 472 /* -----maquina de estados para setear temperatura (para configurar manualmente la temperatura en vez de utilizar los modos o programas)----- */
KilianPolkov 0:8519ab8e8a30 473 void TEMP_Step() {
KilianPolkov 0:8519ab8e8a30 474 strcpy(fila1, "TEMP NOW:xxg ");
KilianPolkov 0:8519ab8e8a30 475 fila1[9] = (temperaturaActual / 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 476 fila1[10] = (temperaturaActual % 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 477 fila1[11] = 0xDF; // para el simbolo de grado
KilianPolkov 0:8519ab8e8a30 478 strcpy(fila2, "TEMP SET:xxg ");
KilianPolkov 0:8519ab8e8a30 479 fila2[9] = (temperaturaSeteada / 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 480 fila2[10] = (temperaturaSeteada % 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 481 fila2[11] = 0xDF; // para el simbolo de grado
KilianPolkov 0:8519ab8e8a30 482 switch(TEMP_estado) {
KilianPolkov 0:8519ab8e8a30 483 default:
KilianPolkov 0:8519ab8e8a30 484 case TEMP_MIN:
KilianPolkov 0:8519ab8e8a30 485 temperaturaSeteada = TEMP_MIN;
KilianPolkov 0:8519ab8e8a30 486 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_MAX;
KilianPolkov 0:8519ab8e8a30 487 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_BAJA;
KilianPolkov 0:8519ab8e8a30 488 break;
KilianPolkov 0:8519ab8e8a30 489 case TEMP_BAJA:
KilianPolkov 0:8519ab8e8a30 490 temperaturaSeteada = TEMP_BAJA;
KilianPolkov 0:8519ab8e8a30 491 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_MIN;
KilianPolkov 0:8519ab8e8a30 492 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_NORMAL;
KilianPolkov 0:8519ab8e8a30 493 break;
KilianPolkov 0:8519ab8e8a30 494 case TEMP_NORMAL:
KilianPolkov 0:8519ab8e8a30 495 temperaturaSeteada = TEMP_NORMAL;
KilianPolkov 0:8519ab8e8a30 496 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_BAJA;
KilianPolkov 0:8519ab8e8a30 497 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_ALTA;
KilianPolkov 0:8519ab8e8a30 498 break;
KilianPolkov 0:8519ab8e8a30 499 case TEMP_ALTA:
KilianPolkov 0:8519ab8e8a30 500 temperaturaSeteada = TEMP_ALTA;
KilianPolkov 0:8519ab8e8a30 501 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_NORMAL;
KilianPolkov 0:8519ab8e8a30 502 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_MAX;
KilianPolkov 0:8519ab8e8a30 503 break;
KilianPolkov 0:8519ab8e8a30 504 case TEMP_MAX:
KilianPolkov 0:8519ab8e8a30 505 temperaturaSeteada = TEMP_MAX;
KilianPolkov 0:8519ab8e8a30 506 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_ALTA;
KilianPolkov 0:8519ab8e8a30 507 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TEMP_estado = TEMP_MIN;
KilianPolkov 0:8519ab8e8a30 508 break;
KilianPolkov 0:8519ab8e8a30 509 }
KilianPolkov 0:8519ab8e8a30 510 }
KilianPolkov 0:8519ab8e8a30 511
KilianPolkov 0:8519ab8e8a30 512 /* -----maquina de estados para setear el tiempo diferido (cuando finaliza el ciclo de lavado)----- */
KilianPolkov 0:8519ab8e8a30 513 void TIEMPO_Step() {
KilianPolkov 0:8519ab8e8a30 514 strcpy(fila1, "CONFIG: ");
KilianPolkov 0:8519ab8e8a30 515 strcpy(fila2, "TIME SET:x ");
KilianPolkov 0:8519ab8e8a30 516 fila2[9] = (tiempoDiferido / 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 517 fila2[10] = (tiempoDiferido % 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 518 switch(TIEMPO_estado) {
KilianPolkov 0:8519ab8e8a30 519 default:
KilianPolkov 0:8519ab8e8a30 520 case TIEMPO_FINAL_BAJO:
KilianPolkov 0:8519ab8e8a30 521 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_BAJO;
KilianPolkov 0:8519ab8e8a30 522 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_NORMAL;
KilianPolkov 0:8519ab8e8a30 523 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_MAX;
KilianPolkov 0:8519ab8e8a30 524 break;
KilianPolkov 0:8519ab8e8a30 525 case TIEMPO_FINAL_NORMAL:
KilianPolkov 0:8519ab8e8a30 526 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_NORMAL;
KilianPolkov 0:8519ab8e8a30 527 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_MEDIO;
KilianPolkov 0:8519ab8e8a30 528 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_BAJO;
KilianPolkov 0:8519ab8e8a30 529 break;
KilianPolkov 0:8519ab8e8a30 530 case TIEMPO_FINAL_MEDIO:
KilianPolkov 0:8519ab8e8a30 531 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_MEDIO;
KilianPolkov 0:8519ab8e8a30 532 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_ALTO;
KilianPolkov 0:8519ab8e8a30 533 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_NORMAL;
KilianPolkov 0:8519ab8e8a30 534 break;
KilianPolkov 0:8519ab8e8a30 535 case TIEMPO_FINAL_ALTO:
KilianPolkov 0:8519ab8e8a30 536 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_ALTO;
KilianPolkov 0:8519ab8e8a30 537 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_MAX;
KilianPolkov 0:8519ab8e8a30 538 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_MEDIO;
KilianPolkov 0:8519ab8e8a30 539 break;
KilianPolkov 0:8519ab8e8a30 540 case TIEMPO_FINAL_MAX:
KilianPolkov 0:8519ab8e8a30 541 tiempoSeteado = tiempoActual = tiempoDiferido = TIEMPO_FINAL_MAX;
KilianPolkov 0:8519ab8e8a30 542 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_BAJO;
KilianPolkov 0:8519ab8e8a30 543 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) TIEMPO_estado = TIEMPO_FINAL_ALTO;
KilianPolkov 0:8519ab8e8a30 544 break;
KilianPolkov 0:8519ab8e8a30 545 }
KilianPolkov 0:8519ab8e8a30 546 }
KilianPolkov 0:8519ab8e8a30 547
KilianPolkov 0:8519ab8e8a30 548 /* -----maquina de estados para setear ciclos de enjuague----- */
KilianPolkov 0:8519ab8e8a30 549 void ENJUAGUE_Step() {
KilianPolkov 0:8519ab8e8a30 550 strcpy(fila1, "CONFIG: ");
KilianPolkov 0:8519ab8e8a30 551 strcpy(fila2, "TIME ENJUAGUE:xx");
KilianPolkov 0:8519ab8e8a30 552 fila2[14] = (tiempoEnjuague / 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 553 fila2[15] = (tiempoEnjuague % 10) + 0x30;
KilianPolkov 0:8519ab8e8a30 554 switch(ENJUAGUE_estado) {
KilianPolkov 0:8519ab8e8a30 555 default:
KilianPolkov 0:8519ab8e8a30 556 case TIEMPO_MIN:
KilianPolkov 0:8519ab8e8a30 557 tiempoEnjuague = TIEMPO_MIN;
KilianPolkov 0:8519ab8e8a30 558 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) ENJUAGUE_estado = TIEMPO_NORMAL;
KilianPolkov 0:8519ab8e8a30 559 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) ENJUAGUE_estado = TIEMPO_MAX;
KilianPolkov 0:8519ab8e8a30 560 break;
KilianPolkov 0:8519ab8e8a30 561 case TIEMPO_NORMAL:
KilianPolkov 0:8519ab8e8a30 562 tiempoEnjuague = TIEMPO_NORMAL;
KilianPolkov 0:8519ab8e8a30 563 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) ENJUAGUE_estado = TIEMPO_MAX;
KilianPolkov 0:8519ab8e8a30 564 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) ENJUAGUE_estado = TIEMPO_MIN;
KilianPolkov 0:8519ab8e8a30 565 break;
KilianPolkov 0:8519ab8e8a30 566 case TIEMPO_MAX:
KilianPolkov 0:8519ab8e8a30 567 tiempoEnjuague = TIEMPO_MAX;
KilianPolkov 0:8519ab8e8a30 568 if(PULS_Step(PULSUP, PULSUP_estado) == PULS_FLANCO_1) ENJUAGUE_estado = TIEMPO_MIN;
KilianPolkov 0:8519ab8e8a30 569 if(PULS_Step(PULSDOWN, PULSDOWN_estado) == PULS_FLANCO_1) ENJUAGUE_estado = TIEMPO_NORMAL;
KilianPolkov 0:8519ab8e8a30 570 break;
KilianPolkov 0:8519ab8e8a30 571 }
KilianPolkov 0:8519ab8e8a30 572 }
KilianPolkov 0:8519ab8e8a30 573
KilianPolkov 0:8519ab8e8a30 574 /* -----maquina de estados para activar/desactivar el calentadorl----- */
KilianPolkov 0:8519ab8e8a30 575 void ACTUADOR_Step() {
KilianPolkov 0:8519ab8e8a30 576 switch(ACTUADOR_estado) {
KilianPolkov 0:8519ab8e8a30 577 default:
KilianPolkov 0:8519ab8e8a30 578 case NO_CALENTAR:
KilianPolkov 0:8519ab8e8a30 579 CALENTADOR = NO_CALENTAR;
KilianPolkov 0:8519ab8e8a30 580 if(temperaturaActual < temperaturaSeteada) ACTUADOR_estado = CALENTAR;
KilianPolkov 0:8519ab8e8a30 581 break;
KilianPolkov 0:8519ab8e8a30 582 case CALENTAR:
KilianPolkov 0:8519ab8e8a30 583 CALENTADOR = CALENTAR;
KilianPolkov 0:8519ab8e8a30 584 if(temperaturaActual >= temperaturaSeteada) ACTUADOR_estado = NO_CALENTAR;
KilianPolkov 0:8519ab8e8a30 585 break;
KilianPolkov 0:8519ab8e8a30 586 }
KilianPolkov 0:8519ab8e8a30 587 }
KilianPolkov 0:8519ab8e8a30 588
KilianPolkov 0:8519ab8e8a30 589 /* -----maquina de estados para activar/desactivar el motor----- */
KilianPolkov 0:8519ab8e8a30 590 void MOTOR_Step() {
KilianPolkov 0:8519ab8e8a30 591 switch(MOTOR_estado) {
KilianPolkov 0:8519ab8e8a30 592 default:
KilianPolkov 0:8519ab8e8a30 593 case NO_GIRAR:
KilianPolkov 0:8519ab8e8a30 594 MOTOR = NO_GIRAR;
KilianPolkov 0:8519ab8e8a30 595 break;
KilianPolkov 0:8519ab8e8a30 596 case GIRAR:
KilianPolkov 0:8519ab8e8a30 597 MOTOR = GIRAR;
KilianPolkov 0:8519ab8e8a30 598 break;
KilianPolkov 0:8519ab8e8a30 599 }
KilianPolkov 0:8519ab8e8a30 600 }
KilianPolkov 0:8519ab8e8a30 601
KilianPolkov 0:8519ab8e8a30 602 /* -----maquina de estados para detectar el flanco de los pulsadores----- */
KilianPolkov 0:8519ab8e8a30 603 BYTE PULS_Step(BYTE PULSADOR, BYTE& estado) {
KilianPolkov 0:8519ab8e8a30 604 switch(estado){
KilianPolkov 0:8519ab8e8a30 605 default:
KilianPolkov 0:8519ab8e8a30 606 case PULS_NO_APRETADO:
KilianPolkov 0:8519ab8e8a30 607 if(PULSADOR == APRETADO && PULS_tout == 0){
KilianPolkov 0:8519ab8e8a30 608 estado = PULS_FLANCO_1;
KilianPolkov 0:8519ab8e8a30 609 PULS_tout = 5; // 5ms de espera
KilianPolkov 0:8519ab8e8a30 610 }
KilianPolkov 0:8519ab8e8a30 611 break;
KilianPolkov 0:8519ab8e8a30 612 case PULS_FLANCO_1:
KilianPolkov 0:8519ab8e8a30 613 if(PULSADOR == APRETADO && PULS_tout == 0){
KilianPolkov 0:8519ab8e8a30 614 estado = PULS_APRETADO;
KilianPolkov 0:8519ab8e8a30 615 PULS_tout = 5; // 5ms de espera
KilianPolkov 0:8519ab8e8a30 616 }
KilianPolkov 0:8519ab8e8a30 617 if(PULSADOR == NO_APRETADO && PULS_tout == 0){
KilianPolkov 0:8519ab8e8a30 618 estado = PULS_NO_APRETADO;
KilianPolkov 0:8519ab8e8a30 619 PULS_tout = 5; // 5ms de espera
KilianPolkov 0:8519ab8e8a30 620 }
KilianPolkov 0:8519ab8e8a30 621 break;
KilianPolkov 0:8519ab8e8a30 622 case PULS_APRETADO:
KilianPolkov 0:8519ab8e8a30 623 if(PULSADOR == NO_APRETADO && PULS_tout == 0){
KilianPolkov 0:8519ab8e8a30 624 estado = PULS_NO_APRETADO;
KilianPolkov 0:8519ab8e8a30 625 PULS_tout = 5; //5ms de espera
KilianPolkov 0:8519ab8e8a30 626 }
KilianPolkov 0:8519ab8e8a30 627 break;
KilianPolkov 0:8519ab8e8a30 628 }
KilianPolkov 0:8519ab8e8a30 629 return estado;
KilianPolkov 0:8519ab8e8a30 630 }
KilianPolkov 0:8519ab8e8a30 631
KilianPolkov 0:8519ab8e8a30 632 /* -----escribe un byte----- */
KilianPolkov 0:8519ab8e8a30 633 void LCD_wr( BYTE dato ) {
KilianPolkov 0:8519ab8e8a30 634 dato = dato & 0xF0; // hace una mascara con 0b11110000 para que queda los 4 MSB
KilianPolkov 0:8519ab8e8a30 635 do{
KilianPolkov 0:8519ab8e8a30 636 i2c.start();
KilianPolkov 0:8519ab8e8a30 637 i2c_error = i2c.write( address );
KilianPolkov 0:8519ab8e8a30 638 }while( i2c_error == 0 ); /* espera fin ciclo escritura (ACK polling) */
KilianPolkov 0:8519ab8e8a30 639 /* Primero mando los 4 bits mas significativos */
KilianPolkov 0:8519ab8e8a30 640 i2c.write( dato | 0x09 ); // esta mascara pone BACKLIGHT = 1, ENABLE = 0, RW = 0, RESET = 1
KilianPolkov 0:8519ab8e8a30 641 i2c.write( dato | 0x0D ); // esta mascara pone BACKLIGHT = 1, ENABLE = 1, RW = 0, RESET = 1
KilianPolkov 0:8519ab8e8a30 642 i2c.write( dato | 0x09 ); // esta mascara pone BACKLIGHT = 1, ENABLE = 0, RW = 0, RESET = 1
KilianPolkov 0:8519ab8e8a30 643 /* Mando STOP */
KilianPolkov 0:8519ab8e8a30 644 i2c.stop();
KilianPolkov 0:8519ab8e8a30 645 }
KilianPolkov 0:8519ab8e8a30 646
KilianPolkov 0:8519ab8e8a30 647 /* -----escribe 4 MSB, luego 4 LSB, si reset = 1 es porque manda un caracter, si reset = 0 configura registro----- */
KilianPolkov 0:8519ab8e8a30 648 void LCD_send(BYTE data, BYTE reset) {
KilianPolkov 0:8519ab8e8a30 649 BYTE DataHIGH, DataLOW;
KilianPolkov 0:8519ab8e8a30 650 DataHIGH = data & 0xF0; // hace una mascara con 0b11110000 para que queda los 4 MSB
KilianPolkov 0:8519ab8e8a30 651 DataLOW = ( data << 4 ) & 0xF0; // mueve los 4 LSB a la izquierda
KilianPolkov 0:8519ab8e8a30 652 do{
KilianPolkov 0:8519ab8e8a30 653 i2c.start();
KilianPolkov 0:8519ab8e8a30 654 i2c_error = i2c.write( address );
KilianPolkov 0:8519ab8e8a30 655 }while( i2c_error == 0 ); /* espera fin ciclo escritura (ACK polling) */
KilianPolkov 0:8519ab8e8a30 656 /* primero mando los 4 bits mas significativos */
KilianPolkov 0:8519ab8e8a30 657 i2c.write( DataHIGH | ( 0x0C | reset ) ); // esta mascara pone BACKLIGHT = 1, ENABLE = 1, RW = 0, RESET = X
KilianPolkov 0:8519ab8e8a30 658 i2c.write( DataHIGH | ( 0x08 | reset ) ); // esta mascara pone BACKLIGHT = 1, ENABLE = 0, RW = 0, RESET = X
KilianPolkov 0:8519ab8e8a30 659 /* despues mando los 4 bits menos significativos */
KilianPolkov 0:8519ab8e8a30 660 i2c.write( DataLOW | ( 0x0C | reset ) ); // esta mascara pone BACKLIGHT = 1, ENABLE = 1, RW = 0, RESET = X
KilianPolkov 0:8519ab8e8a30 661 i2c.write( DataLOW | ( 0x08 | reset ) ); // esta mascara pone BACKLIGHT = 1, ENABLE = 0, RW = 0, RESET = X
KilianPolkov 0:8519ab8e8a30 662 i2c.write( DataLOW | 0x0C ); // esta mascara pone BACKLIGHT = 1, ENABLE = 1, RW = 0, RESET = 0
KilianPolkov 0:8519ab8e8a30 663 /* mando STOP */
KilianPolkov 0:8519ab8e8a30 664 i2c.stop();
KilianPolkov 0:8519ab8e8a30 665 }
KilianPolkov 0:8519ab8e8a30 666
KilianPolkov 0:8519ab8e8a30 667 /* -----inicializacion LCD----- */
KilianPolkov 0:8519ab8e8a30 668 void LCD_init() {
KilianPolkov 0:8519ab8e8a30 669 i2c.frequency(300000);
KilianPolkov 0:8519ab8e8a30 670 wait(0.4);
KilianPolkov 0:8519ab8e8a30 671 LCD_wr( 0x30 );
KilianPolkov 0:8519ab8e8a30 672 LCD_wr( 0x30 );
KilianPolkov 0:8519ab8e8a30 673 LCD_wr( 0x30 );
KilianPolkov 0:8519ab8e8a30 674 LCD_wr( 0x20 ); /* --- modo 4 bit --- */
KilianPolkov 0:8519ab8e8a30 675 LCD_send( 0x28 , CMND ); /* --- modo 4b - 2 lin - car 5x7 --- */
KilianPolkov 0:8519ab8e8a30 676 LCD_send( 0x08 , CMND ); /* --- apaga display --- */
KilianPolkov 0:8519ab8e8a30 677 LCD_send( 0x01 , CMND ); /* --- clear --- */
KilianPolkov 0:8519ab8e8a30 678 wait(0.2);
KilianPolkov 0:8519ab8e8a30 679 LCD_send( 0x0C , CMND ); /* --- disp on - cur off - blink off --- */
KilianPolkov 0:8519ab8e8a30 680 LCD_send( 0x06 , CMND ); /* --- inc - no scroll --- */
KilianPolkov 0:8519ab8e8a30 681 pc.printf("DISPLAY INICIALIZADO\n");
KilianPolkov 0:8519ab8e8a30 682 }
KilianPolkov 0:8519ab8e8a30 683
KilianPolkov 0:8519ab8e8a30 684 /* -----muestra string en el display LCD----- */
KilianPolkov 0:8519ab8e8a30 685 void printstr(char* s) {
KilianPolkov 0:8519ab8e8a30 686 /* recorre el vector s (el string parametro de la funcion), hasta que llega al final "\0" */
KilianPolkov 0:8519ab8e8a30 687 for (char i = 0; s[i] != '\0'; i++) LCD_send(s[i], DATA);
KilianPolkov 0:8519ab8e8a30 688 }
KilianPolkov 0:8519ab8e8a30 689
KilianPolkov 0:8519ab8e8a30 690 /* -----muestra en el display LCD los vectores fila1 y fila2----- */
KilianPolkov 0:8519ab8e8a30 691 void LCD_print() {
KilianPolkov 0:8519ab8e8a30 692 LCD_send( 0x80 , CMND ); // posiciona en columna de arriba, y en la primer linea
KilianPolkov 0:8519ab8e8a30 693 printstr(fila1); // una vez posicionado, muestra el texto en la fila 1
KilianPolkov 0:8519ab8e8a30 694 LCD_send( 0xC0 , CMND ); // posiciona en columna de abajo, y en la segunda linea
KilianPolkov 0:8519ab8e8a30 695 printstr(fila2); // una vez posicionado, muestra el texto en la fila 2
KilianPolkov 0:8519ab8e8a30 696 }