A program that demonstrates the development of library, using as an example an ultrasonic distance sensor HC-SR04.

Dependencies:   mbed HCSR04 AutomationElements

The purpose of this program is to encourage students to develope their own classes. Instructions how to follow the development of this program and class HCSR04 for ultrasonic distance measurement are given here.

Revision:
5:889566fb3a85
Parent:
4:052ac3f5c938
--- a/main.cpp	Mon Dec 07 10:44:07 2015 +0000
+++ b/main.cpp	Mon Dec 07 11:45:44 2015 +0000
@@ -5,28 +5,45 @@
 Serial pc(USBTX, USBRX);
 HCSR04 sensor(p5, p7);
 float sampleTime = 0.1;
-PT1 filter(1, 2, sampleTime);
-Ticker ticker;
-float distance;
-float filteredDistance; 
-DigitalOut led1(LED1);
+PT1 filter(1, 2, sampleTime); // filter with a time constant of 2 seconds
+float distance = 0;
+float filteredDistance = 0; 
+Timer timer;
 
-void calc() {
-    led1 = 1;
+int main() {
+    sensor.setRanges(4, 400);
+    pc.printf("Minimum sensor range = %g cm\n\rMaximum sensor range = %g cm\n\r", sensor.getMinRange(), sensor.getMaxRange());
+    pc.printf("Sensor:       Filtered:\n\r");
+    
+    timer.start();
     distance = sensor.getDistance_mm();
+    timer.stop();
+    int time1 = timer.read_us();
+    pc.printf("Time to get distance: %d us \n\r", time1);
+    timer.reset();
+    
+    timer.start();
     filter.in(distance);
     filteredDistance = filter.out();
+    timer.stop();
+    int time2 = timer.read_us();
+    pc.printf("Time to filter result: %d us \n\r", time2);
+    timer.reset();
+    
+    timer.start();
     pc.printf("%7.1f mm  %7.1f mm  \r", distance, filteredDistance);
-    led1 = 0;
-}
-
-int main() {
-    sensor.setRanges(10, 110);
-    pc.printf("Minimum sensor range = %g cm\n\rMaximum sensor range = %g cm\n\r", sensor.getMinRange(), sensor.getMaxRange());
+    timer.stop();
+    int time3 = timer.read_us();
+    pc.printf("Time to printf one line: %d us \n\r", time3);
+    timer.reset();
+    
     pc.printf("Sensor:       Filtered:\n\r");
-    ticker.attach(&calc, sampleTime);
     
     while(1) {
-        wait_ms(500);
+        distance = sensor.getDistance_mm();
+        filter.in(distance);
+        filteredDistance = filter.out();
+        pc.printf("%7.1f mm  %7.1f mm  \r", distance, filteredDistance);
+        wait_us(sampleTime*1e6 - time1 - time2 - time3);
     }
 }
\ No newline at end of file