MMlab / Mbed 2 deprecated PING_ultrasonic

Dependencies:   USBDevice mbed

Committer:
ikuta
Date:
Thu Sep 22 16:18:08 2016 +0000
Revision:
3:814cb36d0f90
Parent:
2:fed59450f2ed
Child:
4:00ac3d093b24
????????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ikuta 0:5d1796a0f9ce 1 #include "mbed.h"
ikuta 1:5aa590d1f1bf 2 #include "stdio.h"
ikuta 1:5aa590d1f1bf 3 #include "math.h"
ikuta 0:5d1796a0f9ce 4
ikuta 0:5d1796a0f9ce 5 Serial pc(USBTX,USBRX);
ikuta 0:5d1796a0f9ce 6
ikuta 0:5d1796a0f9ce 7 DigitalInOut pingPin1(p18);
ikuta 0:5d1796a0f9ce 8 DigitalInOut pingPin2(p19);
ikuta 0:5d1796a0f9ce 9
ikuta 0:5d1796a0f9ce 10 Timer tmr1, tmr2,tmr;
ikuta 0:5d1796a0f9ce 11 Timeout timeouter;
ikuta 0:5d1796a0f9ce 12 int flag=0;
ikuta 2:fed59450f2ed 13 float sum1=0,sum2=0,count1=0,count2=0,timecount1=0,timecount2=0,timesum1=0,timesum2=0;
ikuta 0:5d1796a0f9ce 14 long microsecondsToCentimeters(long microseconds);
ikuta 0:5d1796a0f9ce 15
ikuta 0:5d1796a0f9ce 16 void reset()
ikuta 0:5d1796a0f9ce 17 {
ikuta 0:5d1796a0f9ce 18 flag = 0;
ikuta 0:5d1796a0f9ce 19 tmr.reset();
ikuta 2:fed59450f2ed 20 sum1=0,sum2=0,count1=0,count2=0,timecount1=0,timecount2=0,timesum1=0,timesum2=0;
ikuta 0:5d1796a0f9ce 21 }
ikuta 0:5d1796a0f9ce 22
ikuta 0:5d1796a0f9ce 23 int main()
ikuta 0:5d1796a0f9ce 24 {
ikuta 3:814cb36d0f90 25 float avg1,avg2,timeavg1,timeavg2,deltat,a,b,v,argv;
ikuta 0:5d1796a0f9ce 26 pc.baud(115200);
ikuta 0:5d1796a0f9ce 27 while (1) {
ikuta 2:fed59450f2ed 28 long duration1, duration2,USSDistance1, USSDistance2, cm1, cm2, time1,time2;
ikuta 0:5d1796a0f9ce 29
ikuta 0:5d1796a0f9ce 30 pingPin1.output();
ikuta 0:5d1796a0f9ce 31 pingPin1 = 0;
ikuta 0:5d1796a0f9ce 32 wait_us(2);
ikuta 0:5d1796a0f9ce 33 pingPin1 = 1;
ikuta 0:5d1796a0f9ce 34 wait_us(5);
ikuta 0:5d1796a0f9ce 35 pingPin1 = 0;
ikuta 0:5d1796a0f9ce 36
ikuta 0:5d1796a0f9ce 37 pingPin1.input(); // pulseIn
ikuta 0:5d1796a0f9ce 38 tmr1.reset();
ikuta 0:5d1796a0f9ce 39
ikuta 0:5d1796a0f9ce 40 while (!pingPin1); // wait for high
ikuta 0:5d1796a0f9ce 41 tmr1.start();
ikuta 0:5d1796a0f9ce 42 while (pingPin1); // wait for low
ikuta 0:5d1796a0f9ce 43 tmr1.stop();
ikuta 0:5d1796a0f9ce 44 duration1 = tmr1.read_us();
ikuta 0:5d1796a0f9ce 45 USSDistance1 = duration1;// * 0.0170;
ikuta 0:5d1796a0f9ce 46
ikuta 0:5d1796a0f9ce 47 cm1 = microsecondsToCentimeters(USSDistance1);
ikuta 0:5d1796a0f9ce 48
ikuta 0:5d1796a0f9ce 49 if(15<cm1&&cm1<40) {
ikuta 0:5d1796a0f9ce 50 if(flag==0) {
ikuta 0:5d1796a0f9ce 51 flag=1;
ikuta 0:5d1796a0f9ce 52 tmr.reset();
ikuta 0:5d1796a0f9ce 53 tmr.start();
ikuta 0:5d1796a0f9ce 54 timeouter.attach(&reset, 5);
ikuta 0:5d1796a0f9ce 55 }
ikuta 0:5d1796a0f9ce 56 if(flag==1) {
ikuta 0:5d1796a0f9ce 57 timeouter.detach();
ikuta 0:5d1796a0f9ce 58 timeouter.attach(&reset, 5);
ikuta 0:5d1796a0f9ce 59 }
ikuta 2:fed59450f2ed 60 time1=tmr.read_ms();
ikuta 2:fed59450f2ed 61 printf("1: %d %d[ms]", cm1,time1);
ikuta 1:5aa590d1f1bf 62
ikuta 1:5aa590d1f1bf 63 count1++;
ikuta 2:fed59450f2ed 64 timecount1++;
ikuta 1:5aa590d1f1bf 65
ikuta 1:5aa590d1f1bf 66 sum1=sum1+cm1; //cm1の値を合計する
ikuta 1:5aa590d1f1bf 67 avg1=sum1/count1; //cm1の平均
ikuta 2:fed59450f2ed 68 printf(" avg1: %4.2f",avg1);
ikuta 2:fed59450f2ed 69
ikuta 2:fed59450f2ed 70 timesum1=timesum1+time1; //time1を合計する
ikuta 2:fed59450f2ed 71 timeavg1=timesum1/timecount1; //time1の平均
ikuta 2:fed59450f2ed 72 printf(" timeavg1: %4.2f[ms]\n",timeavg1);
ikuta 1:5aa590d1f1bf 73
ikuta 0:5d1796a0f9ce 74 }
ikuta 0:5d1796a0f9ce 75
ikuta 0:5d1796a0f9ce 76 wait_ms(10);
ikuta 0:5d1796a0f9ce 77
ikuta 0:5d1796a0f9ce 78 pingPin2.output();
ikuta 0:5d1796a0f9ce 79 pingPin2 = 0;
ikuta 0:5d1796a0f9ce 80 wait_us(2);
ikuta 0:5d1796a0f9ce 81 pingPin2 = 1;
ikuta 0:5d1796a0f9ce 82 wait_us(5);
ikuta 0:5d1796a0f9ce 83 pingPin2 = 0;
ikuta 0:5d1796a0f9ce 84
ikuta 0:5d1796a0f9ce 85 pingPin2.input(); // pulseIn
ikuta 0:5d1796a0f9ce 86 tmr2.reset();
ikuta 0:5d1796a0f9ce 87
ikuta 0:5d1796a0f9ce 88 while (!pingPin2); // wait for high
ikuta 0:5d1796a0f9ce 89 tmr2.start();
ikuta 0:5d1796a0f9ce 90 while (pingPin2); // wait for low
ikuta 0:5d1796a0f9ce 91 tmr2.stop();
ikuta 0:5d1796a0f9ce 92
ikuta 0:5d1796a0f9ce 93 duration2 = tmr2.read_us();
ikuta 0:5d1796a0f9ce 94 USSDistance2 = duration2;// * 0.0170;
ikuta 0:5d1796a0f9ce 95
ikuta 0:5d1796a0f9ce 96 cm2 = microsecondsToCentimeters(USSDistance2);
ikuta 0:5d1796a0f9ce 97 if(15<cm2&&cm2<40) {
ikuta 2:fed59450f2ed 98 time2=tmr.read_ms();
ikuta 3:814cb36d0f90 99 printf(" 2: %d %d[ms]",cm2,time2);
ikuta 1:5aa590d1f1bf 100
ikuta 1:5aa590d1f1bf 101 count2++;
ikuta 2:fed59450f2ed 102 timecount2++;
ikuta 2:fed59450f2ed 103
ikuta 1:5aa590d1f1bf 104 sum2=sum2+cm2; //cm2の値を合計する
ikuta 1:5aa590d1f1bf 105 avg2=sum2/count2; //cm2の平均
ikuta 2:fed59450f2ed 106 printf(" avg2: %4.2f",avg2);
ikuta 2:fed59450f2ed 107
ikuta 2:fed59450f2ed 108 timesum2=timesum2+time2; //time2を合計する
ikuta 2:fed59450f2ed 109 timeavg2=timesum2/timecount2; //time2の平均
ikuta 2:fed59450f2ed 110 printf(" timeavg2:%4.2f[ms]\n",timeavg2);
ikuta 3:814cb36d0f90 111
ikuta 3:814cb36d0f90 112 deltat=timeavg2-timeavg1; //Δtを求める
ikuta 3:814cb36d0f90 113 printf("\ndeltat: %4.2f\n",deltat);
ikuta 3:814cb36d0f90 114
ikuta 3:814cb36d0f90 115 a=pow((avg2-avg1)/deltat,2);
ikuta 3:814cb36d0f90 116 b=pow(10/deltat,2);
ikuta 3:814cb36d0f90 117 v=sqrt(a+b); //|v|を求める
ikuta 3:814cb36d0f90 118
ikuta 3:814cb36d0f90 119 argv=atan(10/(avg2-avg1)); //θを求める
ikuta 3:814cb36d0f90 120
ikuta 3:814cb36d0f90 121 printf("\n|v|: %lf theta: %lf\n",v,argv);
ikuta 3:814cb36d0f90 122
ikuta 1:5aa590d1f1bf 123
ikuta 0:5d1796a0f9ce 124 }
ikuta 0:5d1796a0f9ce 125 wait_ms(10);
ikuta 1:5aa590d1f1bf 126
ikuta 1:5aa590d1f1bf 127
ikuta 1:5aa590d1f1bf 128 }
ikuta 0:5d1796a0f9ce 129 }
ikuta 0:5d1796a0f9ce 130
ikuta 1:5aa590d1f1bf 131
ikuta 0:5d1796a0f9ce 132 long microsecondsToInches(long microseconds)
ikuta 0:5d1796a0f9ce 133 {
ikuta 0:5d1796a0f9ce 134 return microseconds / 74 / 2;
ikuta 0:5d1796a0f9ce 135 }
ikuta 0:5d1796a0f9ce 136
ikuta 0:5d1796a0f9ce 137 long microsecondsToCentimeters(long microseconds)
ikuta 0:5d1796a0f9ce 138 {
ikuta 0:5d1796a0f9ce 139 return microseconds / 29 / 2;
ikuta 0:5d1796a0f9ce 140 }