Pio IX Jalle Ventiades 6b 2019
Dependencies: mbed tsi_sensor MMA8451Q DHT11
main.cpp@0:804018389320, 2019-06-23 (annotated)
- Committer:
- Jalle
- Date:
- Sun Jun 23 13:42:53 2019 +0000
- Revision:
- 0:804018389320
Pio IX Jalle Ventiades 6b 2019
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jalle | 0:804018389320 | 1 | #include "mbed.h" |
Jalle | 0:804018389320 | 2 | #include "tsi_sensor.h" |
Jalle | 0:804018389320 | 3 | #include "MMA8451Q.h" |
Jalle | 0:804018389320 | 4 | #include "math.h" |
Jalle | 0:804018389320 | 5 | #include "Dht11.h" |
Jalle | 0:804018389320 | 6 | |
Jalle | 0:804018389320 | 7 | |
Jalle | 0:804018389320 | 8 | |
Jalle | 0:804018389320 | 9 | |
Jalle | 0:804018389320 | 10 | DigitalIn enta(PTD5,PullUp); |
Jalle | 0:804018389320 | 11 | Dht11 sensor(PTD7); |
Jalle | 0:804018389320 | 12 | AnalogIn ain(A0); |
Jalle | 0:804018389320 | 13 | AnalogIn cooler(PTB3); |
Jalle | 0:804018389320 | 14 | |
Jalle | 0:804018389320 | 15 | unsigned int e=0,cuenta=2,hay=0,estado=0,paso=0,caso=0,tiempo=9,d=0,c=0,acta=0,tempp=0,entad=0,cuentar=0,rpm=0,f=0,maestro=0,mostramos=0,mostrar=0; |
Jalle | 0:804018389320 | 16 | |
Jalle | 0:804018389320 | 17 | double t; |
Jalle | 0:804018389320 | 18 | double m; |
Jalle | 0:804018389320 | 19 | |
Jalle | 0:804018389320 | 20 | Ticker rapido; |
Jalle | 0:804018389320 | 21 | Ticker lento; |
Jalle | 0:804018389320 | 22 | void funcion(); |
Jalle | 0:804018389320 | 23 | void tiemporpm(); |
Jalle | 0:804018389320 | 24 | PwmOut fan(A1); |
Jalle | 0:804018389320 | 25 | |
Jalle | 0:804018389320 | 26 | |
Jalle | 0:804018389320 | 27 | |
Jalle | 0:804018389320 | 28 | |
Jalle | 0:804018389320 | 29 | int main(void) |
Jalle | 0:804018389320 | 30 | { |
Jalle | 0:804018389320 | 31 | |
Jalle | 0:804018389320 | 32 | rapido.attach(&funcion, 0.01); //Ticker para el antirebote |
Jalle | 0:804018389320 | 33 | lento.attach(&tiemporpm, 2); //Ticker para el calculo de las rpm y otras cosas |
Jalle | 0:804018389320 | 34 | |
Jalle | 0:804018389320 | 35 | |
Jalle | 0:804018389320 | 36 | |
Jalle | 0:804018389320 | 37 | |
Jalle | 0:804018389320 | 38 | while (true) { |
Jalle | 0:804018389320 | 39 | |
Jalle | 0:804018389320 | 40 | if(mostrar) { //Cada 2 segundos se activa esto |
Jalle | 0:804018389320 | 41 | printf("RPM = %d \r\n",rpm); //Mostramos las rpm |
Jalle | 0:804018389320 | 42 | printf("temperatura: %d \r\n",f); //Mostramos la temperatura actual |
Jalle | 0:804018389320 | 43 | mostrar = 0; //Volvemos 0 la variable para no entrar hasta los siguientes 2 segundos |
Jalle | 0:804018389320 | 44 | t=ain; //Guardamos el valor del potenciometro |
Jalle | 0:804018389320 | 45 | printf("%f",t); //Mostramos el potenciometro |
Jalle | 0:804018389320 | 46 | } |
Jalle | 0:804018389320 | 47 | |
Jalle | 0:804018389320 | 48 | |
Jalle | 0:804018389320 | 49 | |
Jalle | 0:804018389320 | 50 | |
Jalle | 0:804018389320 | 51 | |
Jalle | 0:804018389320 | 52 | switch (caso) { //Maquina de estados de control general |
Jalle | 0:804018389320 | 53 | default: |
Jalle | 0:804018389320 | 54 | case 0: |
Jalle | 0:804018389320 | 55 | if(entad==1) { //Si el modo seleccionado es el lazo cerrado, entramos aca |
Jalle | 0:804018389320 | 56 | fan=(0.00155*((f - 20)/50.0)) + 0.00053; //Definimos el pwm segun la temperatura |
Jalle | 0:804018389320 | 57 | if(rpm==0) //Si el cooler esta frenado, vamos al estado 1 |
Jalle | 0:804018389320 | 58 | caso=1; |
Jalle | 0:804018389320 | 59 | |
Jalle | 0:804018389320 | 60 | |
Jalle | 0:804018389320 | 61 | |
Jalle | 0:804018389320 | 62 | |
Jalle | 0:804018389320 | 63 | |
Jalle | 0:804018389320 | 64 | |
Jalle | 0:804018389320 | 65 | } else { |
Jalle | 0:804018389320 | 66 | |
Jalle | 0:804018389320 | 67 | fan=(0.00155*t)+0.00053; //Si estamos en el modo de lazo abierto, definimos el pwm segun el potenciometro |
Jalle | 0:804018389320 | 68 | if(rpm==0) //Si el cooler se frena, vamos al estado 1 |
Jalle | 0:804018389320 | 69 | caso=1; |
Jalle | 0:804018389320 | 70 | |
Jalle | 0:804018389320 | 71 | |
Jalle | 0:804018389320 | 72 | |
Jalle | 0:804018389320 | 73 | } |
Jalle | 0:804018389320 | 74 | break; |
Jalle | 0:804018389320 | 75 | |
Jalle | 0:804018389320 | 76 | |
Jalle | 0:804018389320 | 77 | |
Jalle | 0:804018389320 | 78 | case 1: |
Jalle | 0:804018389320 | 79 | fan=0.002; //Definimos una velocidad alta para asegurarnos de que el cooler gire |
Jalle | 0:804018389320 | 80 | |
Jalle | 0:804018389320 | 81 | if(e==1) { |
Jalle | 0:804018389320 | 82 | |
Jalle | 0:804018389320 | 83 | caso=0; //Luego de 2 segundos volvemos al estado 0 |
Jalle | 0:804018389320 | 84 | e=0; |
Jalle | 0:804018389320 | 85 | |
Jalle | 0:804018389320 | 86 | } |
Jalle | 0:804018389320 | 87 | break; |
Jalle | 0:804018389320 | 88 | } |
Jalle | 0:804018389320 | 89 | |
Jalle | 0:804018389320 | 90 | m=cooler; |
Jalle | 0:804018389320 | 91 | switch (estado) { //Maquina para detectar los pulsos del sensor hall |
Jalle | 0:804018389320 | 92 | |
Jalle | 0:804018389320 | 93 | case 0: |
Jalle | 0:804018389320 | 94 | if(m>0.9) { //Si se vuelve 1, aumentamos la variable cuentar y vamos al estado 1 |
Jalle | 0:804018389320 | 95 | cuentar++; |
Jalle | 0:804018389320 | 96 | estado=1; |
Jalle | 0:804018389320 | 97 | |
Jalle | 0:804018389320 | 98 | } |
Jalle | 0:804018389320 | 99 | break; |
Jalle | 0:804018389320 | 100 | case 1: |
Jalle | 0:804018389320 | 101 | if(m<0.1) //En el momento que se vuelve 0 volvemos al estado 0 |
Jalle | 0:804018389320 | 102 | estado=0; |
Jalle | 0:804018389320 | 103 | break; |
Jalle | 0:804018389320 | 104 | |
Jalle | 0:804018389320 | 105 | |
Jalle | 0:804018389320 | 106 | } |
Jalle | 0:804018389320 | 107 | switch (tempp) { //Maquina de estados para el antirebote y la seleccion de modo |
Jalle | 0:804018389320 | 108 | case 0: |
Jalle | 0:804018389320 | 109 | if(enta==0) { //Cuando se detecta que se presiona el pulsador avanzamos al siguiente estado y empezamos a contar desde 0 |
Jalle | 0:804018389320 | 110 | |
Jalle | 0:804018389320 | 111 | tempp=1; |
Jalle | 0:804018389320 | 112 | cuenta=0; |
Jalle | 0:804018389320 | 113 | } |
Jalle | 0:804018389320 | 114 | break; |
Jalle | 0:804018389320 | 115 | case 1: |
Jalle | 0:804018389320 | 116 | if(cuenta>=2) { //Unva vez que pasaron los 20ms de seguridad podemos considerar que el pulsador se presiono |
Jalle | 0:804018389320 | 117 | tempp=2; |
Jalle | 0:804018389320 | 118 | if(entad==0) //Ahora que verificamos que el boton se presiona solo 1 vez, cambiamos el modo actual |
Jalle | 0:804018389320 | 119 | entad=1; |
Jalle | 0:804018389320 | 120 | else |
Jalle | 0:804018389320 | 121 | entad=0; |
Jalle | 0:804018389320 | 122 | |
Jalle | 0:804018389320 | 123 | |
Jalle | 0:804018389320 | 124 | } |
Jalle | 0:804018389320 | 125 | break; |
Jalle | 0:804018389320 | 126 | case 2: |
Jalle | 0:804018389320 | 127 | if(enta==1) { //Ahora repetimos el proceso al soltar el pulsador |
Jalle | 0:804018389320 | 128 | tempp=3; |
Jalle | 0:804018389320 | 129 | cuenta=0; |
Jalle | 0:804018389320 | 130 | } |
Jalle | 0:804018389320 | 131 | break; |
Jalle | 0:804018389320 | 132 | case 3: |
Jalle | 0:804018389320 | 133 | if(cuenta>=2) { |
Jalle | 0:804018389320 | 134 | tempp=0; |
Jalle | 0:804018389320 | 135 | |
Jalle | 0:804018389320 | 136 | |
Jalle | 0:804018389320 | 137 | } |
Jalle | 0:804018389320 | 138 | break; |
Jalle | 0:804018389320 | 139 | } |
Jalle | 0:804018389320 | 140 | |
Jalle | 0:804018389320 | 141 | |
Jalle | 0:804018389320 | 142 | } |
Jalle | 0:804018389320 | 143 | |
Jalle | 0:804018389320 | 144 | |
Jalle | 0:804018389320 | 145 | |
Jalle | 0:804018389320 | 146 | |
Jalle | 0:804018389320 | 147 | } |
Jalle | 0:804018389320 | 148 | |
Jalle | 0:804018389320 | 149 | |
Jalle | 0:804018389320 | 150 | |
Jalle | 0:804018389320 | 151 | |
Jalle | 0:804018389320 | 152 | void funcion() |
Jalle | 0:804018389320 | 153 | { |
Jalle | 0:804018389320 | 154 | |
Jalle | 0:804018389320 | 155 | cuenta++; //Cada 10ms se aumenta esta variable para el antirebote |
Jalle | 0:804018389320 | 156 | |
Jalle | 0:804018389320 | 157 | |
Jalle | 0:804018389320 | 158 | } |
Jalle | 0:804018389320 | 159 | void tiemporpm() |
Jalle | 0:804018389320 | 160 | { |
Jalle | 0:804018389320 | 161 | |
Jalle | 0:804018389320 | 162 | e=1; |
Jalle | 0:804018389320 | 163 | sensor.read(); |
Jalle | 0:804018389320 | 164 | f=sensor.getCelsius(); //Leemos el sensor |
Jalle | 0:804018389320 | 165 | rpm=cuentar*30; //Multiplicamos la cantidad de vueltas que medimos en 2segundos por 20, asi obtenemos la cantidad para 1 minuto |
Jalle | 0:804018389320 | 166 | cuentar=0; //Luego volvemos esta variable a 0 para poder contar las revoluciones otra vez |
Jalle | 0:804018389320 | 167 | mostrar=1; |
Jalle | 0:804018389320 | 168 | } |
Jalle | 0:804018389320 | 169 |