Pio IX Jalle Ventiades 6b 2019
Dependencies: mbed tsi_sensor MMA8451Q DHT11
Diff: main.cpp
- Revision:
- 0:804018389320
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jun 23 13:42:53 2019 +0000 @@ -0,0 +1,169 @@ +#include "mbed.h" +#include "tsi_sensor.h" +#include "MMA8451Q.h" +#include "math.h" +#include "Dht11.h" + + + + +DigitalIn enta(PTD5,PullUp); +Dht11 sensor(PTD7); +AnalogIn ain(A0); +AnalogIn cooler(PTB3); + +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; + +double t; +double m; + +Ticker rapido; +Ticker lento; +void funcion(); +void tiemporpm(); +PwmOut fan(A1); + + + + +int main(void) +{ + + rapido.attach(&funcion, 0.01); //Ticker para el antirebote + lento.attach(&tiemporpm, 2); //Ticker para el calculo de las rpm y otras cosas + + + + + while (true) { + + if(mostrar) { //Cada 2 segundos se activa esto + printf("RPM = %d \r\n",rpm); //Mostramos las rpm + printf("temperatura: %d \r\n",f); //Mostramos la temperatura actual + mostrar = 0; //Volvemos 0 la variable para no entrar hasta los siguientes 2 segundos + t=ain; //Guardamos el valor del potenciometro + printf("%f",t); //Mostramos el potenciometro + } + + + + + + switch (caso) { //Maquina de estados de control general + default: + case 0: + if(entad==1) { //Si el modo seleccionado es el lazo cerrado, entramos aca + fan=(0.00155*((f - 20)/50.0)) + 0.00053; //Definimos el pwm segun la temperatura + if(rpm==0) //Si el cooler esta frenado, vamos al estado 1 + caso=1; + + + + + + + } else { + + fan=(0.00155*t)+0.00053; //Si estamos en el modo de lazo abierto, definimos el pwm segun el potenciometro + if(rpm==0) //Si el cooler se frena, vamos al estado 1 + caso=1; + + + + } + break; + + + + case 1: + fan=0.002; //Definimos una velocidad alta para asegurarnos de que el cooler gire + + if(e==1) { + + caso=0; //Luego de 2 segundos volvemos al estado 0 + e=0; + + } + break; + } + + m=cooler; + switch (estado) { //Maquina para detectar los pulsos del sensor hall + + case 0: + if(m>0.9) { //Si se vuelve 1, aumentamos la variable cuentar y vamos al estado 1 + cuentar++; + estado=1; + + } + break; + case 1: + if(m<0.1) //En el momento que se vuelve 0 volvemos al estado 0 + estado=0; + break; + + + } + switch (tempp) { //Maquina de estados para el antirebote y la seleccion de modo + case 0: + if(enta==0) { //Cuando se detecta que se presiona el pulsador avanzamos al siguiente estado y empezamos a contar desde 0 + + tempp=1; + cuenta=0; + } + break; + case 1: + if(cuenta>=2) { //Unva vez que pasaron los 20ms de seguridad podemos considerar que el pulsador se presiono + tempp=2; + if(entad==0) //Ahora que verificamos que el boton se presiona solo 1 vez, cambiamos el modo actual + entad=1; + else + entad=0; + + + } + break; + case 2: + if(enta==1) { //Ahora repetimos el proceso al soltar el pulsador + tempp=3; + cuenta=0; + } + break; + case 3: + if(cuenta>=2) { + tempp=0; + + + } + break; + } + + + } + + + + +} + + + + +void funcion() +{ + + cuenta++; //Cada 10ms se aumenta esta variable para el antirebote + + +} +void tiemporpm() +{ + + e=1; + sensor.read(); + f=sensor.getCelsius(); //Leemos el sensor + rpm=cuentar*30; //Multiplicamos la cantidad de vueltas que medimos en 2segundos por 20, asi obtenemos la cantidad para 1 minuto + cuentar=0; //Luego volvemos esta variable a 0 para poder contar las revoluciones otra vez + mostrar=1; +} +