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
diff -r bfaa82809420 -r 50b6517bcae4 main.cpp
--- 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

