Martin Simpson
/
Nucleo_SFR05_SFR04
Program with explinations for ease of use of these Ultra-Sonic sensors to give mm resolution
Diff: main.cpp
- Revision:
- 0:2b4e5d360246
- Child:
- 1:221a6fd3d62f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Mon Oct 17 10:15:28 2016 +0000 @@ -0,0 +1,43 @@ +/* + Simple Program to use SFR05 or SFR04 in Single Pin Mode + Divide by 5.8 to give mm resolution from microseconds read of Echo pulse + Version 1.0a + M.Simpson 17/10/2016 +*/ +#include "mbed.h" + +DigitalInOut TriggerEcho(D8); //Instance of the DigitalInOut class called 'TriggerEcho' + +Timer pulse; //Instance of the Timer class called 'pulse' + +float GetDistance(); //Function Prototype + +int main() { + float Distance; //Assign a local variable for the main function + pulse.start(); //Start the instance of the class timer + + while(true) //Continuous loop always true + { + Distance=GetDistance(); //Get the value returned from the function GetDistance() + printf("Distance %.0fmm\n\r",Distance); //Send the value to the serial port for monitoring purposes + wait_ms(250); //Wait for 250ms + } +} + +float GetDistance(){ //Function Name to be called + int EchoPulseWidth=0,EchoStart=0,EchoEnd=0; //Assign and set to zero the local variables for this function + TriggerEcho.output(); //Make the DigitalInOut an Output to drive a signal + TriggerEcho.write(1); //Signal goes High i.e. 3V3 + wait_us(100); //Wait 100us to give a pulse width + TriggerEcho.write(0); //Signal goes Low i.e. 0V + TriggerEcho.input(); //Make the DigitalInOut an INPUT to accept a signal + pulse.reset(); //Rest the instance of the Timer Class + while(TriggerEcho.read()==0&&EchoStart<25000){ //wait for Echo to go high + EchoStart=pulse.read_us(); //AND with timeout to prevent blocking! + } + while(TriggerEcho.read()==1&&(EchoEnd-EchoStart<25000)){ //wait for echo to return low + EchoEnd=pulse.read_us(); //or'd with timeout to prevent blocking! + } + EchoPulseWidth=EchoEnd-EchoStart; //time period in us + return (float)EchoPulseWidth/5.8f; //calculate distance in mm and reurn the value as a float +} \ No newline at end of file