Josmy Bar
/
FireDetector
Fire Detector with Two Zones
Fork of TextLCD_HelloWorld by
main.cpp
- Committer:
- josmy
- Date:
- 2015-03-10
- Revision:
- 3:d23f3885fa07
- Parent:
- 2:ad0b044d0a10
File content as of revision 3:d23f3885fa07:
#include "mbed.h" #include "TextLCD.h" #define Maxsamples 50 Serial pc(SERIAL_TX,SERIAL_RX); Ticker Test; unsigned mydelay; AnalogIn potpin1(PA_0); AnalogIn potpin2(PA_1); AnalogIn batpin(PC_0); AnalogIn Mains(PC_1); DigitalIn itz1k(PB_14); DigitalIn itz2k(PB_13); DigitalIn Userbutton(PA_15); //DigitalIn Reset(PB_9); DigitalIn sbutton(PB_12); DigitalIn silbutton(PB_11); DigitalOut myled(LED1); DigitalOut z1fled(PA_5, 1); DigitalOut z2fled(PA_4, 1); DigitalOut z1ftled(PA_7, 1); DigitalOut z2ftled(PA_6, 1); DigitalOut z1iled(PC_5, 1); DigitalOut z2iled(PC_4,1); DigitalOut silenceled(PB_1, 1); DigitalOut soundled(PB_0, 1); DigitalOut z1testled(PB_10, 1); DigitalOut z2testled(PB_2, 1); DigitalOut hooter(PC_8); DigitalOut buzzer(PA_9); DigitalOut z1r(PB_15); DigitalOut z2r(PC_6); DigitalOut Tx(PA_2); DigitalOut Rx(PA_3); DigitalOut TREN(PA_10); DigitalOut z1drv(PC_9); DigitalOut z2drv(PA_8); DigitalOut fr(PC_7); DigitalOut commonfire(PC_12, 1); uint16_t z1tflag=0; uint16_t z2tflag=0; uint16_t z1iflag=0; uint16_t z2iflag=0; TextLCD lcd(PA_11,PF_6,PF_7,PA_15,PC_10,PC_11);//RW- PA_12, float fval1=0.0; float fval2=0.0; float fval3=0.0; float fval4=0.0; float sense=0.20; //float Zone2sense=2.2; float scsense=2.2; float shortsense = 3.0; float ocsense=0.11; float mains = 2.7; float batsense=2.0; unsigned long val1=0; unsigned long val2=0; unsigned long val3=0; unsigned long val4=0; uint16_t i = 0; uint16_t j = 0; uint16_t it1flag = 0; uint16_t it2flag = 0; int SilFlag, SouFlag; int a; int HBTest; int OCflag; int w, x; void TestISR (void){ if (mydelay) mydelay--; } void HooterON(void){ hooter=1; } void BuzzerON(void){ buzzer=1; } void HooterOFF(void){ hooter=0; } void BuzzerOFF(void){ buzzer=0; } void HooterTest(unsigned counter){ //if(HBTest == 0)HBTest = 1 ; //if(HBTest == 1){ HooterON(); BuzzerON(); mydelay = counter; while(mydelay); HooterOFF(); BuzzerOFF(); //mydelay = counter; //while(mydelay); //HBTest = 2; //} } void Z1FON(void){ z1fled = 0; } void Z1FOFF(void){ z1fled = 1; } void Z2FON(void){ z2fled = 0; } void Z2FOFF(void){ z2fled = 1; } void Z1FTON(void){ z1ftled = 0; } void Z1FTOFF(void){ z1ftled = 1; } void Z2FTON(void){ z2ftled = 0; } void Z2FTOFF(void){ z2ftled = 1; } void Z1ION(void){ z1iled = 0; } void Z1IOFF(void){ z1iled = 1; } void Z2ION(void){ z2iled = 0; } void Z2IOFF(void){ z2iled = 1; } void SILENCEON(void){ silenceled = 0; } void SILENCEOFF(void){ silenceled = 1; } void SOUNDON(void){ soundled = 0; } void SOUNDOFF(void){ soundled = 1; } void Z1TESTON(void){ z1testled = 0; } void Z1TESTOFF(void){ z1testled = 1; } void Z2TESTON(void){ z2testled = 0; } void Z2TESTOFF(void){ z2testled = 1; } void CFIREON(void){ commonfire= 0; } void CFIREOFF(void){ commonfire= 1; } void Z1RON(void){ z1r = 1; } void Z1ROFF(void){ z1r = 0; } void Z2RON(void){ z2r = 1; } void Z2ROFF(void){ z2r = 0; } void FRON(void){ fr = 1; } void FROFF(void){ fr = 0; } void avg(void){ fval1 = fval2 = fval3= fval4= 0; for (int k=1; k<=Maxsamples; k++ ){ fval1 += potpin1.read(); fval2 += potpin2.read(); fval3 += batpin.read(); fval4 += Mains.read(); } fval1/=Maxsamples; fval2/=Maxsamples; fval3/=Maxsamples; fval4/=Maxsamples; fval1 = fval1 *3.3; fval2 = fval2 *3.3; fval3 = fval3 *3.3; fval4 = fval4 *3.3; } void Autofirez1_test(void){ avg(); //if ((fval1>=sense) && (fval1<3.0)){ if ((fval1>=0.11) && (fval1 < 3.0)){ //lcd.locate(0,0); //lcd.printf("Fire Zn1 "); Z1FON(); Z1RON(); CFIREON(); if((SilFlag == 0)){ HooterTest(6); } z1drv =0; wait(1); z1drv =1; //HooterTest(6); } else{ //lcd.locate(0,0); //lcd.printf(" "); //HooterOFF(); //BuzzerOFF(); //Z1FOFF(); //CFIREOFF(); Z1ROFF(); } } void IsolateZ1(void){ Z1FOFF(); Z1ROFF(); } void Autofirez1(void){ avg(); //if ((fval1>=sense) && (fval1<3.0)){ if ((fval1>=0.11) && (fval1 < 3.0)){ Z1RON(); lcd.locate(0,0); lcd.printf("Fire Zn1 "); Z1FON(); if((SilFlag == 0)){ //if(z2iflag != 1){ HooterON(); BuzzerON(); //} } CFIREON(); } else{ //lcd.locate(0,0); //lcd.printf(" "); //HooterOFF(); //BuzzerOFF(); //CFIREOFF(); //Z1FOFF(); Z1ROFF(); } } void Autofirez2(){ avg(); //if ((fval2>=sense) && (fval2<3.0)){ if ((fval2>=0.11) && (fval2 < 3.0)){ Z2RON(); lcd.locate(0,1); lcd.printf("Fire Zn2 "); if((fval1>=0.003) && (fval1 < 0.09) && (z1iflag != 1) && (z1tflag != 1)){ lcd.locate(0,0); lcd.printf(" "); } Z2FON(); if((SilFlag == 0)){ //if(z1iflag != 1){ HooterON(); BuzzerON(); //} } CFIREON(); } else{ //lcd.locate(0,1); //lcd.printf(" "); //HooterOFF(); //BuzzerOFF(); //CFIREOFF(); //Z2FOFF(); Z2ROFF(); } } void Autofirez2_test(){ avg(); //if ((fval2>=sense) && (fval2<3.0)){ if ((fval2>=0.11) && (fval2 < 3.0)){ //lcd.locate(0,1); //lcd.printf("Fire Zn2 "); if((fval1>=0.003) && (fval1 < 0.09) && (z1iflag != 1) && (z1tflag != 1)){ lcd.locate(0,0); lcd.printf(" "); } Z2FON(); CFIREON(); Z2RON(); if((SilFlag == 0)){ HooterTest(6); } z2drv =0; wait(1); z2drv =1; //HooterTest(6); //BuzzerON(); } else{ //lcd.locate(0,1); //lcd.printf(" "); //HooterOFF(); //BuzzerOFF(); //CFIREOFF(); //Z2FOFF(); Z2ROFF(); } } void IsolateZ2(void){ Z2FOFF(); Z2ROFF(); } void firepanel(void){ if ((z1iflag != 1) && (z2iflag != 1) && (z1tflag != 1) && (z2tflag != 1)){ avg(); if (((fval1>=0.001) && (fval1<0.09)) && ((fval2>=0.001) && (fval2<0.09))){ wait_ms(10); avg(); if (((fval1>=0.001) && (fval1<0.09)) && ((fval2>=0.001) && (fval2<0.09))){ lcd.locate(0,0); lcd.printf("Normal "); //lcd.locate(0,1); //lcd.printf(" "); } } //else if((fval1>=0.003) && (fval1<0.15) && (fval2<0.001)){ // lcd.locate(0,0); // lcd.printf(" "); //} } } void Shortz1 (void) { avg(); if (fval1>=3.20){ lcd.locate(0,0); lcd.printf("Short Zn1"); Z1FTON(); //HooterON(); //BuzzerON(); FRON(); if((SouFlag != 1) && (fval2 >= 0.003) && (fval2 < 0.09)){ HooterOFF(); CFIREOFF(); } if((SilFlag == 0)){ BuzzerON(); } } else { //lcd.locate(9,0); //lcd.printf(" "); //Z1FTOFF(); //FROFF(); } } void Shortz2(void){ avg(); if(fval2 >= 3.20) { lcd.locate(0,1); lcd.printf("Short Zn2"); Z2FTON(); if((SouFlag != 1) && (fval1 >= 0.003) && (fval1 < 0.09)){ HooterOFF(); CFIREOFF(); } if((SilFlag == 0)){ BuzzerON(); } //HooterON(); //BuzzerON(); FRON(); } else{ //Z2FTOFF(); //FROFF(); //lcd.locate(9,1); //lcd.printf(" "); } } void battery(void){ avg(); if (fval3<1.8){ lcd.locate(10,0); lcd.printf("BatLow"); if((SilFlag == 0)){ BuzzerON(); } FRON(); //BuzzerON(); } else { lcd.locate(10,0); lcd.printf(" "); //BuzzerOFF(); } } void opencircuitz1(void){ avg(); if (fval1<0.00009){ OCflag = 1; lcd.locate(0,0); lcd.printf("Open Zn1 "); Z1FTON(); FRON(); if((SilFlag == 0)){ BuzzerON(); } if((SouFlag != 1) && (fval2 >= 0.003) && (fval2 < 0.09)){ HooterOFF(); CFIREOFF(); } //BuzzerON(); //HooterON(); } else if((fval1>0.003) && (fval1<0.09)){ OCflag = 0; lcd.locate(0,0); //lcd.printf(" "); //BuzzerOFF(); //HooterOFF(); //Z1FTOFF(); //FROFF(); } } void opencircuitz2(void){ avg(); if (fval2<0.00009) { lcd.locate(0,1); lcd.printf("Open Zn2 "); Z2FTON(); //BuzzerON(); //HooterON(); FRON(); if((SilFlag == 0)){ BuzzerON(); } if((SouFlag != 1) && (fval1 >= 0.003) && (fval1 < 0.09)){ HooterOFF(); CFIREOFF(); } } else if((fval2>=0.003) && (fval2<0.09)){ if(z2tflag !=1){ lcd.locate(0,1); lcd.printf(" "); } //BuzzerOFF(); //HooterOFF(); //Z2FTOFF(); //lcd.locate(9,1); //lcd.printf(" "); } if((fval2<0.00009) && (fval1>0.003) && (fval1<0.09)) {//C if((z1tflag != 1) && (z1iflag !=1)){ lcd.locate(0,0); lcd.printf(" "); } } } void ACFail(void){ avg(); if (fval4<2.4){ //lcd.locate(0,0); //lcd.printf("AC FAIL"); // Z1FT(); //BuzzerON(); lcd.locate(10,1); lcd.printf("ACFAIL"); if((SilFlag == 0)){ BuzzerON(); } FRON(); //Z1FT(); //BuzzerON(); } else { lcd.locate(10,1); lcd.printf(" "); //BuzzerOFF(); } } void isolation(void){ if (z1iflag == 1){ Z1ION(); } else{ Z1IOFF(); } if (z2iflag == 1){ Z2ION(); } else{ Z2IOFF(); } } void TEST(void){ if(z1tflag == 1){ Z1TESTON(); } else{ Z1TESTOFF(); } if(z2tflag == 1){ Z2TESTON(); } else{ Z2TESTOFF(); } } void itkey1(void){ if(itz1k == 0){ a++; w++; if ((a >= 1) &&(a < 2)){ z1iflag=1; } if(a > 2){ z1iflag=0; } if(w>=10 && w<20){ z1tflag=1; } if (w>=20){ z1tflag=0; } if(a > 21) a = 0; if(w > 21) w = 0; } } void itkey2(void){ if(itz2k == 0){ j++; x++; if ((j >= 1) && (j < 2)){ z2iflag=1; } if(j > 2){ z2iflag=0; } if(x>=10 && x<20){ z2tflag=1; } if (x>=20){ z2tflag=0; } if(j >21) j = 0; if(x >21) x = 0; } } /* void Reset_in(void){ if (Reset ==0){ NVIC_SystemReset(); } } */ void sound (void){ if (sbutton == 0){ SouFlag = 1; } if(SouFlag == 1){ SilFlag = 0; SOUNDON(); avg(); if((fval1>=0.00) || (fval2>=0.00)){ HooterON(); BuzzerON(); } //else{ //HooterOFF(); //BuzzerOFF(); //SOUNDOFF(); //} } else SOUNDOFF(); } void silence (void){ if (silbutton==0){ SilFlag = 1; } if(SilFlag == 1){ SouFlag = 0; HooterOFF(); BuzzerOFF(); SILENCEON(); } else{ SILENCEOFF(); } } void HBOFF(void){ avg(); if((SouFlag != 1) && (fval1 >= 0.003) && (fval1 < 0.09) && (fval2 >= 0.003) && (fval2 < 0.09) && (fval3 >= 1.9) && (fval4 >= 2.5)){ HooterOFF(); BuzzerOFF(); CFIREOFF(); } avg(); if((SouFlag != 1) && ((fval1 >= 3.2) || (fval1 < 0.00009)) && ((fval2 >= 3.2) || (fval2 < 0.00009))){//C HooterOFF(); CFIREOFF(); } } void FaultOFF(){ avg(); if((fval1 >= 0.003) && (fval1 < 3.00) && (fval2 >= 0.003) && (fval2 < 3.00) && (fval3 >= 1.9) && (fval4 >= 2.5)){ wait_ms(10); if((fval1 >= 0.003) && (fval1 < 3.00) && (fval2 >= 0.003) && (fval2 < 3.00) && (fval3 >= 1.9) && (fval4 >= 2.5)){ FROFF(); } } if((fval1 >= 0.003) && (fval1 < 3.00)) { wait_ms(10); if((fval1 > 0.003) && (fval1 < 3.00)) { Z1FTOFF(); //lcd.locate(9,0); //lcd.printf(" "); } } if((fval2 >= 0.003) && (fval2 < 3.00)) { wait_ms(10); if((fval2 >= 0.003) && (fval2 < 3.00)) { Z2FTOFF(); //lcd.locate(9,1); //lcd.printf(" "); } } } void FireOFF(void){ avg(); if(fval1 < 0.17)Z1FOFF(); if(fval2 < 0.17)Z2FOFF(); } void HBIOFF(void){ if((z1iflag == 0) && (z2iflag == 1)){ avg(); if((fval1 >= 0.003) && (fval1 < 0.09)){ if(SouFlag != 1){ //HooterOFF(); //BuzzerOFF(); //CFIREOFF(); } } } if((z1iflag == 1) && (z2iflag == 0)){ avg(); if((fval2 >= 0.003) && (fval2 < 1.5)){ if(SouFlag != 1){ //HooterOFF(); //BuzzerOFF(); //CFIREOFF(); } } } if((z1iflag == 1) && (z2iflag == 1)){ if(SouFlag != 1){ HooterOFF(); BuzzerOFF(); CFIREOFF(); } } /* if((z1iflag != 0) || (z2iflag != 0)){ //avg(); //if((fval1 > 0.10) || (fval2 > 0.10)){ if(((z1iflag == 1) || (z1iflag == 0))&& ((z2iflag == 1) || (z2iflag == 0))){ HooterOFF(); BuzzerOFF(); CFIREOFF(); } //} } */ } int main(){ /* while(1){ myled = !myled; wait_ms(100); } unsigned int i; while(1){ Z1FOFF(); lcd.locate(0,0); lcd.printf("%u",i); wait_ms(100); i++; Z1FON(); } */ Z1FOFF(); Z2FOFF(); Z1FTOFF(); Z2FTOFF(); Z1IOFF(); Z2IOFF(); Z1TESTOFF(); Z2TESTOFF(); CFIREOFF(); SOUNDOFF(); SILENCEOFF(); itz1k.mode(PullUp); itz2k.mode(PullUp); sbutton.mode(PullUp); silbutton.mode(PullUp); z1iflag = 0; z2iflag = 0; z1tflag = 0; z2tflag = 0; z1drv = 1; z2drv = 1; HBTest = 0; OCflag = 0; //pc.printf("FIRE DETECTOR"); Test.attach(&TestISR,1.0); /* while(1){ avg(); //pc.print("Z1: %4u Z2: %4u\n", val1, val2); lcd.locate(0,0); lcd.printf("%2.4f %2.4f",fval1, fval3); lcd.locate(0,1); lcd.printf("%2.5f %2.4f",fval2, fval4); wait(1); } */ // Reset(); while(1){ //myled=!myled; //pc.printf("z1: %d\n",z1fled.read()); itkey1(); itkey2(); firepanel(); //pc.printf("%4.2f %4.2f %4.2f \n",fval1,fval2,fval3); //wait(0.1); isolation(); TEST(); HBIOFF(); if(z1tflag != 1){ if (z1iflag==0){ Autofirez1(); //Manualfirez1(); opencircuitz1(); //Manualz1(); Shortz1(); HBOFF(); FaultOFF(); ACFail(); battery(); sound(); silence(); FireOFF(); } } if(z1iflag == 1) { lcd.locate(0,0); lcd.printf("Isolate 1"); IsolateZ1(); if((fval1 >= 0.003) && (fval1 < 3.00)) { wait_ms(10); if((fval1 >= 0.003) && (fval1 < 3.00)) { Z1FTOFF(); } } ACFail(); battery(); sound(); silence(); } if(z2tflag != 1){ if (z2iflag==0){ Autofirez2(); // Manualfirez2(); opencircuitz2(); //Manualz2(); Shortz2(); ACFail(); HBOFF(); FaultOFF(); battery(); sound(); silence(); FireOFF(); } } if(z2iflag == 1) { lcd.locate(0,1); lcd.printf("Isolate 2"); avg(); if((z1iflag == 0) && (z1tflag == 0) && ((fval1>=0.003) && (fval1<0.09))){ lcd.locate(0,0); lcd.printf(" "); } IsolateZ2(); if((fval2 >= 0.03) && (fval2 < 3.00)) { wait_ms(10); if((fval2 >= 0.003) && (fval2 < 3.00)) { Z2FTOFF(); } } ACFail(); battery(); sound(); silence(); } avg(); //if((fval1 >= 0.003) && (fval1 < 0.15)){ if(z1tflag==1){ if((fval1 >= 0.003) && (fval1 < 0.09)){ lcd.locate(0,0); lcd.printf("Test Zn1 "); } Autofirez1_test(); //Manualz1_test(); opencircuitz1(); battery(); silence(); sound(); Shortz1(); ACFail(); //HBOFF(); FaultOFF(); FireOFF(); itkey1(); itkey2(); HBOFF(); //} } /* if(z1iflag!=1){ if(z1tflag!=1) { lcd.locate(0,0); lcd.printf(" "); } } */ //if((fval2 >= 0.003) && (fval2 < 0.15)){ if(z2tflag==1){ if((fval2 >= 0.002) && (fval2 < 0.09)){ lcd.locate(0,1); lcd.printf("Test Zn2 "); } Autofirez2_test(); //Manualz2_test(); opencircuitz2(); battery(); silence(); sound(); Shortz2(); ACFail(); FaultOFF(); FireOFF(); itkey1(); itkey2(); HBOFF(); } //} if(z2iflag!=1){ if(z2tflag!=1) { avg(); if((fval2>=0.003) && (fval2 < 0.09)){ lcd.locate(0,1); lcd.printf(" "); } } } if((z2tflag == 1) && (z1tflag != 1) && (z1iflag != 1) && (fval1 < 0.17)){ if(OCflag == 0){ lcd.locate(0,0); lcd.printf(" "); } } wait_ms(10); } }