TZU-CHING CHEN
/
HCSR04
Ultrasonic Sensor
main.cpp@0:a35b696aeb52, 2021-08-14 (annotated)
- Committer:
- TzuChingChen
- Date:
- Sat Aug 14 13:54:28 2021 +0000
- Revision:
- 0:a35b696aeb52
Ultrasonic Sensor;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
TzuChingChen | 0:a35b696aeb52 | 1 | #include "mbed.h" |
TzuChingChen | 0:a35b696aeb52 | 2 | #include "hcsr04.h" |
TzuChingChen | 0:a35b696aeb52 | 3 | |
TzuChingChen | 0:a35b696aeb52 | 4 | Serial pc(PA_2, PA_15, 115200); |
TzuChingChen | 0:a35b696aeb52 | 5 | |
TzuChingChen | 0:a35b696aeb52 | 6 | HCSR04 usensor(PA_8,PA_11); |
TzuChingChen | 0:a35b696aeb52 | 7 | AnalogOut Distance_out(A3); |
TzuChingChen | 0:a35b696aeb52 | 8 | |
TzuChingChen | 0:a35b696aeb52 | 9 | unsigned int dist; |
TzuChingChen | 0:a35b696aeb52 | 10 | unsigned int time_us; |
TzuChingChen | 0:a35b696aeb52 | 11 | float dist_mm; |
TzuChingChen | 0:a35b696aeb52 | 12 | float dist_ratio; |
TzuChingChen | 0:a35b696aeb52 | 13 | float dist_ratio_last; |
TzuChingChen | 0:a35b696aeb52 | 14 | float dist_ratio_fil; |
TzuChingChen | 0:a35b696aeb52 | 15 | const float height_max = 300; //unit: mm |
TzuChingChen | 0:a35b696aeb52 | 16 | const float height_min = 50; //unit: mm |
TzuChingChen | 0:a35b696aeb52 | 17 | |
TzuChingChen | 0:a35b696aeb52 | 18 | int main() |
TzuChingChen | 0:a35b696aeb52 | 19 | { |
TzuChingChen | 0:a35b696aeb52 | 20 | while(1) { |
TzuChingChen | 0:a35b696aeb52 | 21 | usensor.start(); |
TzuChingChen | 0:a35b696aeb52 | 22 | dist=usensor.get_dist_cm(); |
TzuChingChen | 0:a35b696aeb52 | 23 | time_us=usensor.get_pulse_us(); |
TzuChingChen | 0:a35b696aeb52 | 24 | dist_mm = 346.0f*time_us/2000.0f; |
TzuChingChen | 0:a35b696aeb52 | 25 | |
TzuChingChen | 0:a35b696aeb52 | 26 | // pc.printf("cm:%d\n",dist ); |
TzuChingChen | 0:a35b696aeb52 | 27 | // pc.printf("us:%d\n",time_us ); |
TzuChingChen | 0:a35b696aeb52 | 28 | pc.printf("%.3f\n\r",dist_mm ); |
TzuChingChen | 0:a35b696aeb52 | 29 | |
TzuChingChen | 0:a35b696aeb52 | 30 | dist_ratio = (dist_mm - height_min)/(height_max - height_min); |
TzuChingChen | 0:a35b696aeb52 | 31 | if (dist_ratio > 2.0f) {dist_ratio = dist_ratio_last;} |
TzuChingChen | 0:a35b696aeb52 | 32 | dist_ratio_fil = (1.0f-0.03f)*dist_ratio_fil + 0.03f*dist_ratio; |
TzuChingChen | 0:a35b696aeb52 | 33 | |
TzuChingChen | 0:a35b696aeb52 | 34 | if (dist_ratio < 1.0f && dist_ratio > 0.0f) { |
TzuChingChen | 0:a35b696aeb52 | 35 | Distance_out = dist_ratio; |
TzuChingChen | 0:a35b696aeb52 | 36 | } else if (dist_ratio > 1.0f) { |
TzuChingChen | 0:a35b696aeb52 | 37 | Distance_out = 1.0f; |
TzuChingChen | 0:a35b696aeb52 | 38 | } else { |
TzuChingChen | 0:a35b696aeb52 | 39 | Distance_out = 0.0f; |
TzuChingChen | 0:a35b696aeb52 | 40 | } |
TzuChingChen | 0:a35b696aeb52 | 41 | dist_ratio_last = dist_ratio; |
TzuChingChen | 0:a35b696aeb52 | 42 | // pc.printf("%3.3f,%3.3f\n\r", dist_ratio, dist_ratio_fil ); |
TzuChingChen | 0:a35b696aeb52 | 43 | } |
TzuChingChen | 0:a35b696aeb52 | 44 | } |