luki
Dependencies: mbed tsi_sensor DS1820 DHT11
main.cpp@5:0cb38dfc1026, 2019-12-12 (annotated)
- Committer:
- guidoglorioso
- Date:
- Thu Dec 12 20:01:18 2019 +0000
- Revision:
- 5:0cb38dfc1026
- Parent:
- 3:f483abe4bc57
v
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Sissors | 0:e069f9f26768 | 1 | |
Sissors | 0:e069f9f26768 | 2 | #include "mbed.h" |
guidoglorioso | 5:0cb38dfc1026 | 3 | #include "tsi_sensor.h" |
guidoglorioso | 5:0cb38dfc1026 | 4 | #include <Dht11.h> |
guidoglorioso | 5:0cb38dfc1026 | 5 | /* This defines will be replaced by PinNames soon */ |
guidoglorioso | 5:0cb38dfc1026 | 6 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
guidoglorioso | 5:0cb38dfc1026 | 7 | #define ELEC0 9 |
guidoglorioso | 5:0cb38dfc1026 | 8 | #define ELEC1 10 |
guidoglorioso | 5:0cb38dfc1026 | 9 | #elif defined (TARGET_KL05Z) |
guidoglorioso | 5:0cb38dfc1026 | 10 | #define ELEC0 9 |
guidoglorioso | 5:0cb38dfc1026 | 11 | #define ELEC1 8 |
guidoglorioso | 5:0cb38dfc1026 | 12 | #else |
guidoglorioso | 5:0cb38dfc1026 | 13 | #error TARGET NOT DEFINED |
guidoglorioso | 5:0cb38dfc1026 | 14 | #endif |
guidoglorioso | 5:0cb38dfc1026 | 15 | // ENTRADAS Y SALIDAS |
guidoglorioso | 5:0cb38dfc1026 | 16 | DigitalOut led_rojo(LED_RED); |
guidoglorioso | 5:0cb38dfc1026 | 17 | DigitalOut led_verde(LED_GREEN); |
guidoglorioso | 5:0cb38dfc1026 | 18 | DigitalOut led_azul(LED_BLUE); |
guidoglorioso | 5:0cb38dfc1026 | 19 | AnalogIn preset_abierto(PTB1);//PRESET LAZO ABIERTO |
guidoglorioso | 5:0cb38dfc1026 | 20 | PwmOut velocidad_cooler(PTB0);//COOLER |
guidoglorioso | 5:0cb38dfc1026 | 21 | DigitalIn medidor_rpm(PTB8); //SENSOR EFECTO HALL |
guidoglorioso | 5:0cb38dfc1026 | 22 | Dht11 sensor(PTB2); |
guidoglorioso | 5:0cb38dfc1026 | 23 | //VALORES NECESARIOS |
guidoglorioso | 5:0cb38dfc1026 | 24 | #define VELOCIDAD_MAX 7500 //MAXIMA VELOCIDAD QUE ALCANZA EL COOLER |
guidoglorioso | 5:0cb38dfc1026 | 25 | #define VOLTAJE_MIN 0.06 //VOLTAJE QUE SE NECESITA PARA LOS 200 RPM |
guidoglorioso | 5:0cb38dfc1026 | 26 | #define RPM_MIN 360 |
guidoglorioso | 5:0cb38dfc1026 | 27 | #define TEMP_MAX 40 |
guidoglorioso | 5:0cb38dfc1026 | 28 | #define TEMP_MIN 10 |
guidoglorioso | 5:0cb38dfc1026 | 29 | //TIMERS |
guidoglorioso | 5:0cb38dfc1026 | 30 | Ticker timer1; |
guidoglorioso | 5:0cb38dfc1026 | 31 | Timer t; |
guidoglorioso | 5:0cb38dfc1026 | 32 | |
guidoglorioso | 5:0cb38dfc1026 | 33 | //FUNCIONES |
guidoglorioso | 5:0cb38dfc1026 | 34 | void revoluciones(); |
guidoglorioso | 5:0cb38dfc1026 | 35 | void boton_puls(); |
guidoglorioso | 5:0cb38dfc1026 | 36 | void valor_preset(); |
guidoglorioso | 5:0cb38dfc1026 | 37 | void tiempo(); |
guidoglorioso | 5:0cb38dfc1026 | 38 | void func_temp(); |
guidoglorioso | 5:0cb38dfc1026 | 39 | |
guidoglorioso | 5:0cb38dfc1026 | 40 | //ESTADOS |
guidoglorioso | 5:0cb38dfc1026 | 41 | enum {INICIO,CUENTA,ESPERO_PULS,LAZO_ABIERTO,LAZO_CERRADO,CV1,CV2,CV3,DECRECE_CERRADO,CRECE_CERRADO,APRETAR,SOLTAR,ESPERO,ESPERO2,FIN_PERIODO,CONTEO}; |
guidoglorioso | 5:0cb38dfc1026 | 42 | |
guidoglorioso | 5:0cb38dfc1026 | 43 | //VARIABLES |
guidoglorioso | 5:0cb38dfc1026 | 44 | float preset,vel=0.5; |
guidoglorioso | 5:0cb38dfc1026 | 45 | int rpm=0,pulsos=0,velocidad; |
guidoglorioso | 5:0cb38dfc1026 | 46 | char tiempo1=0,tiempo4=0,tiempo3=10,modo=INICIO,temp,conversion=0; |
guidoglorioso | 5:0cb38dfc1026 | 47 | |
guidoglorioso | 5:0cb38dfc1026 | 48 | //CONFIG TSI |
guidoglorioso | 5:0cb38dfc1026 | 49 | TSIAnalogSlider tsi(ELEC0, ELEC1, 40); |
Sissors | 0:e069f9f26768 | 50 | |
guidoglorioso | 5:0cb38dfc1026 | 51 | int main() |
guidoglorioso | 5:0cb38dfc1026 | 52 | { |
guidoglorioso | 5:0cb38dfc1026 | 53 | timer1.attach(&tiempo,0.1); |
guidoglorioso | 5:0cb38dfc1026 | 54 | medidor_rpm.mode(PullUp);//PULLUP |
guidoglorioso | 5:0cb38dfc1026 | 55 | while(1) { |
guidoglorioso | 5:0cb38dfc1026 | 56 | valor_preset(); //FUNCIONES DEL PROGRAMA |
guidoglorioso | 5:0cb38dfc1026 | 57 | revoluciones(); |
guidoglorioso | 5:0cb38dfc1026 | 58 | boton_puls(); |
guidoglorioso | 5:0cb38dfc1026 | 59 | func_temp(); |
guidoglorioso | 5:0cb38dfc1026 | 60 | /* printf("%i\n",rpm);*/ |
guidoglorioso | 5:0cb38dfc1026 | 61 | switch(modo) { |
guidoglorioso | 5:0cb38dfc1026 | 62 | default: |
guidoglorioso | 5:0cb38dfc1026 | 63 | case INICIO://SE PRENDEN LOS LEDS DE INICIO |
guidoglorioso | 5:0cb38dfc1026 | 64 | led_azul=1; |
guidoglorioso | 5:0cb38dfc1026 | 65 | led_verde=0; |
guidoglorioso | 5:0cb38dfc1026 | 66 | led_rojo=1; |
guidoglorioso | 5:0cb38dfc1026 | 67 | break; |
guidoglorioso | 5:0cb38dfc1026 | 68 | case LAZO_ABIERTO: |
guidoglorioso | 5:0cb38dfc1026 | 69 | if(tiempo4==0) {//TIEMPO PARA SETEAR PWM |
guidoglorioso | 5:0cb38dfc1026 | 70 | velocidad_cooler.write(preset); |
guidoglorioso | 5:0cb38dfc1026 | 71 | tiempo4=1; |
guidoglorioso | 5:0cb38dfc1026 | 72 | } |
guidoglorioso | 5:0cb38dfc1026 | 73 | //APRETANDO EL TSI SE CAMBIA DE MODO A LAZO CERRADO |
guidoglorioso | 5:0cb38dfc1026 | 74 | break; |
guidoglorioso | 5:0cb38dfc1026 | 75 | case LAZO_CERRADO: |
guidoglorioso | 5:0cb38dfc1026 | 76 | if(temp<TEMP_MIN)modo=CV1;//CASO PARA TEMPERATURA MENOR AL MINIMO |
guidoglorioso | 5:0cb38dfc1026 | 77 | if((temp<TEMP_MAX)&&(temp>TEMP_MIN))modo=CV2;//CASO PARA TEMPERATURA ENTRE EL MINIMO Y MAXIMO |
guidoglorioso | 5:0cb38dfc1026 | 78 | if(temp>TEMP_MAX)modo=CV3;//CASO PARA TEMPERATURA AL MAXIMO |
guidoglorioso | 5:0cb38dfc1026 | 79 | //APRETANDO EL TSI SE CAMBIA DE MODO A LAZO ABIERTO |
guidoglorioso | 5:0cb38dfc1026 | 80 | break; |
guidoglorioso | 5:0cb38dfc1026 | 81 | case CV1: |
guidoglorioso | 5:0cb38dfc1026 | 82 | velocidad=RPM_MIN;//SETEO DE RPM MIN |
guidoglorioso | 5:0cb38dfc1026 | 83 | if(rpm<(velocidad+100))modo=CRECE_CERRADO;//EN CASO DE QUE LOS RPM BAJEN AL VALOR SETEADO |
guidoglorioso | 5:0cb38dfc1026 | 84 | if(rpm>(velocidad-100))modo=DECRECE_CERRADO;//EN CASO DE QUE LOS RPM SUBAN AL VALOR SETEADO (SE COLOCA UN RANGO PERMITIDO DE +-100RPM) |
guidoglorioso | 5:0cb38dfc1026 | 85 | break; |
guidoglorioso | 5:0cb38dfc1026 | 86 | case CV2: |
guidoglorioso | 5:0cb38dfc1026 | 87 | velocidad=RPM_MIN+((temp-TEMP_MIN)*((VELOCIDAD_MAX-RPM_MIN)/(TEMP_MAX-TEMP_MIN)));//SETEO DE RPM SEGUN TEMPERATURA |
guidoglorioso | 5:0cb38dfc1026 | 88 | if(rpm<(velocidad+100))modo=CRECE_CERRADO; |
guidoglorioso | 5:0cb38dfc1026 | 89 | if(rpm>(velocidad-100))modo=DECRECE_CERRADO; |
guidoglorioso | 5:0cb38dfc1026 | 90 | break; |
guidoglorioso | 5:0cb38dfc1026 | 91 | case CV3: |
guidoglorioso | 5:0cb38dfc1026 | 92 | velocidad=VELOCIDAD_MAX; |
guidoglorioso | 5:0cb38dfc1026 | 93 | if(rpm<(velocidad+100))modo=CRECE_CERRADO; |
guidoglorioso | 5:0cb38dfc1026 | 94 | if(rpm>(velocidad-100))modo=DECRECE_CERRADO; |
guidoglorioso | 5:0cb38dfc1026 | 95 | break; |
guidoglorioso | 5:0cb38dfc1026 | 96 | case DECRECE_CERRADO: |
guidoglorioso | 5:0cb38dfc1026 | 97 | if(rpm<=(velocidad+100)) {//SE SALE DEL MODO UNA VEZ SE ALCANCE EL VALOR REQUERIDO |
guidoglorioso | 5:0cb38dfc1026 | 98 | modo=LAZO_CERRADO; |
guidoglorioso | 5:0cb38dfc1026 | 99 | break; |
guidoglorioso | 5:0cb38dfc1026 | 100 | } |
guidoglorioso | 5:0cb38dfc1026 | 101 | if(conversion==1) {// PERMITE DISMINUIR LA VELOCIDAD SOLO DESPUES DE HABER MEDIDO LOS RPM |
guidoglorioso | 5:0cb38dfc1026 | 102 | conversion=0; |
guidoglorioso | 5:0cb38dfc1026 | 103 | if(vel>0.01)vel=vel-0.01;//CHEQUEA QUE NO SE ENCUENTRE EN EL MINIMO |
guidoglorioso | 5:0cb38dfc1026 | 104 | else vel=0; |
guidoglorioso | 5:0cb38dfc1026 | 105 | velocidad_cooler.write(vel);//SE SETEA LA VELOCIDAD CORREGIDA |
guidoglorioso | 5:0cb38dfc1026 | 106 | } |
guidoglorioso | 5:0cb38dfc1026 | 107 | break; |
guidoglorioso | 5:0cb38dfc1026 | 108 | case CRECE_CERRADO: |
guidoglorioso | 5:0cb38dfc1026 | 109 | if(rpm>=(velocidad-100)) {//SE SALE DEL MODO UNA VEZ SE ALCANCE EL VALOR REQUERIDO |
guidoglorioso | 5:0cb38dfc1026 | 110 | modo=LAZO_CERRADO; |
guidoglorioso | 5:0cb38dfc1026 | 111 | break; |
guidoglorioso | 5:0cb38dfc1026 | 112 | } |
guidoglorioso | 5:0cb38dfc1026 | 113 | if(conversion==1) {// PERMITE AUMENTAR LA VELOCIDAD SOLO DESPUES DE HABER MEDIDO LOS RPM |
guidoglorioso | 5:0cb38dfc1026 | 114 | conversion=0; |
guidoglorioso | 5:0cb38dfc1026 | 115 | if(vel<0.99)vel=vel+0.01;//CHEQUEA QUE NO SE ENCUENTRE EN EL MAXIMO |
guidoglorioso | 5:0cb38dfc1026 | 116 | else vel=1; |
guidoglorioso | 5:0cb38dfc1026 | 117 | velocidad_cooler.write(vel);//SE SETEA LA VELOCIDAD CORREGIDA |
guidoglorioso | 5:0cb38dfc1026 | 118 | } |
guidoglorioso | 5:0cb38dfc1026 | 119 | |
guidoglorioso | 5:0cb38dfc1026 | 120 | break; |
guidoglorioso | 5:0cb38dfc1026 | 121 | } |
guidoglorioso | 5:0cb38dfc1026 | 122 | } |
guidoglorioso | 5:0cb38dfc1026 | 123 | } |
guidoglorioso | 5:0cb38dfc1026 | 124 | void valor_preset() |
guidoglorioso | 5:0cb38dfc1026 | 125 | { |
guidoglorioso | 5:0cb38dfc1026 | 126 | if(preset_abierto<= VOLTAJE_MIN)preset=VOLTAJE_MIN;//SE FIJA LA VELOCIDAD MINIMA DEL COOLER EN LAZO ABIERTO |
guidoglorioso | 5:0cb38dfc1026 | 127 | else preset=preset_abierto; |
guidoglorioso | 5:0cb38dfc1026 | 128 | } |
guidoglorioso | 5:0cb38dfc1026 | 129 | void boton_puls() |
guidoglorioso | 5:0cb38dfc1026 | 130 | { |
guidoglorioso | 5:0cb38dfc1026 | 131 | static char modo_local1=APRETAR; |
guidoglorioso | 5:0cb38dfc1026 | 132 | switch(modo_local1) { |
guidoglorioso | 5:0cb38dfc1026 | 133 | default: |
guidoglorioso | 5:0cb38dfc1026 | 134 | case APRETAR: |
guidoglorioso | 5:0cb38dfc1026 | 135 | if(tsi.readPercentage()!=0)modo_local1=SOLTAR;//SE APRIETA EL TSI Y SE ESPERA A SOLTARLO |
guidoglorioso | 5:0cb38dfc1026 | 136 | break; |
guidoglorioso | 5:0cb38dfc1026 | 137 | case SOLTAR: |
guidoglorioso | 5:0cb38dfc1026 | 138 | if(tsi.readPercentage()==0) { |
guidoglorioso | 5:0cb38dfc1026 | 139 | modo_local1=APRETAR; |
guidoglorioso | 5:0cb38dfc1026 | 140 | if(modo==LAZO_ABIERTO) {//SE CAMBIA AL MODO CONTRARIO QUE SE ENCUENTRA ACTIVO |
guidoglorioso | 5:0cb38dfc1026 | 141 | led_azul=0; |
guidoglorioso | 5:0cb38dfc1026 | 142 | led_rojo=1; |
guidoglorioso | 5:0cb38dfc1026 | 143 | modo=LAZO_CERRADO; |
guidoglorioso | 5:0cb38dfc1026 | 144 | } else { |
guidoglorioso | 5:0cb38dfc1026 | 145 | modo=LAZO_ABIERTO; |
guidoglorioso | 5:0cb38dfc1026 | 146 | led_azul=1; |
guidoglorioso | 5:0cb38dfc1026 | 147 | led_rojo=0; |
guidoglorioso | 5:0cb38dfc1026 | 148 | } |
guidoglorioso | 5:0cb38dfc1026 | 149 | } |
Sissors | 0:e069f9f26768 | 150 | break; |
Sissors | 0:e069f9f26768 | 151 | } |
Sissors | 0:e069f9f26768 | 152 | } |
guidoglorioso | 5:0cb38dfc1026 | 153 | void revoluciones() |
guidoglorioso | 5:0cb38dfc1026 | 154 | { |
guidoglorioso | 5:0cb38dfc1026 | 155 | static char modo_local=CUENTA; |
guidoglorioso | 5:0cb38dfc1026 | 156 | static int pulsos=0; |
guidoglorioso | 5:0cb38dfc1026 | 157 | switch(modo_local) { |
guidoglorioso | 5:0cb38dfc1026 | 158 | case CUENTA: |
guidoglorioso | 5:0cb38dfc1026 | 159 | rpm=pulsos*60;//SE HACE LA CUENTA PARA SABER LA CANTIDAD RPM |
guidoglorioso | 5:0cb38dfc1026 | 160 | conversion=1;//INDICADOR DE FINALIZACION DE CONVERSION |
guidoglorioso | 5:0cb38dfc1026 | 161 | printf("RPM COOLER= %i,PORCENTAJE DE PRESET= %.2f,VEL ACTUAL= %.2f,VEL SETEADA=%i,TEMP=%i,\n",rpm,preset*100,vel,velocidad,temp); |
guidoglorioso | 5:0cb38dfc1026 | 162 | tiempo3=10;//TIEMPO ENTRE CADA SENSADO |
guidoglorioso | 5:0cb38dfc1026 | 163 | pulsos=0; |
guidoglorioso | 5:0cb38dfc1026 | 164 | modo_local=ESPERO; |
guidoglorioso | 5:0cb38dfc1026 | 165 | break; |
guidoglorioso | 5:0cb38dfc1026 | 166 | case ESPERO: |
guidoglorioso | 5:0cb38dfc1026 | 167 | if(tiempo3==0)modo_local=CUENTA;//CUANDO FINALIZA EL TIEMPO DE SENSADO |
guidoglorioso | 5:0cb38dfc1026 | 168 | else { |
guidoglorioso | 5:0cb38dfc1026 | 169 | if(medidor_rpm==1) { |
guidoglorioso | 5:0cb38dfc1026 | 170 | modo_local=ESPERO_PULS; |
guidoglorioso | 5:0cb38dfc1026 | 171 | pulsos++; |
guidoglorioso | 5:0cb38dfc1026 | 172 | } |
guidoglorioso | 5:0cb38dfc1026 | 173 | } |
guidoglorioso | 5:0cb38dfc1026 | 174 | case ESPERO_PULS: |
guidoglorioso | 5:0cb38dfc1026 | 175 | if(medidor_rpm==0)modo_local=ESPERO; |
guidoglorioso | 5:0cb38dfc1026 | 176 | if(tiempo3==0)modo_local=CUENTA; |
guidoglorioso | 5:0cb38dfc1026 | 177 | break; |
Sissors | 0:e069f9f26768 | 178 | } |
Sissors | 0:e069f9f26768 | 179 | } |
guidoglorioso | 5:0cb38dfc1026 | 180 | void func_temp() |
guidoglorioso | 5:0cb38dfc1026 | 181 | { |
guidoglorioso | 5:0cb38dfc1026 | 182 | if(tiempo1==0) { |
guidoglorioso | 5:0cb38dfc1026 | 183 | sensor.read(); //SE LEE LA TEMPERATURA |
guidoglorioso | 5:0cb38dfc1026 | 184 | temp=sensor.getCelsius();//SE ASIGNA EL VALOR DE TEMPERATURA A UNA VARIABLE |
guidoglorioso | 5:0cb38dfc1026 | 185 | tiempo1=50;//TIEMPO ENTRE CADA LECTURA DE TEMPERATURA 5 SEGUNDOS |
guidoglorioso | 5:0cb38dfc1026 | 186 | tiempo3=10;//REINICIA TIEMPO MEDICION RPM EN CASO DE HABER INTERRUMPIDO |
guidoglorioso | 5:0cb38dfc1026 | 187 | pulsos=0;//REINICIA PULSOS |
guidoglorioso | 5:0cb38dfc1026 | 188 | } |
guidoglorioso | 5:0cb38dfc1026 | 189 | } |
guidoglorioso | 5:0cb38dfc1026 | 190 | void tiempo() |
guidoglorioso | 5:0cb38dfc1026 | 191 | { |
guidoglorioso | 5:0cb38dfc1026 | 192 | if(tiempo1!=0)tiempo1--; |
guidoglorioso | 5:0cb38dfc1026 | 193 | if(tiempo3!=0)tiempo3--; |
guidoglorioso | 5:0cb38dfc1026 | 194 | if(tiempo4!=0)tiempo4--; |
guidoglorioso | 5:0cb38dfc1026 | 195 | } |