Ultrasound Ranging Sensor module
Dependents: Lets_move_Seki2018_ver2 Lets_move_Seki2018_null UNKO_FINAL_PlamA_2 UNKO_FINAL_PlanA
Fork of HCSR04 by
Diff: hcsr04.cpp
- Revision:
- 8:e150242bce6b
- Parent:
- 6:4be4fcd0c171
--- a/hcsr04.cpp Sat Mar 30 18:55:03 2013 +0000 +++ b/hcsr04.cpp Wed Sep 05 15:06:24 2018 +0000 @@ -24,6 +24,7 @@ HCSR04::HCSR04(PinName TrigPin,PinName EchoPin): trigger(TrigPin), echo(EchoPin) { + setTemp(15); pulsetime.stop(); pulsetime.reset(); echo.rise(this,&HCSR04::isr_rise); @@ -35,22 +36,36 @@ { } -void HCSR04::isr_rise(void) -{ - pulsetime.start(); -} void HCSR04::start(void) { + pulsetime_us = pulsetime.read_us(); + if(pulsetime_us > maxTime){ + pulsetime.stop(); + pulsetime.reset(); + trigger=1; + trigger=0; + } trigger=1; wait_us(10); trigger=0; } +void HCSR04::isr_rise(void) +{ + pulsetime.start(); +} + void HCSR04::isr_fall(void) { pulsetime.stop(); - pulsedur = pulsetime.read_us(); - distance= (pulsedur*343)/20000; + pulsetime_us = pulsetime.read_us(); + if(pulsetime_us > maxTime){ + trigger=1; + trigger=0; + distance = 0; + }else{ + distance = pulsetime_us*sonic/20000; + } pulsetime.reset(); } @@ -67,13 +82,13 @@ { return distance; } -unsigned int HCSR04::get_pulse_us() -{ - return pulsedur; + +void HCSR04::setTemp(int temp){ + temperature = temp; + sonic = 331.5+0.61*temperature; + maxTime = 10*1000000/sonic; } - - /******************************************************* Here is a sample code usage ********************************************************* @@ -82,6 +97,7 @@ int main() { unsigned char count=0; + setTep(20); while(1) { usensor.start(); wait_ms(500);