Group Project
Dependencies: mbed Servo mbed-rtos MQ2 DHT
main.cpp
- Committer:
- roycoll
- Date:
- 2019-04-24
- Revision:
- 2:823794c0ec6d
- Parent:
- 1:98989411e334
File content as of revision 2:823794c0ec6d:
#include "mbed.h" #include "DHT.h" #include "MQ2.h" #include "rtos.h" #include "Servo.h" DigitalIn Occupant(D10); //Hall Switch input shows to determine if vehicle is occupied DigitalIn EngSw(D3); //Button D3 turns Engine on and off DigitalOut Buzz(D2); //Alarm signaling high gas levels DigitalOut Engine(D9); //Autoflash LED represents Engine running DigitalOut Red(PTC3); //RED LED (RGB) D7 DigitalOut Green(PTC2); //GREEN LED (RGB) D6 DigitalOut Blue(PTA2); //BLUE LED (RGB) D5 DigitalOut Heat(LED1); //Red on-board LED DigitalOut AC(LED3); //Blue on-board LED DigitalOut led2(LED2); //Green on-board LED DHT sensor(D4, DHT11); //Temperature and humidity sensor PwmOut PWM1(D11); //pin A4 == pin A5 Serial pc(USBTX, USBRX); MQ2 mq2(A1); // Analog Port to read from MQ2_gas sensor Servo myservo(A5); //Servo signal to simulate a window opening or closing InterruptIn sw2(SW2); //Switch used to manually switch between AC/Heater setting(led color) InterruptIn sw3(SW3); //Switch used to manually open or close the window float p = 0; float h = 0.0f, c = 0.0f, f = 0.0f, k = 0.0f, dp = 0.0f, dpf = 0.0f; int x = 1; int win = 0; int fan = 0; /*DC motor signal*/ int main() { myservo = p; pc.baud(115200); mq2.begin(); // 'Calibrate' sensor MQ2_data_t MQ2_data; // Structure to hold data. sensor.readData(); Engine = 0; Heat = 1; AC = 1; led2 = 1; int on = 1, off = 0; int open = 1, closed = 0; Buzz = !off; win = closed; PWM1.period_ms(500); PWM1.pulsewidth_ms(fan); while (true) { mq2.read(&MQ2_data); PWM1.period_ms(500); PWM1.pulsewidth_ms(fan); int error = 0; //Thread::wait(250); error = sensor.readData(); if (0 == error) { c = sensor.ReadTemperature(CELCIUS); f = sensor.ReadTemperature(FARENHEIT); k = sensor.ReadTemperature(KELVIN); h = sensor.ReadHumidity(); dp = sensor.CalcdewPoint(c, h); dpf = sensor.CalcdewPointFast(c, h); pc.printf("Temperature in Celcius: %4.2f\r\nTemperature in Farenheit: %4.2f\r\n", c, f); //printf("Temperature in Kelvin: %4.2f,\r\nCelcius: %4.2f,\r\n Farenheit %4.2f\r\n", k, c, f); //printf("Humidity is %4.2f, Dewpoint: %4.2f, Dewpoint fast: %4.2f\n", h, dp, dpf); } else { pc.printf("Temperature in Celcius: %4.2f\r\nTemperature in Farenheit: %4.2f\r\n", c, f); //pc.printf("Error: %d\n", error); } //pc.printf("................................\r\n"); //mq2.read(&MQ2_data); // Alt reading method, reading to structure pc.printf("CO PPM: %.0f\r\n",MQ2_data.co); // Return data from structure //pc.printf("Smoke PPM: %.0f\r\n",MQ2_data.smoke); // Return data from structure //pc.printf("LPG PPM: %.0f\r\n",MQ2_data.lpg); // Return data from structure pc.printf("................................\r\n"); // wait(.1); if(EngSw == 0) { if(Engine == off){ Engine = on;} else{ Engine = off; AC = !off; Heat = !off; } } if((sw2 == 0) && (win == closed)){ //for(; p<1.0 && sw2 == 0; p += 0.05) { //**Servo simulates opening a window if CarbonMonoxide level inside becomes too high while occupant is present while(p<=1.0 && sw2 ==0){ p=p+0.05; myservo = p; wait(0.05); } win = open; } else if((win == open) && (sw2 == 0)){ //for(; p>0 && sw2 ==0; p -= 0.05) { while(p>=0.0 && sw2 ==0){ p=p-0.05; myservo = p; wait(0.05); } win = closed; } if(sw3 == 0 && Engine == on){ //***If switch3 is pressed if(AC == !on) { Heat = !on;AC = !off;} else if(Heat == !on) {Heat=!off;AC=!off; fan=off; } else AC = !on; } if(Heat == !on || AC == !on) { fan = 10;} else if(Heat == !off && AC == !off){ fan = off;} if(Occupant == 1){ Red = 0; // Blue = 0; //(r,g,b) = (0,0,0) = white Green = 0; Buzz = !off; } // else if(Occupant == 0) { if(MQ2_data.co>=300) { // wait(.5); // Red = 0; // Blue = 1; //(r,g,b) = (0,1,1) = red Green = 1; // Buzz = !on; if(win == closed){ //for(; p<1.0; p += 0.05) { //**Servo simulates opening a window if CarbonMonoxide level inside becomes too high while occupant is present while(p<=1.0){ p=p+0.05; myservo = p; wait(0.05); } win = open; } // if(win == open && Engine == on){ // Engine = off;} } // else if(MQ2_data.co >=50 && MQ2_data.co <= 300) { //wait(.5); // Buzz = !off; Blue = 1; //(r,g,b) = (0,0,1) = yellow Green = 0; // Red = 0; // }//wait(.5); //**RGB end** else{ Red = 1; // Blue = 1; //(r,g,b) = (1,1,0) = green Green = 0; Buzz = !off; } if(f >= 90 || f <= 50) //Temperature from DHT { Engine = on; //x = 10; fan = 10; if(f>=90){ AC = !on;Heat=!off; if(win == closed){ //**Servo simulates opening a window if Temperature inside becomes too high while occupant is present //for(; p<1.0; p += 0.05) { while(p<=1.0){ p=p+0.05; myservo = p; wait(0.05); } win = open; } else if(f<=50) { Heat = !on;AC=!off; if(win == open){ //for(; p>0.0; p -= 0.05) { while(p>=0.0){ p=p-0.05; myservo = p; wait(0.05); } win = closed; } } } } /* else if(Occupant == 0 && AC == !on){ Engine = on; //x = 10; fan= 4; } else if(Occupant == 0 && Heat == !on){ Engine = on; //x = 10; fan=4; } */ } } }