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 IoTsecuritySys PinDetect mbed-rtos mbed
Fork of IoT by
Revision 8:429fa05b4952, committed 2015-12-08
- Comitter:
- landes
- Date:
- Tue Dec 08 21:32:24 2015 +0000
- Parent:
- 7:758d4e6fc145
- Child:
- 9:413c094dd1e2
- Commit message:
- 123
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Dec 08 19:39:21 2015 +0000
+++ b/main.cpp Tue Dec 08 21:32:24 2015 +0000
@@ -71,7 +71,7 @@
volatile int codeCounter;
// inputCode array is the sequence of numbers the user will enter
volatile int inputCode[CODE_LENGTH];
-volatile bool code_enabled;
+//volatile bool code_enabled;
volatile float IrVoltage = 0.0;
int FindStrLocation(string sntsc, string word, string ptr);
volatile enum Statetype { Armed = 0, IR_sensed = 1, Second_Step = 2, Cleared = 3, Alarm_ON = 4};
@@ -83,6 +83,7 @@
Mutex LCD_Access;
Mutex PC_Access;
+Mutex Eth_Lock;
Semaphore Consul_Access(5);
void Shiftbright_thread(void const *args);
@@ -132,11 +133,15 @@
}
break;
case Alarm_ON:
+ if(key_code == 12 ){
+ state = Armed;
+ Ethernet_massage_Send("UpdateStatus");
+ }
break;
case Cleared:
if(key_code == 12 ){
state = Armed;
- //Ethernet_massage_Send("UpdateStatus");
+ Ethernet_massage_Send("UpdateStatus");
}
else if (key_code == 11 ){
doorlock = 1;
@@ -151,19 +156,19 @@
void generate_random_code(int (&codeArray)[CODE_LENGTH]){
//int i = 0;
// only care about the even numbers (see lines 6-10)
- //////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("NEW CODE: ");
//PC_Access.unlock();
for(int i = 0; i < CODE_LENGTH; i+=2){
srand(t1.read_us());
codeArray[i] = (rand() % 9)+1; //nake code only 1-9
- //////////PC_Access.lock();
+ PC_Access.lock();
pc.printf("%d, ", codeArray[i]);
- //PC_Access.unlock();
+ PC_Access.unlock();
}
snprintf(charCode, sizeof(charCode), "%i%i%i%i ", codeArray[0], codeArray[2], codeArray[4], codeArray[6]);
- //////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("\n\r");
//pc.printf("%s\n\r",charCode,codeArray[6]);
//PC_Access.unlock();
@@ -186,28 +191,31 @@
}
if(j == CODE_LENGTH/2){
- for(int i = 0; i < CODE_LENGTH; i+=2){
- inputCode[i] =0;
- }
+ /*for(int i = 0; i < CODE_LENGTH; i+=2){
+ //inputCode[i] =0;
+ }*/
return(true);
}
else if (Ethernet_massage_Send("GetTempCode")){
- for(int i = 0; i < CODE_LENGTH; i+=2){
- inputCode[i] =0;
- }
+ /*for(int i = 0; i < CODE_LENGTH; i+=2){
+ //inputCode[i] =0;
+ }*/
//pc.printf("return true");
return(true);
}
else {
- for(int i = 0; i < CODE_LENGTH; i+=2){
- inputCode[i] =0;
- }
+ /*for(int i = 0; i < CODE_LENGTH; i+=2){
+ //inputCode[i] =0;
+ }*/
return(false);
}
}
else {
- pc.printf("3 times ");
+ //PC_Access.lock();
+ //pc.printf("3 times ");
+ //PC_Access.unlock();
state = Alarm_ON;
+ Ethernet_massage_Send("UpdateStatus");
return(false);
}
}
@@ -230,7 +238,7 @@
int new_code_timer = 0;
int new_code_counter = 0;
// this tells the state machine with phase of authentication we are in
- code_enabled = false;
+ //code_enabled = false;
for(int i = 0; i < CODE_LENGTH; i++){
authenticator[i] = 0;
@@ -241,13 +249,16 @@
// the seed will always be random, unlike the predecessor version
t1.start();
init_LCD();
+
+ Timer t;
+ t.start();
//start threads:
- //////////PC_Access.lock();
+ PC_Access.lock();
pc.printf("\n\n\nSetting up Ethernet\n\r");
- //PC_Access.unlock();
+ PC_Access.unlock();
Thread Ethernetthread(Ethernet_thread);
wait(5); //Give the Ethernet connection some time to set up
- Thread IRthread(IR_thread);
+ //Thread IRthread(IR_thread);
Thread Shiftbright(Shiftbright_thread);
Thread LCDthread(uLCD_thread);
//Thread LCD_CodeEnterThread(LCD_Code_Enter_Thread);
@@ -255,21 +266,67 @@
// while loop constantly checks if the entered code sequence is right or wrong,
// given that the correct amount of numbers were entered
- ////////////PC_Access.lock();
+ PC_Access.lock();
pc.printf("Ready\n\r");
- ////PC_Access.unlock();
+ PC_Access.unlock();
doorlock = 0; // make sure locked
while (1){
switch(state){
+ case Armed:
+
+
+
+
+
+
+
+
+
+
+
+ // while(1) {
+
+ if (state == Armed) {
+ IrVoltage=IrSensor.read();
+ if (IrVoltage <= 0.1) { //if value just nois reset timer
+ t.reset();
+ state = Armed;
+ //Ethernet_massage_Send("UpdateStatus");
+ }
+ if (t.read() >= 3) { //wait 5 seconds to make sure that sense someone
+ state = IR_sensed;
+ Ethernet_massage_Send("UpdateStatus");
+ }
+ // Thread::wait(2000);
+ }
+ else {
+ //nothing to do for this thread make space for others
+ // Thread::wait(2000);
+ }
+ //}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ break;
case Cleared:
break;
case IR_sensed:
if(codeCounter >= CODE_LENGTH){
pass = check_code_sequence(passcode);
if(pass == true){
- ////////////////////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("SENDING AUTHENTICATION CODE...\n\r");
- ////////PC_Access.unlock();
+ //PC_Access.unlock();
generate_random_code(authenticator);
t1.stop(); // reset the time
t1.reset(); // so that it is an even
@@ -278,11 +335,12 @@
//code_enabled = true;
state = Second_Step;
Ethernet_massage_Send("UpdateStatus");
+ Ethernet_massage_Send("TextCode");
}
else{
- ////////////////////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("WRONG passcode\n\r");
- ////PC_Access.unlock();
+ //PC_Access.unlock();
codeCounter = 0;
}
}
@@ -292,25 +350,26 @@
NumTry = 0;
pass = check_code_sequence(authenticator);
if(pass == true){
- ////////////////////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("ACCESS GRANTED\n\r");
- ////PC_Access.unlock();
- doorlock = 1;
- flipper.attach(&Activate_Lock, 5.0);
+ //PC_Access.unlock();
+
//wait(5);
//doorlock = 0;*/
//pc.printf("Resetting....\n\r");
//pc.printf("\n\n\rPlease Enter Your Personal Security Code\n\r");
codeCounter = 0;
- code_enabled = false;
+ //code_enabled = false;
state = Cleared;
Ethernet_massage_Send("TextCode");
Ethernet_massage_Send("UpdateStatus");
+ doorlock = 1;
+ flipper.attach(&Activate_Lock, 5.0);
}
else{
- ////////////////////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("ACCESS DENIED\n\r");
- ////PC_Access.unlock();
+ //PC_Access.unlock();
codeCounter = 0;
}
}
@@ -345,6 +404,7 @@
while(1) {
switch (state) {
case Armed:
+
for (int i = 0; i <= 50; i++) {
RGB_LED( i, 0, 0);
Thread::wait(10);
@@ -360,6 +420,8 @@
RGB_LED( 0, 0, 0);
break;
case Alarm_ON:
+ mySpeaker.PlaySong(note,duration);
+ //Thread::wait(2000);
for (int i = 0; i <= 100; i++) {
RGB_LED( i, i/2, 0);
Thread::wait(10);
@@ -392,15 +454,15 @@
state = Armed;
Ethernet_massage_Send("UpdateStatus");
}
- if (t.read() >= 5) { //wait 5 seconds to make sure that sense someone
+ if (t.read() >= 3) { //wait 5 seconds to make sure that sense someone
state = IR_sensed;
Ethernet_massage_Send("UpdateStatus");
}
- Thread::wait(1000);
+ Thread::wait(2000);
}
else {
//nothing to do for this thread make space for others
- Thread::wait(1000);
+ Thread::wait(2000);
}
}
}
@@ -463,6 +525,8 @@
LCD_Access.lock();
uLCD.text_width(4);
uLCD.text_height(4);
+ LCD_Access.unlock();
+ LCD_Access.lock();
uLCD.color(RED);
uLCD.locate(1,2);
uLCD.printf("%2D",i);
@@ -471,6 +535,9 @@
}
}
if (state == IR_sensed) {
+ LCD_Access.lock();
+ uLCD.cls();
+ LCD_Access.unlock();
state = Alarm_ON;
Ethernet_massage_Send("UpdateStatus");
Ethernet_massage_Send("TextAlarm");
@@ -552,7 +619,7 @@
while (1) {
if (state == Alarm_ON) {
mySpeaker.PlaySong(note,duration);
- Thread::wait(1000);
+ Thread::wait(2000);
}
}
}
@@ -573,20 +640,23 @@
TCPSocketConnection sock;
sock.connect("dreamphysix.com", 80);
char http_cmd[100] = "GET http://www.dreamphysix.com/alarm/readstatus.php?mbedID=0 HTTP/1.0\n\n";
- ////////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("%s",http_cmd);
- ////PC_Access.unlock();
+ //PC_Access.unlock();
+ Eth_Lock.lock();
sock.send_all(http_cmd, sizeof(http_cmd)-1);
-
+ Eth_Lock.unlock();
while (true) {
+ Eth_Lock.lock();
ret = sock.receive(buffer, sizeof(buffer)-1);
+ Eth_Lock.unlock();
if (ret <= 0)
break;
buffer[ret] = '\0';
Consul_Access.wait();
- ////////////////////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("Received %d chars from server:\n%s\n", ret, buffer);
- ////PC_Access.unlock();
+ //PC_Access.unlock();
Consul_Access.release();
}
sock.close();
@@ -601,7 +671,9 @@
//dummy = atoi(dummy);
state = (Statetype)dummy;
//state = (Statetype)buffer[found+7];
+ PC_Access.lock();
pc.printf("\n\state: %i\n\r",dummy);
+ PC_Access.unlock();
//Thread::wait(3000);
@@ -621,24 +693,33 @@
char http_cmd[100] = "GET http://www.dreamphysix.com/alarm/sendcode.php?authcode=0e9cae34a0&randomcode=";
strcat(http_cmd, charCode);
strcat(http_cmd, " HTTP/1.0\n\n");
- //////////////////////////PC_Access.lock();
- //pc.printf("%s",http_cmd);
- ////PC_Access.unlock();
+ PC_Access.lock();
+ pc.printf("%s",http_cmd);
+ PC_Access.unlock();
+ Eth_Lock.lock();
sock.send_all(http_cmd, sizeof(http_cmd)-1);
+ Eth_Lock.unlock();
}
else if (buff == "TextAlarm") {
char http_cmd[] = "GET http://dreamphysix.com/alarm/sendalert.php?authcode=0e9cae34a0 HTTP/1.0\n\n";
+ Eth_Lock.lock();
sock.send_all(http_cmd, sizeof(http_cmd)-1);
+ Eth_Lock.unlock();
+ PC_Access.lock();
+ pc.printf("%s",http_cmd);
+ PC_Access.unlock();
}
else if (buff == "GetTempCode") {
snprintf(charCode, sizeof(charCode), "%i%i%i%i ", inputCode[0], inputCode[2], inputCode[4], inputCode[6]);
char http_cmd[100] = "GET http://www.dreamphysix.com/alarm/validatecode.php?code=";
strcat(http_cmd, charCode);
strcat(http_cmd, " HTTP/1.0\n\n");
- //////////////////////////PC_Access.lock();
- //pc.printf("%s",http_cmd);
- ////PC_Access.unlock();
+ PC_Access.lock();
+ pc.printf("%s",http_cmd);
+ PC_Access.unlock();
+ Eth_Lock.lock();
sock.send_all(http_cmd, sizeof(http_cmd)-1);
+ Eth_Lock.unlock();
}
else if (buff == "UpdateStatus") {
char tempStatus[2];
@@ -648,10 +729,12 @@
strcat(http_cmd, "&status=");
strcat(http_cmd, tempStatus);
strcat(http_cmd, " HTTP/1.0\n\n");
- //////////////////////////PC_Access.lock();
- //pc.printf("%s",http_cmd);
- ////PC_Access.unlock();
+ PC_Access.lock();
+ pc.printf("%s",http_cmd);
+ PC_Access.unlock();
+ Eth_Lock.lock();
sock.send_all(http_cmd, sizeof(http_cmd)-1);
+ Eth_Lock.unlock();
}
else {
@@ -659,14 +742,16 @@
while (true) {
+ Eth_Lock.lock();
ret = sock.receive(buffer, sizeof(buffer)-1);
+ Eth_Lock.unlock();
if (ret <= 0)
break;
buffer[ret] = '\0';
Consul_Access.wait();
- ////////////////////////PC_Access.lock();
+ //PC_Access.lock();
//pc.printf("Received %d chars from server:\n%s\n", ret, buffer);
- ////PC_Access.unlock();
+ //PC_Access.unlock();
Consul_Access.release();
}
sock.close();
@@ -683,8 +768,9 @@
}
else {
//pc.printf("default ");
- return false;
+ return true;
}
+ Thread::wait(1000);
}
void Activate_Lock(){
