Proximity alarm with flags to stop the buzzer or reset the range finder

Dependencies:   mbed

Fork of SerialPassthroughcjsESP8266 by 'SmOuse'

Committer:
wadh4587
Date:
Fri Jun 17 12:18:35 2016 +0000
Revision:
11:dc1b30349116
Parent:
10:f7a48cc24892
proximity buzzer with wifi link (client)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wadh4587 11:dc1b30349116 1 /*Arthur Spencer
wadh4587 11:dc1b30349116 2 Code for KL25Z mbed using MaxSonar-EZ1 range finder and ESP8266 wifi device
cstevens 7:d78ed22a787d 3 */
mbedAustin 0:59bec1fd956e 4 #include "mbed.h"
mbedAustin 2:a8dcb07a1d00 5
wadh4587 11:dc1b30349116 6 AnalogIn ain(A0); //Proximity analogue signal
wadh4587 11:dc1b30349116 7 PwmOut buzz(D6); //Alarm
wadh4587 11:dc1b30349116 8 DigitalOut timer(D7); //LED proximity indicator
wadh4587 11:dc1b30349116 9 InterruptIn push(PTA5); //Reste button
wadh4587 11:dc1b30349116 10 int stop;
wadh4587 11:dc1b30349116 11 //int data;
wadh4587 11:dc1b30349116 12
wadh4587 11:dc1b30349116 13 Serial pc(USBTX, USBRX); //erial terminal for the pc connection
wadh4587 11:dc1b30349116 14 Serial dev(PTE0,PTE1); //tx & rx for the wifi device
wadh4587 11:dc1b30349116 15 DigitalOut led1(LED1);
wadh4587 11:dc1b30349116 16 DigitalOut led2(LED2);
wadh4587 11:dc1b30349116 17 DigitalOut led3(LED3);
wadh4587 11:dc1b30349116 18 DigitalOut rst(PTD7); //esp8266 reset line
wadh4587 11:dc1b30349116 19
mbedAustin 2:a8dcb07a1d00 20
cstevens 7:d78ed22a787d 21 // subroutine to run anytime a serial interrupt arrives from the device
wadh4587 11:dc1b30349116 22 // passes everything thatthe device produces on to the pc terminal screen
sam_grove 5:96cb82af9996 23 void dev_recv()
mbedAustin 2:a8dcb07a1d00 24 {
sam_grove 5:96cb82af9996 25 while(dev.readable()) {
sam_grove 5:96cb82af9996 26 pc.putc(dev.getc());
wadh4587 10:f7a48cc24892 27 wait_us(1);
sam_grove 5:96cb82af9996 28 }
sam_grove 5:96cb82af9996 29 }
wadh4587 11:dc1b30349116 30
cstevens 7:d78ed22a787d 31 // subroutine to service the serial interrupt on the pc connection
wadh4587 11:dc1b30349116 32 // this takes what the usb sends on the pc and copies it on to the device
wadh4587 11:dc1b30349116 33 // this also detects the end of command character which is ascii 13 (0x0d) adn adds a linefeed after it = asscii 10 (0x0a)
sam_grove 5:96cb82af9996 34 void pc_recv()
sam_grove 5:96cb82af9996 35 {
cstevens 6:dc4c165f6b53 36 char c;
sam_grove 5:96cb82af9996 37 while(pc.readable()) {
wadh4587 10:f7a48cc24892 38 c = pc.getc();
cstevens 6:dc4c165f6b53 39 dev.putc(c);
wadh4587 10:f7a48cc24892 40 if(c==13) {
wadh4587 10:f7a48cc24892 41 dev.putc(10); // send the linefeed to complement the carriage return generated by return key on the pc
wadh4587 10:f7a48cc24892 42 pc.putc(10);
wadh4587 10:f7a48cc24892 43 }
mbedAustin 0:59bec1fd956e 44 }
mbedAustin 0:59bec1fd956e 45 }
mbedAustin 4:ba9100d52e48 46
wadh4587 11:dc1b30349116 47 //Interrupt sequence to receive the 'safe' flag ('x') from the wifi link and stop the alarm
wadh4587 11:dc1b30349116 48 void safe()
wadh4587 11:dc1b30349116 49 {
wadh4587 11:dc1b30349116 50 char i = dev.getc();
wadh4587 11:dc1b30349116 51 if(i == 'x') {
wadh4587 11:dc1b30349116 52 buzz = 0, timer = 0;
wadh4587 11:dc1b30349116 53 stop = 1;
wadh4587 11:dc1b30349116 54 //pc.printf("Alarm off\n\r");
wadh4587 11:dc1b30349116 55 led2 = 0, led1 = 1, led3 = 1;
wadh4587 11:dc1b30349116 56 //dev.printf("AT+CIPSEND=2,13\r\n");
wadh4587 11:dc1b30349116 57 //wait(0.05);
wadh4587 11:dc1b30349116 58 //dev.printf("Alarm Off\n\r \n\r");
wadh4587 11:dc1b30349116 59 //wait(0.05);
wadh4587 11:dc1b30349116 60 /* if (data == 0) {
wadh4587 11:dc1b30349116 61 dev.printf("AT+CIPSEND=3,1\r\n");
wadh4587 11:dc1b30349116 62 wait(2);
wadh4587 11:dc1b30349116 63 dev.printf("Q\r\n");
wadh4587 11:dc1b30349116 64 wait(2);
wadh4587 11:dc1b30349116 65 data = 1;
wadh4587 11:dc1b30349116 66 }*/
wadh4587 11:dc1b30349116 67 } else {
wadh4587 11:dc1b30349116 68 pc.putc(i);
wadh4587 11:dc1b30349116 69 /* if (i == 'w') { //Alternative sequence if action is to be taken when an intruder attempts to enter
wadh4587 11:dc1b30349116 70 stop = 0;
wadh4587 11:dc1b30349116 71 //pc.printf("INTRUDER\n\r");
wadh4587 11:dc1b30349116 72 dev.printf("AT+CIPSEND=2,12\r\n");
wadh4587 11:dc1b30349116 73 wait(0.05);
wadh4587 11:dc1b30349116 74 dev.printf("INTRUDER\n\r \n\r");
wadh4587 11:dc1b30349116 75 wait(0.05);
wadh4587 11:dc1b30349116 76 //data = 1;
wadh4587 11:dc1b30349116 77 } else {
wadh4587 11:dc1b30349116 78 pc.putc(i);
wadh4587 11:dc1b30349116 79 }*/
wadh4587 11:dc1b30349116 80 }
wadh4587 11:dc1b30349116 81 }
wadh4587 11:dc1b30349116 82
wadh4587 11:dc1b30349116 83
wadh4587 11:dc1b30349116 84 //Interrupt sequence to reset the alarm when the push button is pressed
wadh4587 11:dc1b30349116 85 void activate()
wadh4587 11:dc1b30349116 86 {
wadh4587 11:dc1b30349116 87 stop = 0;
wadh4587 11:dc1b30349116 88 //dev.printf("AT+CIPSEND=2,13\r\n");
wadh4587 11:dc1b30349116 89 //wait(0.05);
wadh4587 11:dc1b30349116 90 //dev.printf("Alarm Set\n\r \n\r");
wadh4587 11:dc1b30349116 91 //wait(0.05);
wadh4587 11:dc1b30349116 92 //pc.printf("Alarm Set\n\r");
wadh4587 11:dc1b30349116 93 /* if (data == 1) {
wadh4587 11:dc1b30349116 94 dev.printf("AT+CIPSEND=3,1\r\n");
wadh4587 11:dc1b30349116 95 wait(2);
wadh4587 11:dc1b30349116 96 dev.printf("Q\r\n");
wadh4587 11:dc1b30349116 97 wait(2);
wadh4587 11:dc1b30349116 98 data = 0;
wadh4587 11:dc1b30349116 99 }*/
wadh4587 11:dc1b30349116 100 led1 = 1, led2 = 1, led3 = 0;
wadh4587 11:dc1b30349116 101 wait(1);
wadh4587 11:dc1b30349116 102 }
wadh4587 11:dc1b30349116 103
wadh4587 11:dc1b30349116 104 //Main sequence
mbedAustin 4:ba9100d52e48 105 int main()
mbedAustin 4:ba9100d52e48 106 {
wadh4587 11:dc1b30349116 107 float volts, distance, p, q;
wadh4587 11:dc1b30349116 108 buzz.period_ms(2);
wadh4587 11:dc1b30349116 109 timer = 0;
wadh4587 11:dc1b30349116 110 buzz = 0;
wadh4587 11:dc1b30349116 111 stop = 0;
wadh4587 11:dc1b30349116 112 led3 = 1;
wadh4587 11:dc1b30349116 113 led2 = 1;
wadh4587 11:dc1b30349116 114 led1 = 0;
wadh4587 11:dc1b30349116 115 //data = 0;
wadh4587 11:dc1b30349116 116
wadh4587 10:f7a48cc24892 117 pc.baud(115200);
wadh4587 10:f7a48cc24892 118 dev.baud(115200);
wadh4587 11:dc1b30349116 119 rst = 0;
cstevens 6:dc4c165f6b53 120 wait(1);
wadh4587 10:f7a48cc24892 121 rst = 1; // send the esp8266 reset
cstevens 6:dc4c165f6b53 122 wait(1);
mbedAustin 4:ba9100d52e48 123
wadh4587 11:dc1b30349116 124 pc.attach(&pc_recv, Serial::RxIrq); // attach the two wifi interrupt services
sam_grove 5:96cb82af9996 125 dev.attach(&dev_recv, Serial::RxIrq);
wadh4587 11:dc1b30349116 126
wadh4587 11:dc1b30349116 127 //wifi setup
wadh4587 11:dc1b30349116 128 dev.printf("AT+RST\r\n");
wadh4587 11:dc1b30349116 129 wait(10);
wadh4587 11:dc1b30349116 130 dev.printf("AT+CWJAP=\"BTHub3-WXWX\",\"fdd6f7c682\"\r\n");
wadh4587 11:dc1b30349116 131 wait(10);
wadh4587 11:dc1b30349116 132 dev.printf("AT+CIPMUX=1\r\n");
wadh4587 11:dc1b30349116 133 wait(2);
wadh4587 11:dc1b30349116 134 dev.printf("AT+CIPSTART=2,\"TCP\",\"192.168.1.95\",333\r\n");
wadh4587 11:dc1b30349116 135 wait(2);
wadh4587 11:dc1b30349116 136
wadh4587 11:dc1b30349116 137 led3 = 0, led2 = 1, led1 = 1;
wadh4587 11:dc1b30349116 138
wadh4587 11:dc1b30349116 139 dev.attach(&safe); // attach the flag interrupt sequences
wadh4587 11:dc1b30349116 140 push.rise(&activate);
wadh4587 10:f7a48cc24892 141
mbedAustin 4:ba9100d52e48 142 while(1) {
wadh4587 11:dc1b30349116 143 if (stop == 0) {
wadh4587 11:dc1b30349116 144 volts = ain.read();
wadh4587 11:dc1b30349116 145 distance = volts*1000; //distance /cm
wadh4587 11:dc1b30349116 146 wait(0.5);
wadh4587 11:dc1b30349116 147 if (distance > 50) {
wadh4587 11:dc1b30349116 148 timer = 0;
wadh4587 11:dc1b30349116 149 buzz = 0;
wadh4587 11:dc1b30349116 150 wait(0.2);
wadh4587 11:dc1b30349116 151 } else {
wadh4587 11:dc1b30349116 152 for( p = 0.0f; p < 0.4; p += 0.1) { //Initial buzz to indicate proximity sensor has detected someone
wadh4587 11:dc1b30349116 153 if(p<0.2) {
wadh4587 11:dc1b30349116 154 buzz = 0.5;
wadh4587 11:dc1b30349116 155 wait(0.1);
wadh4587 11:dc1b30349116 156 } else {
wadh4587 11:dc1b30349116 157 buzz = 0;
wadh4587 11:dc1b30349116 158 wait(0.1);
wadh4587 11:dc1b30349116 159 }
wadh4587 11:dc1b30349116 160 }
wadh4587 11:dc1b30349116 161 for( p = 0; p < 10; p++) { //5s LED timer
wadh4587 11:dc1b30349116 162 timer = !timer;
wadh4587 11:dc1b30349116 163 wait(0.5);
wadh4587 11:dc1b30349116 164 }
wadh4587 11:dc1b30349116 165 if (stop ==0) {
wadh4587 11:dc1b30349116 166 //dev.printf("AT+CIPSEND=2,9\r\n");
wadh4587 11:dc1b30349116 167 //wait(0.05);
wadh4587 11:dc1b30349116 168 //dev.printf("Alarm\n\r \n\r");
wadh4587 11:dc1b30349116 169 //wait(0.05);
wadh4587 11:dc1b30349116 170 }
wadh4587 11:dc1b30349116 171 for( q = 0; q < 1000; q += 1) { //Alarm
wadh4587 11:dc1b30349116 172 if (stop == 0) {
wadh4587 11:dc1b30349116 173 led1 = 0;
wadh4587 11:dc1b30349116 174 led2 = 1, led3 = 1;
wadh4587 11:dc1b30349116 175 for( p = 0.0f; p < 0.5; p += 0.1) {
wadh4587 11:dc1b30349116 176 led1 = !led1;
wadh4587 11:dc1b30349116 177 if(p<0.25) {
wadh4587 11:dc1b30349116 178 buzz = 0.5;
wadh4587 11:dc1b30349116 179 wait(0.05);
wadh4587 11:dc1b30349116 180 } else {
wadh4587 11:dc1b30349116 181 buzz = 0;
wadh4587 11:dc1b30349116 182 wait(0.05);
wadh4587 11:dc1b30349116 183 }
wadh4587 11:dc1b30349116 184 }
wadh4587 11:dc1b30349116 185 } else {
wadh4587 11:dc1b30349116 186 buzz = 0, timer = 0;
wadh4587 11:dc1b30349116 187 led1 = 1, led3 = 1;
wadh4587 11:dc1b30349116 188 led2 = 0;
wadh4587 11:dc1b30349116 189 }
wadh4587 11:dc1b30349116 190 }
wadh4587 11:dc1b30349116 191 }
wadh4587 11:dc1b30349116 192 } else {
wadh4587 11:dc1b30349116 193 buzz = 0;
wadh4587 11:dc1b30349116 194 timer = 0;
wadh4587 11:dc1b30349116 195 }
mbedAustin 4:ba9100d52e48 196 }
wadh4587 10:f7a48cc24892 197 }