A program that demonstrates the development of library, using as an example an ultrasonic distance sensor HC-SR04.
Dependencies: mbed HCSR04 AutomationElements
main.cpp
- Committer:
- tbjazic
- Date:
- 2015-12-04
- Revision:
- 1:22043b67c31c
- Parent:
- 0:ebee649c5b1b
- Child:
- 2:f86b1e3609b3
File content as of revision 1:22043b67c31c:
/** Revision 1: Building the class */ #include "mbed.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) { /** Print the result in cm to the terminal with 1 decimal place * (number 5 after % means that total of 5 digits will be reserved * for printing the number, including the dot and one decimal place). */ pc.printf("Distance: %5.1f cm\r", sensor.getDistance_cm()); wait_ms(1000-25); } }