Range Finder (Version 2) - Below 50cm, buzzer sounds, LED flashes for 5s, then alarm sounds until interrupted

Dependencies:   mbed

Fork of range_finder_2 by Arthur Spencer

Committer:
wadh4587
Date:
Tue Jun 14 14:34:22 2016 +0000
Revision:
2:fe61a5e4cdf5
Parent:
1:b3590ab2a8ae
When someone comes within 50cm, buzzer sounds once, LED flashes for 5s, then alarm sounds until interrupted.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wadh4587 1:b3590ab2a8ae 1 /* Arthur Spencer 14/06/16
wadh4587 1:b3590ab2a8ae 2 LV-MaxSonar-EZ1 Range Finder
wadh4587 2:fe61a5e4cdf5 3 When someone comes within 50cm, LED flashes for 5s, then buzzer sounds until interupted.
wadh4587 1:b3590ab2a8ae 4 */
shimniok 0:9dfac5da16a9 5 #include "mbed.h"
shimniok 0:9dfac5da16a9 6
wadh4587 1:b3590ab2a8ae 7 AnalogIn ain(A0); //Receives analogue signal from range finder
wadh4587 2:fe61a5e4cdf5 8 Serial pc(USBTX, USBRX);
wadh4587 2:fe61a5e4cdf5 9
wadh4587 2:fe61a5e4cdf5 10 PwmOut buzz(D2);
wadh4587 2:fe61a5e4cdf5 11 DigitalOut timer(D1);
wadh4587 2:fe61a5e4cdf5 12 int stop;
shimniok 0:9dfac5da16a9 13
wadh4587 2:fe61a5e4cdf5 14 void press_x() //Interrupt sequence
wadh4587 2:fe61a5e4cdf5 15 {
wadh4587 2:fe61a5e4cdf5 16 char c = pc.getc();
wadh4587 2:fe61a5e4cdf5 17 if(c == 'x') {
wadh4587 2:fe61a5e4cdf5 18 stop = 1;
wadh4587 2:fe61a5e4cdf5 19 pc.printf("Interrupt\n\r");
wadh4587 2:fe61a5e4cdf5 20 }
wadh4587 2:fe61a5e4cdf5 21 }
wadh4587 1:b3590ab2a8ae 22
wadh4587 1:b3590ab2a8ae 23 int main()
wadh4587 1:b3590ab2a8ae 24 {
wadh4587 2:fe61a5e4cdf5 25 float volts, distance, p, q;
wadh4587 2:fe61a5e4cdf5 26 buzz.period_ms(2);
wadh4587 2:fe61a5e4cdf5 27 timer = 0;
wadh4587 2:fe61a5e4cdf5 28 buzz = 0;
wadh4587 2:fe61a5e4cdf5 29 stop = 0;
wadh4587 2:fe61a5e4cdf5 30 pc.attach(&press_x);
wadh4587 1:b3590ab2a8ae 31 while (1) {
wadh4587 2:fe61a5e4cdf5 32 if (stop == 0) {
wadh4587 2:fe61a5e4cdf5 33 volts = ain.read();
wadh4587 2:fe61a5e4cdf5 34 distance = volts*1000; //cm
wadh4587 2:fe61a5e4cdf5 35 wait(0.5);
wadh4587 2:fe61a5e4cdf5 36 if (distance > 50) {
wadh4587 2:fe61a5e4cdf5 37 timer = 0;
wadh4587 2:fe61a5e4cdf5 38 buzz = 0;
wadh4587 2:fe61a5e4cdf5 39 wait(0.2);
wadh4587 2:fe61a5e4cdf5 40 } else {
wadh4587 2:fe61a5e4cdf5 41 for( p = 0.0f; p < 0.4; p += 0.1) { //Initial buzz
wadh4587 2:fe61a5e4cdf5 42 if(p<0.2) {
wadh4587 2:fe61a5e4cdf5 43 buzz = 0.5;
wadh4587 2:fe61a5e4cdf5 44 wait(0.1);
wadh4587 2:fe61a5e4cdf5 45 } else {
wadh4587 2:fe61a5e4cdf5 46 buzz = 0;
wadh4587 2:fe61a5e4cdf5 47 wait(0.1);
wadh4587 2:fe61a5e4cdf5 48 }
wadh4587 2:fe61a5e4cdf5 49 }
wadh4587 2:fe61a5e4cdf5 50 for( p = 0; p < 10; p++) { //5s LED timer
wadh4587 2:fe61a5e4cdf5 51 timer = !timer;
wadh4587 2:fe61a5e4cdf5 52 wait(0.5);
wadh4587 2:fe61a5e4cdf5 53 }
wadh4587 2:fe61a5e4cdf5 54 for( q = 0; q < 60; q += 1) { //Alarm
wadh4587 2:fe61a5e4cdf5 55 if (stop == 0) {
wadh4587 2:fe61a5e4cdf5 56 for( p = 0.0f; p < 0.5; p += 0.1) {
wadh4587 2:fe61a5e4cdf5 57 if(p<0.25) {
wadh4587 2:fe61a5e4cdf5 58 buzz = 0.5;
wadh4587 2:fe61a5e4cdf5 59 wait(0.05);
wadh4587 2:fe61a5e4cdf5 60 } else {
wadh4587 2:fe61a5e4cdf5 61 buzz = 0;
wadh4587 2:fe61a5e4cdf5 62 wait(0.05);
wadh4587 2:fe61a5e4cdf5 63 }
wadh4587 2:fe61a5e4cdf5 64 }
wadh4587 2:fe61a5e4cdf5 65 } else {
wadh4587 2:fe61a5e4cdf5 66 buzz = 0, timer = 0;
wadh4587 2:fe61a5e4cdf5 67 }
wadh4587 2:fe61a5e4cdf5 68 }
wadh4587 2:fe61a5e4cdf5 69 }
wadh4587 1:b3590ab2a8ae 70 } else {
wadh4587 1:b3590ab2a8ae 71 }
shimniok 0:9dfac5da16a9 72 }
wadh4587 1:b3590ab2a8ae 73 }