EJERCICIO 1 - TERMINADO - SOTELO - D´ANDREA
Dependencies: mbed tsi_sensor DHT11
main.cpp@0:39a6762ddcc1, 2019-06-18 (annotated)
- Committer:
- feede_dandrea
- Date:
- Tue Jun 18 13:49:41 2019 +0000
- Revision:
- 0:39a6762ddcc1
EJERCICIO 1 - TERMINADO;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
feede_dandrea | 0:39a6762ddcc1 | 1 | //TRABAJO PRACTICO 1 - COOLER |
feede_dandrea | 0:39a6762ddcc1 | 2 | |
feede_dandrea | 0:39a6762ddcc1 | 3 | #include "mbed.h" |
feede_dandrea | 0:39a6762ddcc1 | 4 | #include <stdlib.h> /* srand, rand */ |
feede_dandrea | 0:39a6762ddcc1 | 5 | #include <time.h> /* time */ |
feede_dandrea | 0:39a6762ddcc1 | 6 | #include "tsi_sensor.h" |
feede_dandrea | 0:39a6762ddcc1 | 7 | #include "Dht11.h" /* LIBRERIA SENSOR */ |
feede_dandrea | 0:39a6762ddcc1 | 8 | |
feede_dandrea | 0:39a6762ddcc1 | 9 | /* This defines will be replaced by PinNames soon */ |
feede_dandrea | 0:39a6762ddcc1 | 10 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
feede_dandrea | 0:39a6762ddcc1 | 11 | #define ELEC0 9 |
feede_dandrea | 0:39a6762ddcc1 | 12 | #define ELEC1 10 |
feede_dandrea | 0:39a6762ddcc1 | 13 | #elif defined (TARGET_KL05Z) |
feede_dandrea | 0:39a6762ddcc1 | 14 | #define ELEC0 9 |
feede_dandrea | 0:39a6762ddcc1 | 15 | #define ELEC1 8 |
feede_dandrea | 0:39a6762ddcc1 | 16 | #else |
feede_dandrea | 0:39a6762ddcc1 | 17 | #error TARGET NOT DEFINED |
feede_dandrea | 0:39a6762ddcc1 | 18 | #endif |
feede_dandrea | 0:39a6762ddcc1 | 19 | |
feede_dandrea | 0:39a6762ddcc1 | 20 | |
feede_dandrea | 0:39a6762ddcc1 | 21 | |
feede_dandrea | 0:39a6762ddcc1 | 22 | TSIAnalogSlider tsi(ELEC0, ELEC1, 40); |
feede_dandrea | 0:39a6762ddcc1 | 23 | |
feede_dandrea | 0:39a6762ddcc1 | 24 | |
feede_dandrea | 0:39a6762ddcc1 | 25 | DigitalOut rojo(LED_RED); |
feede_dandrea | 0:39a6762ddcc1 | 26 | DigitalOut verde(LED_GREEN); |
feede_dandrea | 0:39a6762ddcc1 | 27 | DigitalOut azul(LED_BLUE); |
feede_dandrea | 0:39a6762ddcc1 | 28 | |
feede_dandrea | 0:39a6762ddcc1 | 29 | DigitalIn vueltas(PTD2); |
feede_dandrea | 0:39a6762ddcc1 | 30 | |
feede_dandrea | 0:39a6762ddcc1 | 31 | InterruptIn vuel(PTD4); |
feede_dandrea | 0:39a6762ddcc1 | 32 | |
feede_dandrea | 0:39a6762ddcc1 | 33 | Dht11 sensor(PTD7); |
feede_dandrea | 0:39a6762ddcc1 | 34 | |
feede_dandrea | 0:39a6762ddcc1 | 35 | |
feede_dandrea | 0:39a6762ddcc1 | 36 | AnalogIn potenciometro(PTB0); |
feede_dandrea | 0:39a6762ddcc1 | 37 | |
feede_dandrea | 0:39a6762ddcc1 | 38 | PwmOut cooler(PTB3); //Menos significativo unidad |
feede_dandrea | 0:39a6762ddcc1 | 39 | |
feede_dandrea | 0:39a6762ddcc1 | 40 | Ticker tiempo; |
feede_dandrea | 0:39a6762ddcc1 | 41 | |
feede_dandrea | 0:39a6762ddcc1 | 42 | Ticker escritura; |
feede_dandrea | 0:39a6762ddcc1 | 43 | enum {INICIO,GENERADOR,DETECCION,CHEQUEO}; |
feede_dandrea | 0:39a6762ddcc1 | 44 | enum {COMIENZO,ABIERTO,CERRADO}; |
feede_dandrea | 0:39a6762ddcc1 | 45 | enum {ROJO,VERDE,AZUL,ON,OFF}; |
feede_dandrea | 0:39a6762ddcc1 | 46 | |
feede_dandrea | 0:39a6762ddcc1 | 47 | int estado=0, modo=0,comienza_juego,color=0,segundos=0,giros=0,RPM=0,entrada=0,escritura_hab=OFF; |
feede_dandrea | 0:39a6762ddcc1 | 48 | |
feede_dandrea | 0:39a6762ddcc1 | 49 | float p=0,incr=0.0005; |
feede_dandrea | 0:39a6762ddcc1 | 50 | |
feede_dandrea | 0:39a6762ddcc1 | 51 | DigitalOut myled(LED1); |
feede_dandrea | 0:39a6762ddcc1 | 52 | |
feede_dandrea | 0:39a6762ddcc1 | 53 | void sumav(){ |
feede_dandrea | 0:39a6762ddcc1 | 54 | giros++; //por cada vuelta del cooler incrementa un giro |
feede_dandrea | 0:39a6762ddcc1 | 55 | } |
feede_dandrea | 0:39a6762ddcc1 | 56 | |
feede_dandrea | 0:39a6762ddcc1 | 57 | |
feede_dandrea | 0:39a6762ddcc1 | 58 | void segundo_reset() //cada un segundo toma el valor de los giros, predice su valor en RPM, los guarda en otra variable y resetea los giros |
feede_dandrea | 0:39a6762ddcc1 | 59 | { |
feede_dandrea | 0:39a6762ddcc1 | 60 | segundos++; |
feede_dandrea | 0:39a6762ddcc1 | 61 | if(segundos==1) { |
feede_dandrea | 0:39a6762ddcc1 | 62 | RPM=giros*60; |
feede_dandrea | 0:39a6762ddcc1 | 63 | giros=0; |
feede_dandrea | 0:39a6762ddcc1 | 64 | segundos=0; |
feede_dandrea | 0:39a6762ddcc1 | 65 | } |
feede_dandrea | 0:39a6762ddcc1 | 66 | } |
feede_dandrea | 0:39a6762ddcc1 | 67 | void escritura_cooler() //cada cierto tiempo escribe al a salida del PWM |
feede_dandrea | 0:39a6762ddcc1 | 68 | { |
feede_dandrea | 0:39a6762ddcc1 | 69 | cooler.period(0.5f); |
feede_dandrea | 0:39a6762ddcc1 | 70 | cooler.write(p); |
feede_dandrea | 0:39a6762ddcc1 | 71 | } |
feede_dandrea | 0:39a6762ddcc1 | 72 | void cooler_automatizado()//funcion principal que controla los modos |
feede_dandrea | 0:39a6762ddcc1 | 73 | { |
feede_dandrea | 0:39a6762ddcc1 | 74 | switch(estado) { |
feede_dandrea | 0:39a6762ddcc1 | 75 | case COMIENZO: |
feede_dandrea | 0:39a6762ddcc1 | 76 | if(modo==CERRADO) {//se activa el modo cerrado |
feede_dandrea | 0:39a6762ddcc1 | 77 | printf("MODO CERRADO ACTIVADO\n\r"); |
feede_dandrea | 0:39a6762ddcc1 | 78 | escritura_hab=OFF; |
feede_dandrea | 0:39a6762ddcc1 | 79 | estado=CERRADO; |
feede_dandrea | 0:39a6762ddcc1 | 80 | } |
feede_dandrea | 0:39a6762ddcc1 | 81 | if(modo==ABIERTO) {//se activa el modo abierto |
feede_dandrea | 0:39a6762ddcc1 | 82 | printf("MODO ABIERTO ACTIVADO\n\r"); |
feede_dandrea | 0:39a6762ddcc1 | 83 | escritura_hab=OFF; |
feede_dandrea | 0:39a6762ddcc1 | 84 | estado=ABIERTO; |
feede_dandrea | 0:39a6762ddcc1 | 85 | } |
feede_dandrea | 0:39a6762ddcc1 | 86 | break; |
feede_dandrea | 0:39a6762ddcc1 | 87 | case CERRADO: |
feede_dandrea | 0:39a6762ddcc1 | 88 | sensor.read(); //indica que se va a leer el DHT11 |
feede_dandrea | 0:39a6762ddcc1 | 89 | if(sensor.getCelsius()==20){ //si la temperatura es 20 se mantiene en 3000 RPM |
feede_dandrea | 0:39a6762ddcc1 | 90 | if(RPM>3000){ |
feede_dandrea | 0:39a6762ddcc1 | 91 | p=p-incr; |
feede_dandrea | 0:39a6762ddcc1 | 92 | } |
feede_dandrea | 0:39a6762ddcc1 | 93 | else{ |
feede_dandrea | 0:39a6762ddcc1 | 94 | p=p+incr; |
feede_dandrea | 0:39a6762ddcc1 | 95 | } |
feede_dandrea | 0:39a6762ddcc1 | 96 | } |
feede_dandrea | 0:39a6762ddcc1 | 97 | if((sensor.getCelsius()>20)&&(sensor.getCelsius()<70)){//en el rango de 20 y 70 grados hace una regla de tres y saca el RPM equivalente y trata de llevar su velocidad al RPM indicado |
feede_dandrea | 0:39a6762ddcc1 | 98 | int cel = sensor.getCelsius();//lee el sensor en celsius |
feede_dandrea | 0:39a6762ddcc1 | 99 | int resultado = (cel * 10000) / 70; |
feede_dandrea | 0:39a6762ddcc1 | 100 | printf("TEMP: %d resultado: %d RPM: %d\r\n",cel,resultado,RPM);// |
feede_dandrea | 0:39a6762ddcc1 | 101 | if(RPM>resultado){ |
feede_dandrea | 0:39a6762ddcc1 | 102 | p=p-(float)0.0005;//disminuye la velocidad |
feede_dandrea | 0:39a6762ddcc1 | 103 | } |
feede_dandrea | 0:39a6762ddcc1 | 104 | else{ |
feede_dandrea | 0:39a6762ddcc1 | 105 | p=p+(float)0.0005;//aumenta la velocidad |
feede_dandrea | 0:39a6762ddcc1 | 106 | } |
feede_dandrea | 0:39a6762ddcc1 | 107 | if(p>(float)1){ |
feede_dandrea | 0:39a6762ddcc1 | 108 | p=(float)1;//el cooler al maximo |
feede_dandrea | 0:39a6762ddcc1 | 109 | } |
feede_dandrea | 0:39a6762ddcc1 | 110 | } |
feede_dandrea | 0:39a6762ddcc1 | 111 | if(sensor.getCelsius()>=70){ |
feede_dandrea | 0:39a6762ddcc1 | 112 | p=(float)1;//mas de 70c al maximo |
feede_dandrea | 0:39a6762ddcc1 | 113 | } |
feede_dandrea | 0:39a6762ddcc1 | 114 | if(escritura_hab==OFF) { |
feede_dandrea | 0:39a6762ddcc1 | 115 | escritura.attach(&escritura_cooler,0.2);//se acrtualiza la info del duty cada 200ms |
feede_dandrea | 0:39a6762ddcc1 | 116 | escritura_hab=ON; |
feede_dandrea | 0:39a6762ddcc1 | 117 | } |
feede_dandrea | 0:39a6762ddcc1 | 118 | break; |
feede_dandrea | 0:39a6762ddcc1 | 119 | |
feede_dandrea | 0:39a6762ddcc1 | 120 | case ABIERTO: |
feede_dandrea | 0:39a6762ddcc1 | 121 | printf("RPM: %d\n\r",RPM); |
feede_dandrea | 0:39a6762ddcc1 | 122 | if(RPM>=3000){ |
feede_dandrea | 0:39a6762ddcc1 | 123 | p=potenciometro;//si la velocidad es mas grande que la minima le presta atencion al potenciometro |
feede_dandrea | 0:39a6762ddcc1 | 124 | } |
feede_dandrea | 0:39a6762ddcc1 | 125 | else{ |
feede_dandrea | 0:39a6762ddcc1 | 126 | p=p+incr;//de lo contrario se incrementa la velocidad |
feede_dandrea | 0:39a6762ddcc1 | 127 | } |
feede_dandrea | 0:39a6762ddcc1 | 128 | if(escritura_hab==OFF) { |
feede_dandrea | 0:39a6762ddcc1 | 129 | escritura.attach(&escritura_cooler,0.2); |
feede_dandrea | 0:39a6762ddcc1 | 130 | escritura_hab=ON; |
feede_dandrea | 0:39a6762ddcc1 | 131 | } |
feede_dandrea | 0:39a6762ddcc1 | 132 | if(p>(float)1){ |
feede_dandrea | 0:39a6762ddcc1 | 133 | p=(float)1; |
feede_dandrea | 0:39a6762ddcc1 | 134 | } |
feede_dandrea | 0:39a6762ddcc1 | 135 | break; |
feede_dandrea | 0:39a6762ddcc1 | 136 | } |
feede_dandrea | 0:39a6762ddcc1 | 137 | } |
feede_dandrea | 0:39a6762ddcc1 | 138 | |
feede_dandrea | 0:39a6762ddcc1 | 139 | |
feede_dandrea | 0:39a6762ddcc1 | 140 | |
feede_dandrea | 0:39a6762ddcc1 | 141 | |
feede_dandrea | 0:39a6762ddcc1 | 142 | |
feede_dandrea | 0:39a6762ddcc1 | 143 | int main() |
feede_dandrea | 0:39a6762ddcc1 | 144 | { |
feede_dandrea | 0:39a6762ddcc1 | 145 | rojo=1; |
feede_dandrea | 0:39a6762ddcc1 | 146 | verde=1; |
feede_dandrea | 0:39a6762ddcc1 | 147 | azul=1; |
feede_dandrea | 0:39a6762ddcc1 | 148 | |
feede_dandrea | 0:39a6762ddcc1 | 149 | tiempo.attach(&segundo_reset,1); |
feede_dandrea | 0:39a6762ddcc1 | 150 | vuel.rise(&sumav); |
feede_dandrea | 0:39a6762ddcc1 | 151 | |
feede_dandrea | 0:39a6762ddcc1 | 152 | while(1) { |
feede_dandrea | 0:39a6762ddcc1 | 153 | cooler_automatizado(); |
feede_dandrea | 0:39a6762ddcc1 | 154 | |
feede_dandrea | 0:39a6762ddcc1 | 155 | float v = tsi.readPercentage(); |
feede_dandrea | 0:39a6762ddcc1 | 156 | |
feede_dandrea | 0:39a6762ddcc1 | 157 | if((v>(float)0.15)&&(v<(float)0.4)) { |
feede_dandrea | 0:39a6762ddcc1 | 158 | rojo=0; |
feede_dandrea | 0:39a6762ddcc1 | 159 | verde=1; |
feede_dandrea | 0:39a6762ddcc1 | 160 | azul=1; |
feede_dandrea | 0:39a6762ddcc1 | 161 | estado=COMIENZO; |
feede_dandrea | 0:39a6762ddcc1 | 162 | modo=ABIERTO; |
feede_dandrea | 0:39a6762ddcc1 | 163 | v=0; |
feede_dandrea | 0:39a6762ddcc1 | 164 | |
feede_dandrea | 0:39a6762ddcc1 | 165 | } else if((v>(float)0.3)&&(v<(float)0.6)) { |
feede_dandrea | 0:39a6762ddcc1 | 166 | rojo=1; |
feede_dandrea | 0:39a6762ddcc1 | 167 | verde=0; |
feede_dandrea | 0:39a6762ddcc1 | 168 | azul=1; |
feede_dandrea | 0:39a6762ddcc1 | 169 | } else if((v>(float)0.5)&&(v<(float)0.9)) { |
feede_dandrea | 0:39a6762ddcc1 | 170 | rojo=1; |
feede_dandrea | 0:39a6762ddcc1 | 171 | verde=1; |
feede_dandrea | 0:39a6762ddcc1 | 172 | azul=0; |
feede_dandrea | 0:39a6762ddcc1 | 173 | estado=COMIENZO; |
feede_dandrea | 0:39a6762ddcc1 | 174 | modo=CERRADO; |
feede_dandrea | 0:39a6762ddcc1 | 175 | v=0; |
feede_dandrea | 0:39a6762ddcc1 | 176 | } else if((v>=(float)0.9)) { |
feede_dandrea | 0:39a6762ddcc1 | 177 | rojo=1; |
feede_dandrea | 0:39a6762ddcc1 | 178 | verde=1; |
feede_dandrea | 0:39a6762ddcc1 | 179 | azul=1; |
feede_dandrea | 0:39a6762ddcc1 | 180 | } else if((v<=(float)0.15)) { |
feede_dandrea | 0:39a6762ddcc1 | 181 | rojo=1; |
feede_dandrea | 0:39a6762ddcc1 | 182 | verde=1; |
feede_dandrea | 0:39a6762ddcc1 | 183 | azul=1; |
feede_dandrea | 0:39a6762ddcc1 | 184 | } |
feede_dandrea | 0:39a6762ddcc1 | 185 | } |
feede_dandrea | 0:39a6762ddcc1 | 186 | |
feede_dandrea | 0:39a6762ddcc1 | 187 | } |