Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@5:62de7a36d3af, 2016-09-27 (annotated)
- Committer:
- ikuta
- Date:
- Tue Sep 27 05:24:37 2016 +0000
- Revision:
- 5:62de7a36d3af
- Parent:
- 4:00ac3d093b24
- Child:
- 6:28b7339892f9
??????
Who changed what in which revision?
User | Revision | Line number | New 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 | 4:00ac3d093b24 | 4 | #include "USBJoystick.h" |
ikuta | 0:5d1796a0f9ce | 5 | |
ikuta | 0:5d1796a0f9ce | 6 | Serial pc(USBTX,USBRX); |
ikuta | 4:00ac3d093b24 | 7 | USBJoystick joystick; |
ikuta | 0:5d1796a0f9ce | 8 | |
ikuta | 0:5d1796a0f9ce | 9 | DigitalInOut pingPin1(p18); |
ikuta | 0:5d1796a0f9ce | 10 | DigitalInOut pingPin2(p19); |
ikuta | 0:5d1796a0f9ce | 11 | |
ikuta | 0:5d1796a0f9ce | 12 | Timer tmr1, tmr2,tmr; |
ikuta | 4:00ac3d093b24 | 13 | Timeout timeouter1,timeouter2; |
ikuta | 0:5d1796a0f9ce | 14 | int flag=0; |
ikuta | 4:00ac3d093b24 | 15 | float sum1=0,sum2=0,count1=0,count2=0,timecount1=0,timecount2=0,timesum1=0,timesum2=0,v,argv; |
ikuta | 5:62de7a36d3af | 16 | int16_t x=0,y=0,throttle = 0,rudder = 0,i=0; |
ikuta | 5:62de7a36d3af | 17 | int8_t button=0,hat = 0; |
ikuta | 0:5d1796a0f9ce | 18 | long microsecondsToCentimeters(long microseconds); |
ikuta | 0:5d1796a0f9ce | 19 | |
ikuta | 0:5d1796a0f9ce | 20 | void reset() |
ikuta | 0:5d1796a0f9ce | 21 | { |
ikuta | 0:5d1796a0f9ce | 22 | flag = 0; |
ikuta | 0:5d1796a0f9ce | 23 | tmr.reset(); |
ikuta | 2:fed59450f2ed | 24 | sum1=0,sum2=0,count1=0,count2=0,timecount1=0,timecount2=0,timesum1=0,timesum2=0; |
ikuta | 0:5d1796a0f9ce | 25 | } |
ikuta | 0:5d1796a0f9ce | 26 | |
ikuta | 4:00ac3d093b24 | 27 | void output() |
ikuta | 4:00ac3d093b24 | 28 | { |
ikuta | 4:00ac3d093b24 | 29 | printf("\n|v|: %lf theta: %lf\n",v,argv); //最終的にだすやつ |
ikuta | 5:62de7a36d3af | 30 | x = argv; |
ikuta | 5:62de7a36d3af | 31 | y = v; |
ikuta | 5:62de7a36d3af | 32 | i=2; |
ikuta | 5:62de7a36d3af | 33 | |
ikuta | 5:62de7a36d3af | 34 | wait(1); |
ikuta | 5:62de7a36d3af | 35 | button = (i<<8) & 0x0F; |
ikuta | 5:62de7a36d3af | 36 | |
ikuta | 5:62de7a36d3af | 37 | joystick.update(throttle, rudder, x, y, button, hat); |
ikuta | 4:00ac3d093b24 | 38 | } |
ikuta | 4:00ac3d093b24 | 39 | |
ikuta | 0:5d1796a0f9ce | 40 | int main() |
ikuta | 0:5d1796a0f9ce | 41 | { |
ikuta | 4:00ac3d093b24 | 42 | float avg1,avg2,timeavg1,timeavg2,deltat,a,b; |
ikuta | 0:5d1796a0f9ce | 43 | pc.baud(115200); |
ikuta | 0:5d1796a0f9ce | 44 | while (1) { |
ikuta | 2:fed59450f2ed | 45 | long duration1, duration2,USSDistance1, USSDistance2, cm1, cm2, time1,time2; |
ikuta | 0:5d1796a0f9ce | 46 | |
ikuta | 0:5d1796a0f9ce | 47 | pingPin1.output(); |
ikuta | 0:5d1796a0f9ce | 48 | pingPin1 = 0; |
ikuta | 0:5d1796a0f9ce | 49 | wait_us(2); |
ikuta | 0:5d1796a0f9ce | 50 | pingPin1 = 1; |
ikuta | 0:5d1796a0f9ce | 51 | wait_us(5); |
ikuta | 0:5d1796a0f9ce | 52 | pingPin1 = 0; |
ikuta | 0:5d1796a0f9ce | 53 | |
ikuta | 0:5d1796a0f9ce | 54 | pingPin1.input(); // pulseIn |
ikuta | 0:5d1796a0f9ce | 55 | tmr1.reset(); |
ikuta | 0:5d1796a0f9ce | 56 | |
ikuta | 0:5d1796a0f9ce | 57 | while (!pingPin1); // wait for high |
ikuta | 0:5d1796a0f9ce | 58 | tmr1.start(); |
ikuta | 0:5d1796a0f9ce | 59 | while (pingPin1); // wait for low |
ikuta | 0:5d1796a0f9ce | 60 | tmr1.stop(); |
ikuta | 0:5d1796a0f9ce | 61 | duration1 = tmr1.read_us(); |
ikuta | 0:5d1796a0f9ce | 62 | USSDistance1 = duration1;// * 0.0170; |
ikuta | 0:5d1796a0f9ce | 63 | |
ikuta | 0:5d1796a0f9ce | 64 | cm1 = microsecondsToCentimeters(USSDistance1); |
ikuta | 0:5d1796a0f9ce | 65 | |
ikuta | 0:5d1796a0f9ce | 66 | if(15<cm1&&cm1<40) { |
ikuta | 0:5d1796a0f9ce | 67 | if(flag==0) { |
ikuta | 0:5d1796a0f9ce | 68 | flag=1; |
ikuta | 0:5d1796a0f9ce | 69 | tmr.reset(); |
ikuta | 0:5d1796a0f9ce | 70 | tmr.start(); |
ikuta | 4:00ac3d093b24 | 71 | timeouter2.attach(&output, 1); |
ikuta | 4:00ac3d093b24 | 72 | timeouter1.attach(&reset, 5); |
ikuta | 0:5d1796a0f9ce | 73 | } |
ikuta | 0:5d1796a0f9ce | 74 | if(flag==1) { |
ikuta | 4:00ac3d093b24 | 75 | timeouter1.detach(); |
ikuta | 5:62de7a36d3af | 76 | timeouter2.detach(); |
ikuta | 4:00ac3d093b24 | 77 | timeouter2.attach(&output, 1); |
ikuta | 4:00ac3d093b24 | 78 | timeouter1.attach(&reset, 5); |
ikuta | 0:5d1796a0f9ce | 79 | } |
ikuta | 2:fed59450f2ed | 80 | time1=tmr.read_ms(); |
ikuta | 2:fed59450f2ed | 81 | printf("1: %d %d[ms]", cm1,time1); |
ikuta | 1:5aa590d1f1bf | 82 | |
ikuta | 1:5aa590d1f1bf | 83 | count1++; |
ikuta | 2:fed59450f2ed | 84 | timecount1++; |
ikuta | 1:5aa590d1f1bf | 85 | |
ikuta | 1:5aa590d1f1bf | 86 | sum1=sum1+cm1; //cm1の値を合計する |
ikuta | 1:5aa590d1f1bf | 87 | avg1=sum1/count1; //cm1の平均 |
ikuta | 4:00ac3d093b24 | 88 | printf(" avg1: %f",avg1); |
ikuta | 4:00ac3d093b24 | 89 | |
ikuta | 2:fed59450f2ed | 90 | timesum1=timesum1+time1; //time1を合計する |
ikuta | 2:fed59450f2ed | 91 | timeavg1=timesum1/timecount1; //time1の平均 |
ikuta | 4:00ac3d093b24 | 92 | printf(" timeavg1: %f[ms]\n",timeavg1); |
ikuta | 0:5d1796a0f9ce | 93 | } |
ikuta | 0:5d1796a0f9ce | 94 | |
ikuta | 0:5d1796a0f9ce | 95 | wait_ms(10); |
ikuta | 0:5d1796a0f9ce | 96 | |
ikuta | 0:5d1796a0f9ce | 97 | pingPin2.output(); |
ikuta | 0:5d1796a0f9ce | 98 | pingPin2 = 0; |
ikuta | 0:5d1796a0f9ce | 99 | wait_us(2); |
ikuta | 0:5d1796a0f9ce | 100 | pingPin2 = 1; |
ikuta | 0:5d1796a0f9ce | 101 | wait_us(5); |
ikuta | 0:5d1796a0f9ce | 102 | pingPin2 = 0; |
ikuta | 0:5d1796a0f9ce | 103 | |
ikuta | 0:5d1796a0f9ce | 104 | pingPin2.input(); // pulseIn |
ikuta | 0:5d1796a0f9ce | 105 | tmr2.reset(); |
ikuta | 0:5d1796a0f9ce | 106 | |
ikuta | 0:5d1796a0f9ce | 107 | while (!pingPin2); // wait for high |
ikuta | 0:5d1796a0f9ce | 108 | tmr2.start(); |
ikuta | 0:5d1796a0f9ce | 109 | while (pingPin2); // wait for low |
ikuta | 0:5d1796a0f9ce | 110 | tmr2.stop(); |
ikuta | 0:5d1796a0f9ce | 111 | |
ikuta | 0:5d1796a0f9ce | 112 | duration2 = tmr2.read_us(); |
ikuta | 0:5d1796a0f9ce | 113 | USSDistance2 = duration2;// * 0.0170; |
ikuta | 0:5d1796a0f9ce | 114 | |
ikuta | 0:5d1796a0f9ce | 115 | cm2 = microsecondsToCentimeters(USSDistance2); |
ikuta | 0:5d1796a0f9ce | 116 | if(15<cm2&&cm2<40) { |
ikuta | 2:fed59450f2ed | 117 | time2=tmr.read_ms(); |
ikuta | 4:00ac3d093b24 | 118 | printf(" 2: %d %d[ms]",cm2,time2); |
ikuta | 1:5aa590d1f1bf | 119 | |
ikuta | 1:5aa590d1f1bf | 120 | count2++; |
ikuta | 2:fed59450f2ed | 121 | timecount2++; |
ikuta | 4:00ac3d093b24 | 122 | |
ikuta | 1:5aa590d1f1bf | 123 | sum2=sum2+cm2; //cm2の値を合計する |
ikuta | 1:5aa590d1f1bf | 124 | avg2=sum2/count2; //cm2の平均 |
ikuta | 4:00ac3d093b24 | 125 | printf(" avg2: %f",avg2); |
ikuta | 4:00ac3d093b24 | 126 | |
ikuta | 2:fed59450f2ed | 127 | timesum2=timesum2+time2; //time2を合計する |
ikuta | 2:fed59450f2ed | 128 | timeavg2=timesum2/timecount2; //time2の平均 |
ikuta | 4:00ac3d093b24 | 129 | printf(" timeavg2:%f[ms]\n",timeavg2); |
ikuta | 4:00ac3d093b24 | 130 | |
ikuta | 3:814cb36d0f90 | 131 | deltat=timeavg2-timeavg1; //Δtを求める |
ikuta | 4:00ac3d093b24 | 132 | printf("\ndeltat: %f\n",deltat); |
ikuta | 4:00ac3d093b24 | 133 | |
ikuta | 3:814cb36d0f90 | 134 | a=pow((avg2-avg1)/deltat,2); |
ikuta | 3:814cb36d0f90 | 135 | b=pow(10/deltat,2); |
ikuta | 3:814cb36d0f90 | 136 | v=sqrt(a+b); //|v|を求める |
ikuta | 4:00ac3d093b24 | 137 | |
ikuta | 3:814cb36d0f90 | 138 | argv=atan(10/(avg2-avg1)); //θを求める |
ikuta | 0:5d1796a0f9ce | 139 | } |
ikuta | 0:5d1796a0f9ce | 140 | wait_ms(10); |
ikuta | 1:5aa590d1f1bf | 141 | } |
ikuta | 4:00ac3d093b24 | 142 | |
ikuta | 0:5d1796a0f9ce | 143 | } |
ikuta | 0:5d1796a0f9ce | 144 | |
ikuta | 0:5d1796a0f9ce | 145 | long microsecondsToInches(long microseconds) |
ikuta | 0:5d1796a0f9ce | 146 | { |
ikuta | 0:5d1796a0f9ce | 147 | return microseconds / 74 / 2; |
ikuta | 0:5d1796a0f9ce | 148 | } |
ikuta | 0:5d1796a0f9ce | 149 | |
ikuta | 0:5d1796a0f9ce | 150 | long microsecondsToCentimeters(long microseconds) |
ikuta | 0:5d1796a0f9ce | 151 | { |
ikuta | 0:5d1796a0f9ce | 152 | return microseconds / 29 / 2; |
ikuta | 0:5d1796a0f9ce | 153 | } |