Proximity alarm with flags to stop the buzzer or reset the range finder
Dependencies: mbed
Fork of SerialPassthroughcjsESP8266 by
main.cpp@11:dc1b30349116, 2016-06-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |