test of us sensor

Dependencies:   HC_SR04_Ultrasonic_Library mbed

Fork of Nucleo_UltrasonicHelloWorld by EJ Teb

Committer:
fjwats
Date:
Fri Feb 09 16:22:57 2018 +0000
Revision:
2:174ac1a5a658
Parent:
1:4a5586eb1765
testHCSR04 us sensor

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ejteb 0:1704ea055c4f 1 #include "mbed.h"
fjwats 2:174ac1a5a658 2
fjwats 2:174ac1a5a658 3 DigitalOut trigger(p13);
fjwats 2:174ac1a5a658 4 DigitalOut myled(LED1); //monitor trigger
fjwats 2:174ac1a5a658 5 DigitalOut myled2(LED2); //monitor echo
fjwats 2:174ac1a5a658 6 DigitalOut myled3(LED3);
fjwats 2:174ac1a5a658 7 DigitalOut myled4(LED4);
fjwats 2:174ac1a5a658 8 DigitalIn echo(p14);
fjwats 2:174ac1a5a658 9 int distance = 0;
fjwats 2:174ac1a5a658 10 int correction = 0;
fjwats 2:174ac1a5a658 11 Timer sonar;
fjwats 2:174ac1a5a658 12
ejteb 0:1704ea055c4f 13 int main()
ejteb 0:1704ea055c4f 14 {
fjwats 2:174ac1a5a658 15 sonar.reset();
fjwats 2:174ac1a5a658 16 // measure actual software polling timer delays
fjwats 2:174ac1a5a658 17 // delay used later in time correction
fjwats 2:174ac1a5a658 18 // start timer
fjwats 2:174ac1a5a658 19 sonar.start();
fjwats 2:174ac1a5a658 20 // min software polling delay to read echo pin
fjwats 2:174ac1a5a658 21 while (echo==2) {};
fjwats 2:174ac1a5a658 22 myled2 = 0;
fjwats 2:174ac1a5a658 23 // stop timer
fjwats 2:174ac1a5a658 24 sonar.stop();
fjwats 2:174ac1a5a658 25 // read timer
fjwats 2:174ac1a5a658 26 correction = sonar.read_us();
fjwats 2:174ac1a5a658 27 printf("Approximate software overhead timer delay is %d uS\n\r",correction);
fjwats 2:174ac1a5a658 28
fjwats 2:174ac1a5a658 29 //Loop to read Sonar distance values, scale, and print
fjwats 2:174ac1a5a658 30 while(1) {
fjwats 2:174ac1a5a658 31 // trigger sonar to send a ping
fjwats 2:174ac1a5a658 32 trigger = 1;
fjwats 2:174ac1a5a658 33 myled = 1;
fjwats 2:174ac1a5a658 34 myled2 = 0;
fjwats 2:174ac1a5a658 35 sonar.reset();
fjwats 2:174ac1a5a658 36 wait_us(10.0);
fjwats 2:174ac1a5a658 37 trigger = 0;
fjwats 2:174ac1a5a658 38 myled = 0;
fjwats 2:174ac1a5a658 39 //wait for echo high
fjwats 2:174ac1a5a658 40 while (echo==0) {};
fjwats 2:174ac1a5a658 41 myled2=echo;
fjwats 2:174ac1a5a658 42 //echo high, so start timer
fjwats 2:174ac1a5a658 43 sonar.start();
fjwats 2:174ac1a5a658 44 //wait for echo low
fjwats 2:174ac1a5a658 45 while (echo==1) {};
fjwats 2:174ac1a5a658 46 //stop timer and read value
fjwats 2:174ac1a5a658 47 sonar.stop();
fjwats 2:174ac1a5a658 48 //subtract software overhead timer delay and scale to cm
fjwats 2:174ac1a5a658 49 distance = (sonar.read_us()-correction)/58.0;
fjwats 2:174ac1a5a658 50 myled2 = 0;
fjwats 2:174ac1a5a658 51 printf(" %d cm \n\r",distance);
fjwats 2:174ac1a5a658 52
fjwats 2:174ac1a5a658 53 if (distance<10) {
fjwats 2:174ac1a5a658 54 myled3= 1;
fjwats 2:174ac1a5a658 55 }
fjwats 2:174ac1a5a658 56 if (distance>=10) {
fjwats 2:174ac1a5a658 57 myled4= 1;
fjwats 2:174ac1a5a658 58 }
fjwats 2:174ac1a5a658 59
fjwats 2:174ac1a5a658 60
fjwats 2:174ac1a5a658 61 //wait so that any echo(s) return before sending another ping
fjwats 2:174ac1a5a658 62 wait(0.2);
fjwats 2:174ac1a5a658 63 myled3 = myled4 = 0;
ejteb 0:1704ea055c4f 64 }
fjwats 2:174ac1a5a658 65 }