Two HC-SR04 based security system using FRDM-K64F board.
Dependencies: mbed FXOS8700 FXAS21002 mbed-rtos EthernetInterface jsonlite M2XStreamClient
main.cpp
- Committer:
- amasudch
- Date:
- 2019-12-16
- Revision:
- 2:a52795efd2e8
- Parent:
- 1:5e587e213940
File content as of revision 2:a52795efd2e8:
#include "mbed.h" #include "M2XStreamClient.h" #include "EthernetInterface.h" //Sonar 1 PinOuts DigitalOut trigger1(PTA1); DigitalOut trigger2(PTA2); //Sonar 2 PinOuts DigitalIn echo1(PTB9); DigitalIn echo2(PTB23); Timer sonar1, sonar2, loop_timer; // Initialize Serial port Serial pc(USBTX, USBRX); // Set Sensor Stream details char deviceId[] = "f2f53c114b0b1707ff849d387f173d17"; // Device you want to push to char streamTrig_1[] = "Trigger_from_sensor_1"; // Stream you want to push to char streamTrig_2[] = "Trigger_from_sensor_2"; // Stream you want to push to char m2xKey[] = "9464d9e65f761bc5511bc085333a522b"; // Your M2X API Key or Master API Key //Variable Declaration int distance1_current = 0; int distance1_previous = 0; int correction1 = 0; int distance2_current = 0; int distance2_previous = 0; int correction2 = 0; int change_in_distance1; int change_in_distance2; int loop_time; int sensitivity_threshold; //function declaration int sonar1_correction(); int sonar1_distance(int correction1); int sonar2_correction(); int sonar2_distance(int correction1); //Functions int sonar1_distance(int correction1){ trigger1 = 1; sonar1.reset(); wait_us(10.0); trigger1 = 0; //wait for echo1 high while (echo1==0) {}; //echo1 high, so start timer sonar1.start(); //wait for echo1 low while (echo1==1) {}; //stop timer and read value sonar1.stop(); //subtract software overhead timer delay and scale to cm distance1_current = (sonar1.read_us()-correction1)/58.0; return distance1_current; } int sonar2_distance(int correction2){ trigger2 = 1; sonar2.reset(); wait_us(10.0); trigger2 = 0; //wait for echo1 high while (echo2==0) {}; //echo1 high, so start timer sonar2.start(); //wait for echo1 low while (echo2==1) {}; //stop timer and read value sonar2.stop(); //subtract software overhead timer delay and scale to cm distance2_current = (sonar2.read_us()-correction2)/58.0; return distance2_current; } int sonar1_correction(){ // measure actual software polling timer delays FOR SONAR 1 // delay used later in time correction1 // start timer sonar1.start(); // min software polling delay to read echo pin while (echo1==2) {}; // stop timer sonar1.stop(); // read timer correction1 = sonar1.read_us(); //printf("Approximate software overhead timer delay is %d uS\n\r",correction1); return correction1; } int sonar2_correction(){ // measure actual software polling timer delays FOR SONAR 1 // delay used later in time correction1 // start timer sonar2.start(); // min software polling delay to read echo pin while (echo2==2) {}; // stop timer sonar2.stop(); // read timer correction2 = sonar2.read_us(); return correction2; } int main() { // Intialize Ethernet connection EthernetInterface eth; eth.init(); eth.connect(); printf("Success. Connected!. Device IP Address is %s\r\n", eth.getIPAddress()); // Initialize the M2X client Client client; M2XStreamClient m2xClient(&client, m2xKey); int ret; correction1 = sonar1_correction(); correction2 = sonar2_correction(); // Initialize Sensors distance1_previous = sonar1_distance(correction1); distance2_previous = sonar2_distance(correction1); sensitivity_threshold = 15; while(1){ loop_timer.reset(); loop_timer.start(); distance1_current = sonar1_distance(correction1); distance2_current = sonar2_distance(correction1); change_in_distance1=abs(distance1_current-distance1_previous); change_in_distance2=abs(distance2_current-distance2_previous); printf("correction1: %d , distance1: %d \n\r", correction1, distance1_current); printf("Change in distance for sensor 1 = %d\n\r", change_in_distance1); if(change_in_distance1 > sensitivity_threshold){ printf("Sensor 1 is triggered.\n\r"); printf("send() returned %d\r\n", ret); ret = m2xClient.updateStreamValue(deviceId, streamTrig_1, distance1_current); wait(2.0); } printf("correction2: %d , distance2: %d \n\r", correction2, distance2_current); printf("Change in distance for sensor 2 = %d\n\r", change_in_distance2); if(change_in_distance2 > sensitivity_threshold){ printf("Sensor 2 is triggered.\n\r"); printf("send() returned %d\r\n", ret); ret = m2xClient.updateStreamValue(deviceId, streamTrig_2, distance2_current); wait(2.0); } distance1_previous=distance1_current; distance2_previous=distance2_current; loop_timer.stop(); loop_time=loop_timer.read_us(); printf("Loop time = %d us\n\r", loop_time); printf("\n"); } }