Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: 4DGL-uLCD-SE EthernetInterface PinDetect mbed-rtos mbed
Diff: main.cpp
- Revision:
- 2:50b6517bcae4
- Parent:
- 0:a66216813d00
- Child:
- 3:03629edd59ff
--- a/main.cpp Wed Oct 21 22:02:13 2015 +0000 +++ b/main.cpp Thu Oct 22 02:59:40 2015 +0000 @@ -7,6 +7,7 @@ #include "PinDetect.h" #include "string.h" #include "EthernetInterface.h" +#include "Speaker.h" //uLCD_4DGL uLCD(p9,p10,p11); // serial tx, serial rx, reset pin; uLCD_4DGL uLCD(p28, p27, p29); @@ -19,7 +20,9 @@ //Set up IR sensor AnalogIn IrSensor(p20); Serial serial(USBTX, USBRX); + SongPlayer mySpeaker(p26); +Speaker NotePlayer(p26); // ethernet setup EthernetInterface eth; @@ -40,11 +43,12 @@ enum Statetype { Armed =0 ,IR_sensed = 1,Second_Step = 2,Cleared = 3, Alarm_ON = 4}; Statetype state = Armed; -char Code[4] = {0,0,0,0}; +int Code[4] = {0,0,0,0}; int CodeCounter = 0; void pb1_hit_callback (void) { - if (state == IR_sensed) { + if ((state == IR_sensed) ||(state == Cleared)) { + NotePlayer.PlayNote(1200.0,0.15,0.1); myLED1 = !myLED1; Code[CodeCounter] = 1; //printf("\n PB: %d\n\r",Code[CodeCounter]); @@ -53,7 +57,8 @@ } } void pb2_hit_callback (void) { - if (state == IR_sensed) { + if ((state == IR_sensed) ||(state == Cleared)){ + NotePlayer.PlayNote(1200.0,0.15,0.1); myLED2 = !myLED2; Code[CodeCounter] = 2; //printf("\n PB: %d\n\r",Code[CodeCounter]); @@ -62,7 +67,8 @@ } } void pb3_hit_callback (void) { - if (state == IR_sensed) { + if ((state == IR_sensed) ||(state == Cleared)) { + NotePlayer.PlayNote(1200.0,0.15,0.5); myLED3 = !myLED3; Code[CodeCounter] = 3; //printf("\n PB: %d\n\r",Code[CodeCounter]); @@ -71,11 +77,12 @@ } } void pb4_hit_callback (void) { - if (state == IR_sensed) { - myLED4 = !myLED4; - Code[CodeCounter] = 4; - //printf("\n PB: %d\n\r",Code[CodeCounter]); - CodeCounter++; + if ((state == IR_sensed) ||(state == Cleared)) { + NotePlayer.PlayNote(1200.0,0.15,0.5); + myLED4 = !myLED4; + Code[CodeCounter] = 4; + //printf("\n PB: %d\n\r",Code[CodeCounter]); + CodeCounter++; wait(0.500); } } @@ -85,7 +92,8 @@ //Mutex stdio_mutex; -Semaphore LCD_Access(2); +//Semaphore LCD_Access(2); +Mutex LCD_Access; Semaphore Consul_Access(5); float IrVoltage = 0.0; @@ -108,12 +116,13 @@ + void Speaker_thread(void const *args) { while (1) { if (state == Alarm_ON) { - Consul_Access.wait(); + /*Consul_Access.wait(); serial.printf("\n play sound\n\r"); - Consul_Access.release(); + Consul_Access.release();*/ mySpeaker.PlaySong(note,duration); Thread::wait(5000); } @@ -122,43 +131,35 @@ void uLCD_thread(void const *args) { int Change = 99; - Consul_Access.wait(); - //serial.printf("state %d %d\n\r",Change,state); - Consul_Access.release(); while(1) { if (Change != state) { Change = state; switch (state) { case Armed: - LCD_Access.wait(); + LCD_Access.lock(); uLCD.cls(); uLCD.color(WHITE); - uLCD.printf(" ARMED \n "); - LCD_Access.release(); + uLCD.printf(" ARMED \n "); + LCD_Access.unlock(); break; case IR_sensed: - LCD_Access.wait(); + LCD_Access.lock(); uLCD.cls(); uLCD.printf("\nSensor triggred \n"); //Default Green on black text uLCD.printf("\n Enter the code ..."); - uLCD.text_width(4); //4X size text - uLCD.text_height(4); - uLCD.color(RED); - LCD_Access.release(); + LCD_Access.unlock(); + //Thread::wait(100); for (int i=30; i>=0; --i) { if (state == IR_sensed) { - LCD_Access.wait(); - uLCD.text_width(4); //4X size text - uLCD.text_height(4); + LCD_Access.lock(); + uLCD.text_width(3); //4X size text + uLCD.text_height(3); uLCD.color(RED); - uLCD.locate(1,2); - uLCD.printf("%2D",i); - LCD_Access.release(); - Consul_Access.wait(); - serial.printf("CC: %d%d%d%d\n\r",Code[0],Code[1],Code[2],Code[3]); - Consul_Access.release(); - Thread::wait(100); + uLCD.locate(2,2); + uLCD.printf("%2D",i); + LCD_Access.unlock(); + Thread::wait(1000); } } if (state == IR_sensed) { @@ -167,28 +168,29 @@ break; case Second_Step: - LCD_Access.wait(); + LCD_Access.lock(); uLCD.cls(); uLCD.color(BLUE); uLCD.printf("\nPleas enter code from text massage \n"); - LCD_Access.release(); + LCD_Access.unlock(); break; case Alarm_ON: - LCD_Access.wait(); + LCD_Access.lock(); uLCD.cls(); uLCD.color(RED); uLCD.printf("\nThis house is being broken into. \nThe athoroties have been informed \n"); - LCD_Access.release(); + LCD_Access.unlock(); break; case Cleared: - LCD_Access.wait(); + LCD_Access.lock(); uLCD.cls(); uLCD.color(GREEN); uLCD.printf("\nAccess Granted. \n\n"); - LCD_Access.release(); + LCD_Access.unlock(); break; } } + Thread::wait(500); } } @@ -204,16 +206,9 @@ if (IrVoltage <= 0.1) { //if value just nois reset timer t.reset(); state = Armed; - Consul_Access.wait(); - serial.printf("Vtimer reset %f\r\n", IrVoltage); - serial.printf("tread: %f\r\n", t.read()); - Consul_Access.release(); } - if (t.read() >= 5) { //wait 5 seconds to make sure that sense someone + if (t.read() >= 2) { //wait 5 seconds to make sure that sense someone state = IR_sensed; - Consul_Access.wait(); - serial.printf("alarm on %f\r\n", IrVoltage); - Consul_Access.release(); } Thread::wait(1000); } @@ -225,9 +220,6 @@ } void Shiftbright_thread(void const *args){ - //int red=0; - //int green=0; - //int blue=0; spi.format(16,0); spi.frequency(500000); enable=0; @@ -236,29 +228,29 @@ while(1) { switch (state) { case Armed: - Consul_Access.wait(); - serial.printf("armed \r\n"); - Consul_Access.release(); - for (int i = 0; i <= 100; i++) { - RGB_LED( 0, i, 0); + for (int i = 0; i <= 50; i++) { + RGB_LED( i, 0, 0); Thread::wait(10); } - for (int i = 100; i >= 0; i--) { - RGB_LED( 0, i, 0); + for (int i = 50; i >= 0; i--) { + RGB_LED( i, 0, 0); Thread::wait(10); } break; case IR_sensed: - Consul_Access.wait(); - serial.printf("sensed \r\n"); - Consul_Access.release(); - RGB_LED( 0, 0, 100); + RGB_LED( 100, 0, 0); + Thread::wait(500); + RGB_LED( 0, 0, 0); break; case Alarm_ON: - Consul_Access.wait(); - serial.printf("on \r\n"); - Consul_Access.release(); - RGB_LED( 100, 0, 0); + for (int i = 0; i <= 100; i++) { + RGB_LED( i, i/2, 0); + Thread::wait(10); + } + for (int i = 100; i >= 0; i--) { + RGB_LED( i, i/2, 0); + Thread::wait(10); + } break; case Cleared: RGB_LED( 0, 100, 0); @@ -270,46 +262,55 @@ void CheckCode_thread(void const *args) { while(1){ - if (state == IR_sensed) { - //printf("CC from check: %d%d%d%d\n\r",Code[0],Code[1],Code[2],Code[3]); - if ((Code[0] == 1) && (Code[1] == 2) && (Code[2] == 3) && (Code[3] == 4)) { - Code[0] = Code[1] = Code[2] = Code[3] =0; - state = Second_Step; - CodeCounter = 0; - break; + switch (state) { + case Armed: + break; + case IR_sensed: + if ((Code[0] == 1) && (Code[1] == 2) && (Code[2] == 3) && (Code[3] == 4)) { + Code[0] = Code[1] = Code[2] = Code[3] =0; + state = Cleared; + CodeCounter = 0; + break; + } + else if ((Code[0] != 0) && (Code[1] != 0) && (Code[2] != 0) && (Code[3] != 0)) { + Code[0] = Code[1] = Code[2] = Code[3] =0; + NotePlayer.PlayNote(200,1,0.5); + state = Alarm_ON; } - else if ((Code[0] != 0) && (Code[1] != 0) && (Code[2] != 0) && (Code[3] != 0)) { - Code[0] = Code[1] = Code[2] = Code[3] =0; - Consul_Access.wait(); - serial.printf("\nAWrong passcode. \n\n"); - Consul_Access.release(); - state = Alarm_ON; - } + Thread::wait(100); + break; + case Alarm_ON: + Thread::wait(1000); + break; + case Cleared: + //serial.printf("CC from check: %d%d%d%d\n\r",Code[0],Code[1],Code[2],Code[3]); + if ((Code[0] == 4) && (Code[1] == 3) && (Code[2] == 2) && (Code[3] == 1)) { + Code[0] = Code[1] = Code[2] = Code[3] =0; + Thread::wait(100); + state = Armed; + CodeCounter = 0; + break; + } + else if ((Code[0] != 0) && (Code[1] != 0) && (Code[2] != 0) && (Code[3] != 0)) { + Code[0] = Code[1] = Code[2] = Code[3] =0; + NotePlayer.PlayNote(200,1,0.5); + Thread::wait(100); + //state = Alarm_ON; + } + Thread::wait(100); + break; } - if (state == Second_Step) { - Consul_Access.wait(); - serial.printf("CC from check: %d%d%d%d\n\r",Code[0],Code[1],Code[2],Code[3]); - Consul_Access.release(); - if ((Code[0] == 3) && (Code[1] == 2) && (Code[2] == 2) && (Code[3] == 1)) { - Code[0] = Code[1] = Code[2] = Code[3] =0; - state = Cleared; - CodeCounter = 0; - } - else if ((Code[0] != 0) && (Code[1] != 0) && (Code[2] != 0) && (Code[3] != 0)) { - Code[0] = Code[1] = Code[2] = Code[3] =0; - Consul_Access.wait(); - serial.printf("\nAWrong passcode. \n\n"); - Consul_Access.release(); - state = Alarm_ON; - } - } - Thread::wait(1000); } } void Ethernet_thread(void const *args) { int Change = 99; + + eth.init(); //Use DHCP + eth.connect(); + serial.printf("IP Address is: %s", eth.getIPAddress()); + while(1) { if (Change != state) { @@ -319,16 +320,20 @@ //add code that verifies connection every so often Thread::wait(1000); break; - case IR_sensed: - /*// send alert + case Second_Step: + Thread::wait(1000); + break; + case Alarm_ON: { + // send alert + char buffer[300]; + int ret; TCPSocketConnection sock; sock.connect("dreamphysix.com", 80); char http_cmd[] = "GET http://dreamphysix.com/alert.php?authcode=0e9cae34a0 HTTP/1.0\n\n"; sock.send_all(http_cmd, sizeof(http_cmd)-1); - char buffer[300]; - int ret; + while (true) { ret = sock.receive(buffer, sizeof(buffer)-1); if (ret <= 0) @@ -338,45 +343,14 @@ serial.printf("Received %d chars from server:\n%s\n", ret, buffer); Consul_Access.release(); } - sock.close();*/ - break; - case Second_Step: - /*TCPSocketConnection sock; - sock.connect("dreamphysix.com", 80); - char buffer[300]; - int ret; - //code second step - // send random code - srand(time(NULL)); - int randomNumber = 3221 ;//rand() % 4444 + 1000; - char randomCode[sizeof(int)*4]; - snprintf(randomCode, sizeof(randomCode), "%i", randomNumber); - - sock.connect("dreamphysix.com", 80); - - char http_cmd1[100] = "GET http://dreamphysix.com/sendcode.php?authcode=0e9cae34a0&randomcode="; - strcat(http_cmd1, randomCode); - strcat(http_cmd1, " HTTP/1.0\n\n"); - sock.send_all(http_cmd1, sizeof(http_cmd1)-1); - - while (true) { - ret = sock.receive(buffer, sizeof(buffer)-1); - if (ret <= 0) - break; - buffer[ret] = '\0'; - Consul_Access.wait(); - serial.printf("Received %d chars from server:\n%s\n", ret, buffer); - Consul_Access.release(); + sock.close(); } - - sock.close(); - */ break; case Cleared: //nothing to do for this thread make space for others Thread::wait(1000); break; - case Alarm_ON: + case IR_sensed: //nothing to do for this thread make space for others Thread::wait(1000); break; @@ -397,17 +371,26 @@ Thread::wait(1000); //nothing to do for this thread make space for others break; case IR_sensed: - case Second_Step: - LCD_Access.wait(); + + Thread::wait(500); + LCD_Access.lock(); uLCD.line(MidPoint-2*(LineWidth+SpaceWidth), LineHight, MidPoint- 2*SpaceWidth-LineWidth, LineHight, WHITE); //line( int x1, int y1, int x2, int y2, int color) uLCD.line(MidPoint-LineWidth-SpaceWidth, LineHight, MidPoint-SpaceWidth, LineHight, WHITE); //line( int x1, int y1, int x2, int y2, int color) uLCD.line(MidPoint+SpaceWidth, LineHight, MidPoint+SpaceWidth+LineWidth, LineHight, WHITE); //line( int x1, int y1, int x2, int y2, int color) uLCD.line(MidPoint+2*SpaceWidth+LineWidth, LineHight, MidPoint+2*(SpaceWidth+LineWidth), LineHight, WHITE); //line( int x1, int y1, int x2, int y2, int color) - - uLCD.locate(20,20); - uLCD.printf("%d %d %d %d ",Code[0],Code[1],Code[2],Code[3]); - LCD_Access.release(); + LCD_Access.unlock(); + while(state == IR_sensed) { + LCD_Access.lock(); + uLCD.locate(5,14); + uLCD.text_width(1); //4X size text + uLCD.text_height(1); + uLCD.color(WHITE); + uLCD.printf("%d %d %d %d",Code[0],Code[1],Code[2],Code[3]); + LCD_Access.unlock(); + } + case Second_Step: + Thread::wait(1000); //nothing to do for this thread make space for others break; case Cleared: Thread::wait(1000); //nothing to do for this thread make space for others @@ -421,15 +404,12 @@ int main() { + serial.baud(921600); init_pbs(); - serial.printf("Setting up connection\r\n"); - - eth.init(); //Use DHCP - eth.connect(); Thread Ethernetthread(Ethernet_thread); - serial.printf("IP Address is %s\n", eth.getIPAddress()); wait(5); + //serial.printf("IP Address is: %s", eth.getIPAddress()); Thread LCDthread(uLCD_thread); Thread IRthread(IR_thread); @@ -438,36 +418,7 @@ Thread CheckCode(CheckCode_thread); Thread LCD_CodeEnterThread(LCD_Code_Enter_Thread); - while (1) { - /* switch (state) { - //state: Armed =0 ,IR_sensed = 1,Second_Step = 2,Cleared = 3, Alarm_ON = 4}; - case Armed: - - break; - case IR_sensed: - - break; - case Second_Step: - - break; - case Cleared: - - break; - case Alarm_ON: - - break; - }*/ - } - - - - - - - - - - //while (true) { } + while (true) { } } @@ -511,11 +462,4 @@ pb4.setSampleFrequency(); // pushbuttons now setup and running - } - -/*void Thread_maintnence(char Thread) { - switch (Thread) { - case 'IRthread': - IRthread.terminate(); - break; -}*/ \ No newline at end of file + } \ No newline at end of file