Manuel Losada
/
HCSR04
for distance sensor
main.cpp@0:47ec319db65c, 2019-11-15 (annotated)
- Committer:
- mlosa010
- Date:
- Fri Nov 15 18:26:05 2019 +0000
- Revision:
- 0:47ec319db65c
working Distance sensor;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mlosa010 | 0:47ec319db65c | 1 | #define LENOFBOT 2.5 |
mlosa010 | 0:47ec319db65c | 2 | #define LENOFSENSOR 0.394 |
mlosa010 | 0:47ec319db65c | 3 | HCSR04 mySensor(p26,p13); |
mlosa010 | 0:47ec319db65c | 4 | Serial pc(USBTX, USBRX); |
mlosa010 | 0:47ec319db65c | 5 | PwmOut trigger(p24); |
mlosa010 | 0:47ec319db65c | 6 | PwmOut trigger_b(p23); |
mlosa010 | 0:47ec319db65c | 7 | InterruptIn echoStart(p13,PullDown); |
mlosa010 | 0:47ec319db65c | 8 | InterruptIn echoStop(p14,PullDown); |
mlosa010 | 0:47ec319db65c | 9 | Timer timer; |
mlosa010 | 0:47ec319db65c | 10 | Timer timer_b; |
mlosa010 | 0:47ec319db65c | 11 | volatile float front_reading; |
mlosa010 | 0:47ec319db65c | 12 | volatile float back_sensor; |
mlosa010 | 0:47ec319db65c | 13 | void start(void){ |
mlosa010 | 0:47ec319db65c | 14 | timer.start(); |
mlosa010 | 0:47ec319db65c | 15 | } |
mlosa010 | 0:47ec319db65c | 16 | void stop (void){ |
mlosa010 | 0:47ec319db65c | 17 | timer.stop(); |
mlosa010 | 0:47ec319db65c | 18 | front_reading = (float)timer.read()*13504; |
mlosa010 | 0:47ec319db65c | 19 | timer.reset(); |
mlosa010 | 0:47ec319db65c | 20 | } |
mlosa010 | 0:47ec319db65c | 21 | void start_back(void){ |
mlosa010 | 0:47ec319db65c | 22 | timer_b.start(); |
mlosa010 | 0:47ec319db65c | 23 | |
mlosa010 | 0:47ec319db65c | 24 | } |
mlosa010 | 0:47ec319db65c | 25 | void stop_back (void){ |
mlosa010 | 0:47ec319db65c | 26 | timer_b.stop(); |
mlosa010 | 0:47ec319db65c | 27 | back_sensor = (float)timer_b.read()*13480; |
mlosa010 | 0:47ec319db65c | 28 | timer_b.reset(); |
mlosa010 | 0:47ec319db65c | 29 | } |
mlosa010 | 0:47ec319db65c | 30 | int main() { |
mlosa010 | 0:47ec319db65c | 31 | echoStart.rise(&start); |
mlosa010 | 0:47ec319db65c | 32 | echoStart.fall(&stop); |
mlosa010 | 0:47ec319db65c | 33 | echoStop.rise(&start_back); |
mlosa010 | 0:47ec319db65c | 34 | echoStop.fall(&stop_back); |
mlosa010 | 0:47ec319db65c | 35 | trigger.period(0.06); |
mlosa010 | 0:47ec319db65c | 36 | int pi[]= {3,1,4,2}; |
mlosa010 | 0:47ec319db65c | 37 | int currentdigit =0; |
mlosa010 | 0:47ec319db65c | 38 | int front_distance; |
mlosa010 | 0:47ec319db65c | 39 | int back_distance; |
mlosa010 | 0:47ec319db65c | 40 | while(1) { |
mlosa010 | 0:47ec319db65c | 41 | trigger.pulsewidth_us(10); |
mlosa010 | 0:47ec319db65c | 42 | front_distance = (3*pi[currentdigit])+9; |
mlosa010 | 0:47ec319db65c | 43 | back_distance= 27-front_distance; |
mlosa010 | 0:47ec319db65c | 44 | |
mlosa010 | 0:47ec319db65c | 45 | if((front_reading/2)+LENOFBOT+LENOFSENSOR>front_distance){ |
mlosa010 | 0:47ec319db65c | 46 | pc.printf("moving back distance read: %.3f digit: %d\n\r",(front_reading/2)+LENOFBOT+LENOFSENSOR,pi[1]); |
mlosa010 | 0:47ec319db65c | 47 | if(((back_sensor/2)+LENOFBOT+LENOFSENSOR <= back_distance-0.1||(back_sensor/2)+LENOFBOT+LENOFSENSOR <= back_distance+0.1)) |
mlosa010 | 0:47ec319db65c | 48 | int r =1; |
mlosa010 | 0:47ec319db65c | 49 | //currentdigit++; |
mlosa010 | 0:47ec319db65c | 50 | }else if((front_reading/2)+LENOFBOT+LENOFSENSOR<=front_distance){ |
mlosa010 | 0:47ec319db65c | 51 | pc.printf("moving forward distance read: %.3f should be %d\n\r",(front_reading/2)+LENOFBOT+LENOFSENSOR, pi[0]); |
mlosa010 | 0:47ec319db65c | 52 | if((back_sensor/2)+LENOFBOT+LENOFSENSOR <= back_distance-0.1||(back_sensor/2)+LENOFBOT+LENOFSENSOR <= back_distance+0.1) |
mlosa010 | 0:47ec319db65c | 53 | int i=1; |
mlosa010 | 0:47ec319db65c | 54 | //currentdigit++; |
mlosa010 | 0:47ec319db65c | 55 | } |
mlosa010 | 0:47ec319db65c | 56 | } |
mlosa010 | 0:47ec319db65c | 57 | } |