Libreria ultrasuoni

Dependents:   TextLCD_HelloWorld ES_4_P4

HCSR04.cpp

Committer:
Mattinico
Date:
2016-10-24
Revision:
0:f14a3481cfc3

File content as of revision 0:f14a3481cfc3:

#include "mbed.h"
#include "HCSR04.h"
 
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
    minDistance = 2;
    maxDistance = 400;
}
 
void HCSR04::startTimer() {
    timer.start(); // start the timer
}
 
void HCSR04::stopTimer() {
    timer.stop(); // stop the timer
}
 
void HCSR04::startMeasurement() {
    trigger = 1;
    wait_us(10);
    trigger = 0;
    wait_us(23660); // just enough time to measure 400 cm
    timer.stop(); // just in case echo fall did not occur
    distance = timer.read() * 1e6 / 58;
    if (distance < minDistance)
        distance = minDistance;
    if (distance > maxDistance)
        distance = maxDistance;
    timer.reset();
}
 
float HCSR04::getDistance_cm() {
    startMeasurement();
    return distance;
}
 
float HCSR04::getDistance_mm() {
    startMeasurement();
    return distance * 10;
}
 
void HCSR04::setRanges(float minRange, float maxRange) {
    if (minRange < maxRange) {
        if (minRange >= 2) 
            minDistance = minRange;
        if (maxRange <= 400)
            maxDistance = maxRange;
    }
}
 
float HCSR04::getMinRange() {
    return minDistance;
}
 
float HCSR04::getMaxRange() {
    return maxDistance;
}