A program that demonstrates the development of library, using as an example an ultrasonic distance sensor HC-SR04.
Dependencies: mbed HCSR04 AutomationElements
Diff: main.cpp
- Revision:
- 2:f86b1e3609b3
- Parent:
- 1:22043b67c31c
- Child:
- 3:3297ea6e3ae1
diff -r 22043b67c31c -r f86b1e3609b3 main.cpp --- a/main.cpp Fri Dec 04 17:38:02 2015 +0000 +++ b/main.cpp Sat Dec 05 09:07:15 2015 +0000 @@ -1,88 +1,10 @@ -/** Revision 1: Building the class */ +/** Revision 2: Separating the class declaration, implementation and main() function into files. */ #include "mbed.h" +#include "HCSR04.h" Serial pc(USBTX, USBRX); // communication with terminal -class HCSR04 { - - public: - - /** Receives two PinName variables. - * @param echoPin mbed pin to which the echo signal is connected to - * @param triggerPin mbed pin to which the trigger signal is connected to - */ - HCSR04(PinName echoPin, PinName triggerPin); - - /** Calculates the distance in cm, with the calculation time of 25 ms. - * @returns distance of the measuring object in cm. - */ - float getDistance_cm(); - - private: - - InterruptIn echo; // echo pin - DigitalOut trigger; // trigger pin - Timer timer; // echo pulsewidth measurement - float distance; // store the distance in cm - - /** Start the timer. */ - void startTimer(); - - /** Stop the timer. */ - void stopTimer(); - - /** Initialization. */ - void init(); - - /** Start the measurement. */ - void startMeasurement(); -}; - - -HCSR04::HCSR04(PinName echoPin, PinName triggerPin) : echo(echoPin), trigger(triggerPin) { - init(); -} - -void HCSR04::init() { - /** configure the rising edge to start the timer */ - echo.rise(this, &HCSR04::startTimer); - - /** configure the falling edge to stop the timer */ - echo.fall(this, &HCSR04::stopTimer); - - distance = -1; // initial distance -} - -void HCSR04::startTimer() { - timer.start(); // start the timer -} - -void HCSR04::stopTimer() { - timer.stop(); // stop the timer -} - -void HCSR04::startMeasurement() { - /** Start the measurement by sending the 10us trigger pulse. */ - trigger = 1; - wait_us(10); - trigger = 0; - - /** Wait for the sensor to finish measurement (generate rise and fall interrupts). - * Minimum wait time is determined by maximum measurement distance of 400 cm. - * t_min = 400 * 58 = 23200 us = 23.2 ms */ - wait_ms(25); - - /** calculate the distance in cm */ - distance = timer.read() * 1e6 / 58; - timer.reset(); // reset the timer to 0 after storing the distance -} - -float HCSR04::getDistance_cm() { - startMeasurement(); - return distance; -} - int main() { HCSR04 sensor(p5, p7); // instantiate the sensor object while(1) {