PIO IX 6° A TP1_ejercicio1 ALMADA, Santiago MAVER, Francisco
Dependencies: mbed tsi_sensor DS1820
main.cpp@6:3ebdc74fd68f, 2019-05-30 (annotated)
- Committer:
- Franmaver
- Date:
- Thu May 30 22:43:23 2019 +0000
- Revision:
- 6:3ebdc74fd68f
- Parent:
- 5:ea823404aea8
TP1_ejer1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Sissors | 0:e069f9f26768 | 1 | #include "mbed.h" |
Sissors | 0:e069f9f26768 | 2 | #include "DS1820.h" |
Franmaver | 5:ea823404aea8 | 3 | #include "tsi_sensor.h" |
Sissors | 0:e069f9f26768 | 4 | |
Franmaver | 6:3ebdc74fd68f | 5 | //defino entradas |
Franmaver | 6:3ebdc74fd68f | 6 | DS1820 probe(PTD4); |
Franmaver | 6:3ebdc74fd68f | 7 | AnalogIn preset(PTC1); |
Franmaver | 6:3ebdc74fd68f | 8 | DigitalIn sensor_cooler(PTA12); |
Sissors | 0:e069f9f26768 | 9 | |
Franmaver | 5:ea823404aea8 | 10 | /* This defines will be replaced by PinNames soon */ |
Franmaver | 5:ea823404aea8 | 11 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
Franmaver | 5:ea823404aea8 | 12 | #define ELEC0 9 |
Franmaver | 5:ea823404aea8 | 13 | #define ELEC1 10 |
Franmaver | 5:ea823404aea8 | 14 | #elif defined (TARGET_KL05Z) |
Franmaver | 5:ea823404aea8 | 15 | #define ELEC0 9 |
Franmaver | 5:ea823404aea8 | 16 | #define ELEC1 8 |
Sissors | 0:e069f9f26768 | 17 | #else |
Franmaver | 5:ea823404aea8 | 18 | #error TARGET NOT DEFINED |
Franmaver | 5:ea823404aea8 | 19 | #endif |
Franmaver | 5:ea823404aea8 | 20 | |
Franmaver | 6:3ebdc74fd68f | 21 | //general |
Franmaver | 6:3ebdc74fd68f | 22 | enum maquina_de_estados_general {inicio1, lazo_abierto, lazo_cerrado}; |
Franmaver | 6:3ebdc74fd68f | 23 | maquina_de_estados_general maquina_general; |
Franmaver | 6:3ebdc74fd68f | 24 | void funcion_general(); |
Franmaver | 6:3ebdc74fd68f | 25 | int pulsador = 0; |
Franmaver | 6:3ebdc74fd68f | 26 | |
Franmaver | 6:3ebdc74fd68f | 27 | //lazo_cerrado |
Franmaver | 6:3ebdc74fd68f | 28 | enum maquina_de_estados_lazo_cerrado {inicio2, detecto_valor_temp, cooler_200rpm, cooler_vel_max, cooler_vel_aumenta_lineal}; |
Franmaver | 6:3ebdc74fd68f | 29 | maquina_de_estados_lazo_cerrado maquina_lazo_cerrado; |
Franmaver | 6:3ebdc74fd68f | 30 | void funcion_lazo_cerrado(); |
Franmaver | 6:3ebdc74fd68f | 31 | float detecto_temp(); |
Franmaver | 6:3ebdc74fd68f | 32 | int cambio_a_lazo_cerrado = 0; |
Franmaver | 6:3ebdc74fd68f | 33 | float temperatura = 0.0; |
Franmaver | 6:3ebdc74fd68f | 34 | float rpm = 0; |
Franmaver | 6:3ebdc74fd68f | 35 | float duty = 0; |
Franmaver | 6:3ebdc74fd68f | 36 | float valor = 0.0; |
Franmaver | 6:3ebdc74fd68f | 37 | |
Franmaver | 6:3ebdc74fd68f | 38 | //lazo abierto |
Franmaver | 6:3ebdc74fd68f | 39 | enum maquina_de_estados_lazo_abierto {inicio3, detecto_valor_pote, vario_vel_cooler}; |
Franmaver | 6:3ebdc74fd68f | 40 | maquina_de_estados_lazo_abierto maquina_lazo_abierto; |
Franmaver | 6:3ebdc74fd68f | 41 | void funcion_lazo_abierto(); |
Franmaver | 6:3ebdc74fd68f | 42 | int cambio_a_lazo_abierto = 0; |
Franmaver | 6:3ebdc74fd68f | 43 | |
Franmaver | 6:3ebdc74fd68f | 44 | //ticker |
Franmaver | 6:3ebdc74fd68f | 45 | Ticker tiempo; |
Franmaver | 6:3ebdc74fd68f | 46 | int contador = 0; |
Franmaver | 6:3ebdc74fd68f | 47 | int a = 0; |
Franmaver | 6:3ebdc74fd68f | 48 | |
Franmaver | 6:3ebdc74fd68f | 49 | |
Franmaver | 6:3ebdc74fd68f | 50 | PwmOut salida1(PTB3);//defino el cooler como salida |
Franmaver | 6:3ebdc74fd68f | 51 | TSIAnalogSlider tsi(ELEC0, ELEC1, 40);//defino TSI |
Franmaver | 5:ea823404aea8 | 52 | |
Franmaver | 6:3ebdc74fd68f | 53 | //defino variables para poder medir las RPM |
Franmaver | 6:3ebdc74fd68f | 54 | int cuento_rpm() ; |
Franmaver | 6:3ebdc74fd68f | 55 | int rpm_tot = 0; |
Franmaver | 6:3ebdc74fd68f | 56 | int rpmm = 0; |
Franmaver | 6:3ebdc74fd68f | 57 | int contador2 = 0; |
Franmaver | 6:3ebdc74fd68f | 58 | |
Franmaver | 6:3ebdc74fd68f | 59 | //funcion para saber las RPM |
Franmaver | 6:3ebdc74fd68f | 60 | void funcion_tiempo() |
Franmaver | 6:3ebdc74fd68f | 61 | { |
Franmaver | 6:3ebdc74fd68f | 62 | contador2++; |
Franmaver | 6:3ebdc74fd68f | 63 | rpmm = rpm_tot*60;//rpm_tot en 1 segundo, multiplico por 60 para que sea un minuto (RPM) |
Franmaver | 6:3ebdc74fd68f | 64 | rpm_tot = 0; |
Franmaver | 6:3ebdc74fd68f | 65 | } |
Franmaver | 6:3ebdc74fd68f | 66 | int main() |
Franmaver | 6:3ebdc74fd68f | 67 | { |
Franmaver | 6:3ebdc74fd68f | 68 | salida1 = 1.0;//comienza el programa con el cooler encendido |
Franmaver | 6:3ebdc74fd68f | 69 | wait(2);//un wait fuera del while, que no afecta el programa |
Franmaver | 6:3ebdc74fd68f | 70 | tiempo.attach(&funcion_tiempo, 1); |
Franmaver | 6:3ebdc74fd68f | 71 | |
Sissors | 0:e069f9f26768 | 72 | while(1) { |
Franmaver | 6:3ebdc74fd68f | 73 | //reconozco los flancos del sensor de RPM |
Franmaver | 6:3ebdc74fd68f | 74 | if((sensor_cooler == 1) && (a == 0)) { |
Franmaver | 6:3ebdc74fd68f | 75 | rpm_tot++; |
Franmaver | 6:3ebdc74fd68f | 76 | a = 1; |
Franmaver | 6:3ebdc74fd68f | 77 | } |
Franmaver | 6:3ebdc74fd68f | 78 | else if((sensor_cooler == 0) && (a == 1)) |
Franmaver | 6:3ebdc74fd68f | 79 | a = 0; |
Franmaver | 6:3ebdc74fd68f | 80 | |
Franmaver | 6:3ebdc74fd68f | 81 | funcion_general(); |
Franmaver | 6:3ebdc74fd68f | 82 | funcion_lazo_cerrado(); |
Franmaver | 6:3ebdc74fd68f | 83 | funcion_lazo_abierto(); |
Sissors | 0:e069f9f26768 | 84 | } |
Sissors | 0:e069f9f26768 | 85 | } |
Franmaver | 6:3ebdc74fd68f | 86 | //funcion que devuelve la temperatura |
Franmaver | 6:3ebdc74fd68f | 87 | float detecto_temp() |
Franmaver | 6:3ebdc74fd68f | 88 | { |
Franmaver | 6:3ebdc74fd68f | 89 | if(contador2 == 1) |
Franmaver | 6:3ebdc74fd68f | 90 | probe.convertTemperature(true, DS1820::all_devices); //Start temperature conversion, wait until ready |
Franmaver | 6:3ebdc74fd68f | 91 | printf(" temperatura: %3.1f", probe.temperature()); |
Franmaver | 6:3ebdc74fd68f | 92 | contador2 = 0; |
Franmaver | 6:3ebdc74fd68f | 93 | return probe.temperature(); |
Franmaver | 6:3ebdc74fd68f | 94 | } |
Sissors | 0:e069f9f26768 | 95 | |
Franmaver | 6:3ebdc74fd68f | 96 | //funcion de la máquina de estados general |
Franmaver | 6:3ebdc74fd68f | 97 | void funcion_general() |
Franmaver | 6:3ebdc74fd68f | 98 | { |
Franmaver | 6:3ebdc74fd68f | 99 | switch(maquina_general) { |
Franmaver | 6:3ebdc74fd68f | 100 | |
Franmaver | 6:3ebdc74fd68f | 101 | default: |
Franmaver | 6:3ebdc74fd68f | 102 | maquina_general = inicio1; |
Franmaver | 6:3ebdc74fd68f | 103 | break; |
Franmaver | 6:3ebdc74fd68f | 104 | |
Franmaver | 6:3ebdc74fd68f | 105 | case inicio1: |
Franmaver | 6:3ebdc74fd68f | 106 | //apreto TSI para dar inicio al sistema |
Franmaver | 6:3ebdc74fd68f | 107 | if(tsi.readPercentage() != 0) { |
Franmaver | 6:3ebdc74fd68f | 108 | cambio_a_lazo_cerrado = 1; |
Franmaver | 6:3ebdc74fd68f | 109 | maquina_general = lazo_cerrado; |
Franmaver | 6:3ebdc74fd68f | 110 | } |
Franmaver | 6:3ebdc74fd68f | 111 | break; |
Franmaver | 6:3ebdc74fd68f | 112 | |
Franmaver | 6:3ebdc74fd68f | 113 | case lazo_cerrado: |
Franmaver | 6:3ebdc74fd68f | 114 | //entrta al if cuando estoy en el modo lazo cerrado |
Franmaver | 6:3ebdc74fd68f | 115 | //y se presiona el TSI |
Franmaver | 6:3ebdc74fd68f | 116 | if(cambio_a_lazo_cerrado == 0) { |
Franmaver | 6:3ebdc74fd68f | 117 | cambio_a_lazo_abierto = 1; |
Franmaver | 6:3ebdc74fd68f | 118 | maquina_general = lazo_abierto; |
Franmaver | 6:3ebdc74fd68f | 119 | } |
Franmaver | 6:3ebdc74fd68f | 120 | |
Franmaver | 6:3ebdc74fd68f | 121 | ///////PARA CAMBIAR DE MODO////// |
Franmaver | 6:3ebdc74fd68f | 122 | if(tsi.readPercentage() >= 0.5) { |
Franmaver | 6:3ebdc74fd68f | 123 | cambio_a_lazo_cerrado = 0; |
Franmaver | 6:3ebdc74fd68f | 124 | maquina_lazo_cerrado = inicio2; |
Franmaver | 6:3ebdc74fd68f | 125 | } |
Franmaver | 6:3ebdc74fd68f | 126 | ///////////////////////////////// |
Franmaver | 6:3ebdc74fd68f | 127 | break; |
Franmaver | 6:3ebdc74fd68f | 128 | |
Franmaver | 6:3ebdc74fd68f | 129 | case lazo_abierto: |
Franmaver | 6:3ebdc74fd68f | 130 | //entrta al if cuando estoy en el modo lazo abierto |
Franmaver | 6:3ebdc74fd68f | 131 | //y se presiona el TSI |
Franmaver | 6:3ebdc74fd68f | 132 | if(cambio_a_lazo_abierto == 0) { |
Franmaver | 6:3ebdc74fd68f | 133 | cambio_a_lazo_cerrado = 1; |
Franmaver | 6:3ebdc74fd68f | 134 | maquina_general = lazo_cerrado; |
Franmaver | 6:3ebdc74fd68f | 135 | } |
Franmaver | 6:3ebdc74fd68f | 136 | |
Franmaver | 6:3ebdc74fd68f | 137 | ///////PARA CAMBIAR DE MODO////// |
Franmaver | 6:3ebdc74fd68f | 138 | if((tsi.readPercentage() <= 0.4) && (tsi.readPercentage() != 0)) { |
Franmaver | 6:3ebdc74fd68f | 139 | cambio_a_lazo_abierto = 0; |
Franmaver | 6:3ebdc74fd68f | 140 | maquina_lazo_abierto = inicio3; |
Franmaver | 6:3ebdc74fd68f | 141 | } |
Franmaver | 6:3ebdc74fd68f | 142 | ///////////////////////////////// |
Franmaver | 6:3ebdc74fd68f | 143 | break; |
Franmaver | 6:3ebdc74fd68f | 144 | } |
Franmaver | 6:3ebdc74fd68f | 145 | } |
Franmaver | 6:3ebdc74fd68f | 146 | //funcion del modo lazo cerrado |
Franmaver | 6:3ebdc74fd68f | 147 | void funcion_lazo_cerrado() |
Franmaver | 6:3ebdc74fd68f | 148 | { |
Franmaver | 6:3ebdc74fd68f | 149 | switch (maquina_lazo_cerrado) { |
Franmaver | 6:3ebdc74fd68f | 150 | |
Franmaver | 6:3ebdc74fd68f | 151 | default: |
Franmaver | 6:3ebdc74fd68f | 152 | maquina_lazo_cerrado = inicio2; |
Franmaver | 6:3ebdc74fd68f | 153 | break; |
Franmaver | 6:3ebdc74fd68f | 154 | |
Franmaver | 6:3ebdc74fd68f | 155 | case inicio2: |
Franmaver | 6:3ebdc74fd68f | 156 | if (cambio_a_lazo_cerrado == 1) { |
Franmaver | 6:3ebdc74fd68f | 157 | printf("\n\rLAZO CERRADO\r\n"); |
Franmaver | 6:3ebdc74fd68f | 158 | maquina_lazo_cerrado = detecto_valor_temp; |
Franmaver | 6:3ebdc74fd68f | 159 | } |
Franmaver | 6:3ebdc74fd68f | 160 | break; |
Franmaver | 6:3ebdc74fd68f | 161 | |
Franmaver | 6:3ebdc74fd68f | 162 | case detecto_valor_temp: |
Franmaver | 6:3ebdc74fd68f | 163 | temperatura = detecto_temp(); |
Franmaver | 6:3ebdc74fd68f | 164 | if(temperatura <= 20) { //cooler 200rpm |
Franmaver | 6:3ebdc74fd68f | 165 | maquina_lazo_cerrado = cooler_200rpm; |
Franmaver | 6:3ebdc74fd68f | 166 | } |
Franmaver | 6:3ebdc74fd68f | 167 | if(temperatura >= 70) { //cooler maximo |
Franmaver | 6:3ebdc74fd68f | 168 | maquina_lazo_cerrado = cooler_vel_max; |
Franmaver | 6:3ebdc74fd68f | 169 | } |
Franmaver | 6:3ebdc74fd68f | 170 | if((temperatura > 20) && (temperatura < 70))//cooler varia |
Franmaver | 6:3ebdc74fd68f | 171 | maquina_lazo_cerrado = cooler_vel_aumenta_lineal; |
Franmaver | 6:3ebdc74fd68f | 172 | break; |
Franmaver | 6:3ebdc74fd68f | 173 | |
Franmaver | 6:3ebdc74fd68f | 174 | case cooler_200rpm: |
Franmaver | 6:3ebdc74fd68f | 175 | //el cooler a 200RPM |
Franmaver | 6:3ebdc74fd68f | 176 | salida1.write(0.0222); |
Franmaver | 6:3ebdc74fd68f | 177 | |
Franmaver | 6:3ebdc74fd68f | 178 | printf(" RPM = %d",rpmm); |
Franmaver | 6:3ebdc74fd68f | 179 | |
Franmaver | 6:3ebdc74fd68f | 180 | maquina_lazo_cerrado = detecto_valor_temp; |
Franmaver | 6:3ebdc74fd68f | 181 | break; |
Franmaver | 6:3ebdc74fd68f | 182 | |
Franmaver | 6:3ebdc74fd68f | 183 | case cooler_vel_max: |
Franmaver | 6:3ebdc74fd68f | 184 | //cooler a maxima RPM |
Franmaver | 6:3ebdc74fd68f | 185 | salida1 = 1.0; |
Franmaver | 6:3ebdc74fd68f | 186 | |
Franmaver | 6:3ebdc74fd68f | 187 | printf("RPM = %d",rpmm); |
Franmaver | 6:3ebdc74fd68f | 188 | |
Franmaver | 6:3ebdc74fd68f | 189 | maquina_lazo_cerrado = detecto_valor_temp; |
Franmaver | 6:3ebdc74fd68f | 190 | |
Franmaver | 6:3ebdc74fd68f | 191 | break; |
Franmaver | 6:3ebdc74fd68f | 192 | |
Franmaver | 6:3ebdc74fd68f | 193 | case cooler_vel_aumenta_lineal: |
Franmaver | 6:3ebdc74fd68f | 194 | //cooler aumenta segun la temperatura |
Franmaver | 6:3ebdc74fd68f | 195 | rpm = ((temperatura * 200) / 20); |
Franmaver | 6:3ebdc74fd68f | 196 | |
Franmaver | 6:3ebdc74fd68f | 197 | duty = ((rpm * 100) / 9000); |
Franmaver | 6:3ebdc74fd68f | 198 | |
Franmaver | 6:3ebdc74fd68f | 199 | valor = (duty / 10); |
Franmaver | 6:3ebdc74fd68f | 200 | |
Franmaver | 6:3ebdc74fd68f | 201 | salida1.write(valor); |
Franmaver | 6:3ebdc74fd68f | 202 | |
Franmaver | 6:3ebdc74fd68f | 203 | printf(" RPM: %f ",rpm); |
Franmaver | 6:3ebdc74fd68f | 204 | |
Franmaver | 6:3ebdc74fd68f | 205 | maquina_lazo_cerrado = detecto_valor_temp; |
Franmaver | 6:3ebdc74fd68f | 206 | break; |
Franmaver | 6:3ebdc74fd68f | 207 | } |
Franmaver | 6:3ebdc74fd68f | 208 | } |
Franmaver | 6:3ebdc74fd68f | 209 | //modo lazo abierto |
Franmaver | 6:3ebdc74fd68f | 210 | void funcion_lazo_abierto() |
Franmaver | 6:3ebdc74fd68f | 211 | { |
Franmaver | 6:3ebdc74fd68f | 212 | switch(maquina_lazo_abierto) { |
Franmaver | 6:3ebdc74fd68f | 213 | |
Franmaver | 6:3ebdc74fd68f | 214 | default: |
Franmaver | 6:3ebdc74fd68f | 215 | maquina_lazo_abierto = inicio3; |
Franmaver | 6:3ebdc74fd68f | 216 | break; |
Franmaver | 6:3ebdc74fd68f | 217 | |
Franmaver | 6:3ebdc74fd68f | 218 | case inicio3: |
Franmaver | 6:3ebdc74fd68f | 219 | if(cambio_a_lazo_abierto == 1) { |
Franmaver | 6:3ebdc74fd68f | 220 | printf("LAZO_ABIERTO\n"); |
Franmaver | 6:3ebdc74fd68f | 221 | maquina_lazo_abierto = detecto_valor_pote; |
Franmaver | 6:3ebdc74fd68f | 222 | |
Franmaver | 6:3ebdc74fd68f | 223 | } |
Franmaver | 6:3ebdc74fd68f | 224 | break; |
Franmaver | 6:3ebdc74fd68f | 225 | |
Franmaver | 6:3ebdc74fd68f | 226 | case detecto_valor_pote: |
Franmaver | 6:3ebdc74fd68f | 227 | //si el pote esta por debajo de 0,2 (pasado con el ADC |
Franmaver | 6:3ebdc74fd68f | 228 | //cooler con 200 RPM |
Franmaver | 6:3ebdc74fd68f | 229 | if(preset <= 0.0222) { |
Franmaver | 6:3ebdc74fd68f | 230 | salida1.write(0.222); |
Franmaver | 6:3ebdc74fd68f | 231 | printf(" RPM: %d",rpmm); |
Franmaver | 6:3ebdc74fd68f | 232 | } else { |
Franmaver | 6:3ebdc74fd68f | 233 | maquina_lazo_abierto = vario_vel_cooler; |
Franmaver | 6:3ebdc74fd68f | 234 | } |
Franmaver | 6:3ebdc74fd68f | 235 | break; |
Franmaver | 6:3ebdc74fd68f | 236 | |
Franmaver | 6:3ebdc74fd68f | 237 | case vario_vel_cooler: |
Franmaver | 6:3ebdc74fd68f | 238 | |
Franmaver | 6:3ebdc74fd68f | 239 | salida1.write(preset);//vario cooler segun preset |
Franmaver | 6:3ebdc74fd68f | 240 | |
Franmaver | 6:3ebdc74fd68f | 241 | printf(" RPM: %d",rpmm); |
Franmaver | 6:3ebdc74fd68f | 242 | |
Franmaver | 6:3ebdc74fd68f | 243 | maquina_lazo_abierto = detecto_valor_pote; |
Franmaver | 6:3ebdc74fd68f | 244 | |
Franmaver | 6:3ebdc74fd68f | 245 | break; |
Franmaver | 6:3ebdc74fd68f | 246 | } |
Franmaver | 6:3ebdc74fd68f | 247 | } |