Lab 3 part 3 sonaar and timer

Dependencies:   mbed

Committer:
logostarr
Date:
Fri Sep 30 19:36:04 2022 +0000
Revision:
0:8f4753d3b870
stuff

Who changed what in which revision?

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