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@7:ed304ba2712a, 2016-09-27 (annotated)
- Committer:
- ikuta
- Date:
- Tue Sep 27 12:50:45 2016 +0000
- Revision:
- 7:ed304ba2712a
- Parent:
- 6:28b7339892f9
- Child:
- 8:59dd4860477f
x,y????
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 | 7:ed304ba2712a | 16 | float avg1,avg2,timeavg1,timeavg2,deltat,a,b; |
ikuta | 7:ed304ba2712a | 17 | int16_t x=0,y=0,throttle = 0,rudder = 0,i=0,vmax,M_PI=3.14; |
ikuta | 5:62de7a36d3af | 18 | int8_t button=0,hat = 0; |
ikuta | 0:5d1796a0f9ce | 19 | long microsecondsToCentimeters(long microseconds); |
ikuta | 0:5d1796a0f9ce | 20 | |
ikuta | 0:5d1796a0f9ce | 21 | void reset() |
ikuta | 0:5d1796a0f9ce | 22 | { |
ikuta | 0:5d1796a0f9ce | 23 | flag = 0; |
ikuta | 0:5d1796a0f9ce | 24 | tmr.reset(); |
ikuta | 7:ed304ba2712a | 25 | sum1=0,sum2=0,count1=0,count2=0,timecount1=0,timecount2=0,timesum1=0,timesum2=0,avg1=0,avg2=0,timeavg1=0,timeavg2=0,deltat=0,a=0,b=0; |
ikuta | 0:5d1796a0f9ce | 26 | } |
ikuta | 0:5d1796a0f9ce | 27 | |
ikuta | 4:00ac3d093b24 | 28 | void output() |
ikuta | 4:00ac3d093b24 | 29 | { |
ikuta | 7:ed304ba2712a | 30 | a=pow((avg2-avg1)/deltat*10,2); |
ikuta | 7:ed304ba2712a | 31 | b=pow(0.1/deltat*1000,2); |
ikuta | 7:ed304ba2712a | 32 | v=sqrt(a+b); //|v|を求める |
ikuta | 7:ed304ba2712a | 33 | if(deltat==0){ |
ikuta | 7:ed304ba2712a | 34 | vmax=5; |
ikuta | 7:ed304ba2712a | 35 | } |
ikuta | 7:ed304ba2712a | 36 | argv=atan(10/(avg2-avg1)); //θを求める |
ikuta | 4:00ac3d093b24 | 37 | printf("\n|v|: %lf theta: %lf\n",v,argv); //最終的にだすやつ |
ikuta | 7:ed304ba2712a | 38 | x = (int)argv*M_PI/60; |
ikuta | 7:ed304ba2712a | 39 | y = (int)v/5*240-120; |
ikuta | 5:62de7a36d3af | 40 | i=2; |
ikuta | 6:28b7339892f9 | 41 | joystick.update(throttle, rudder, x, y, button, hat); |
ikuta | 5:62de7a36d3af | 42 | wait(1); |
ikuta | 6:28b7339892f9 | 43 | button = (0x0002) & 0x0F; |
ikuta | 5:62de7a36d3af | 44 | |
ikuta | 5:62de7a36d3af | 45 | joystick.update(throttle, rudder, x, y, button, hat); |
ikuta | 4:00ac3d093b24 | 46 | } |
ikuta | 4:00ac3d093b24 | 47 | |
ikuta | 0:5d1796a0f9ce | 48 | int main() |
ikuta | 0:5d1796a0f9ce | 49 | { |
ikuta | 0:5d1796a0f9ce | 50 | pc.baud(115200); |
ikuta | 0:5d1796a0f9ce | 51 | while (1) { |
ikuta | 2:fed59450f2ed | 52 | long duration1, duration2,USSDistance1, USSDistance2, cm1, cm2, time1,time2; |
ikuta | 0:5d1796a0f9ce | 53 | |
ikuta | 0:5d1796a0f9ce | 54 | pingPin1.output(); |
ikuta | 0:5d1796a0f9ce | 55 | pingPin1 = 0; |
ikuta | 0:5d1796a0f9ce | 56 | wait_us(2); |
ikuta | 0:5d1796a0f9ce | 57 | pingPin1 = 1; |
ikuta | 0:5d1796a0f9ce | 58 | wait_us(5); |
ikuta | 0:5d1796a0f9ce | 59 | pingPin1 = 0; |
ikuta | 0:5d1796a0f9ce | 60 | |
ikuta | 0:5d1796a0f9ce | 61 | pingPin1.input(); // pulseIn |
ikuta | 0:5d1796a0f9ce | 62 | tmr1.reset(); |
ikuta | 0:5d1796a0f9ce | 63 | |
ikuta | 0:5d1796a0f9ce | 64 | while (!pingPin1); // wait for high |
ikuta | 0:5d1796a0f9ce | 65 | tmr1.start(); |
ikuta | 0:5d1796a0f9ce | 66 | while (pingPin1); // wait for low |
ikuta | 0:5d1796a0f9ce | 67 | tmr1.stop(); |
ikuta | 0:5d1796a0f9ce | 68 | duration1 = tmr1.read_us(); |
ikuta | 0:5d1796a0f9ce | 69 | USSDistance1 = duration1;// * 0.0170; |
ikuta | 0:5d1796a0f9ce | 70 | |
ikuta | 0:5d1796a0f9ce | 71 | cm1 = microsecondsToCentimeters(USSDistance1); |
ikuta | 0:5d1796a0f9ce | 72 | |
ikuta | 0:5d1796a0f9ce | 73 | if(15<cm1&&cm1<40) { |
ikuta | 0:5d1796a0f9ce | 74 | if(flag==0) { |
ikuta | 0:5d1796a0f9ce | 75 | flag=1; |
ikuta | 0:5d1796a0f9ce | 76 | tmr.reset(); |
ikuta | 0:5d1796a0f9ce | 77 | tmr.start(); |
ikuta | 4:00ac3d093b24 | 78 | timeouter2.attach(&output, 1); |
ikuta | 4:00ac3d093b24 | 79 | timeouter1.attach(&reset, 5); |
ikuta | 0:5d1796a0f9ce | 80 | } |
ikuta | 0:5d1796a0f9ce | 81 | if(flag==1) { |
ikuta | 4:00ac3d093b24 | 82 | timeouter1.detach(); |
ikuta | 5:62de7a36d3af | 83 | timeouter2.detach(); |
ikuta | 4:00ac3d093b24 | 84 | timeouter2.attach(&output, 1); |
ikuta | 4:00ac3d093b24 | 85 | timeouter1.attach(&reset, 5); |
ikuta | 0:5d1796a0f9ce | 86 | } |
ikuta | 2:fed59450f2ed | 87 | time1=tmr.read_ms(); |
ikuta | 6:28b7339892f9 | 88 | printf("1: %d %d[s]", cm1,time1); |
ikuta | 1:5aa590d1f1bf | 89 | |
ikuta | 1:5aa590d1f1bf | 90 | count1++; |
ikuta | 2:fed59450f2ed | 91 | timecount1++; |
ikuta | 1:5aa590d1f1bf | 92 | |
ikuta | 1:5aa590d1f1bf | 93 | sum1=sum1+cm1; //cm1の値を合計する |
ikuta | 1:5aa590d1f1bf | 94 | avg1=sum1/count1; //cm1の平均 |
ikuta | 4:00ac3d093b24 | 95 | printf(" avg1: %f",avg1); |
ikuta | 4:00ac3d093b24 | 96 | |
ikuta | 2:fed59450f2ed | 97 | timesum1=timesum1+time1; //time1を合計する |
ikuta | 2:fed59450f2ed | 98 | timeavg1=timesum1/timecount1; //time1の平均 |
ikuta | 6:28b7339892f9 | 99 | printf(" timeavg1: %f[s]\n",timeavg1); |
ikuta | 0:5d1796a0f9ce | 100 | } |
ikuta | 0:5d1796a0f9ce | 101 | |
ikuta | 0:5d1796a0f9ce | 102 | wait_ms(10); |
ikuta | 0:5d1796a0f9ce | 103 | |
ikuta | 0:5d1796a0f9ce | 104 | pingPin2.output(); |
ikuta | 0:5d1796a0f9ce | 105 | pingPin2 = 0; |
ikuta | 0:5d1796a0f9ce | 106 | wait_us(2); |
ikuta | 0:5d1796a0f9ce | 107 | pingPin2 = 1; |
ikuta | 0:5d1796a0f9ce | 108 | wait_us(5); |
ikuta | 0:5d1796a0f9ce | 109 | pingPin2 = 0; |
ikuta | 0:5d1796a0f9ce | 110 | |
ikuta | 0:5d1796a0f9ce | 111 | pingPin2.input(); // pulseIn |
ikuta | 0:5d1796a0f9ce | 112 | tmr2.reset(); |
ikuta | 0:5d1796a0f9ce | 113 | |
ikuta | 0:5d1796a0f9ce | 114 | while (!pingPin2); // wait for high |
ikuta | 0:5d1796a0f9ce | 115 | tmr2.start(); |
ikuta | 0:5d1796a0f9ce | 116 | while (pingPin2); // wait for low |
ikuta | 0:5d1796a0f9ce | 117 | tmr2.stop(); |
ikuta | 0:5d1796a0f9ce | 118 | |
ikuta | 0:5d1796a0f9ce | 119 | duration2 = tmr2.read_us(); |
ikuta | 0:5d1796a0f9ce | 120 | USSDistance2 = duration2;// * 0.0170; |
ikuta | 0:5d1796a0f9ce | 121 | |
ikuta | 0:5d1796a0f9ce | 122 | cm2 = microsecondsToCentimeters(USSDistance2); |
ikuta | 0:5d1796a0f9ce | 123 | if(15<cm2&&cm2<40) { |
ikuta | 2:fed59450f2ed | 124 | time2=tmr.read_ms(); |
ikuta | 6:28b7339892f9 | 125 | printf(" 2: %d %d[s]",cm2,time2); |
ikuta | 1:5aa590d1f1bf | 126 | |
ikuta | 1:5aa590d1f1bf | 127 | count2++; |
ikuta | 2:fed59450f2ed | 128 | timecount2++; |
ikuta | 4:00ac3d093b24 | 129 | |
ikuta | 1:5aa590d1f1bf | 130 | sum2=sum2+cm2; //cm2の値を合計する |
ikuta | 1:5aa590d1f1bf | 131 | avg2=sum2/count2; //cm2の平均 |
ikuta | 4:00ac3d093b24 | 132 | printf(" avg2: %f",avg2); |
ikuta | 4:00ac3d093b24 | 133 | |
ikuta | 2:fed59450f2ed | 134 | timesum2=timesum2+time2; //time2を合計する |
ikuta | 2:fed59450f2ed | 135 | timeavg2=timesum2/timecount2; //time2の平均 |
ikuta | 6:28b7339892f9 | 136 | printf(" timeavg2:%f[s]\n",timeavg2); |
ikuta | 4:00ac3d093b24 | 137 | |
ikuta | 3:814cb36d0f90 | 138 | deltat=timeavg2-timeavg1; //Δtを求める |
ikuta | 4:00ac3d093b24 | 139 | printf("\ndeltat: %f\n",deltat); |
ikuta | 4:00ac3d093b24 | 140 | |
ikuta | 7:ed304ba2712a | 141 | |
ikuta | 0:5d1796a0f9ce | 142 | } |
ikuta | 0:5d1796a0f9ce | 143 | wait_ms(10); |
ikuta | 1:5aa590d1f1bf | 144 | } |
ikuta | 4:00ac3d093b24 | 145 | |
ikuta | 0:5d1796a0f9ce | 146 | } |
ikuta | 0:5d1796a0f9ce | 147 | |
ikuta | 0:5d1796a0f9ce | 148 | long microsecondsToInches(long microseconds) |
ikuta | 0:5d1796a0f9ce | 149 | { |
ikuta | 0:5d1796a0f9ce | 150 | return microseconds / 74 / 2; |
ikuta | 0:5d1796a0f9ce | 151 | } |
ikuta | 0:5d1796a0f9ce | 152 | |
ikuta | 0:5d1796a0f9ce | 153 | long microsecondsToCentimeters(long microseconds) |
ikuta | 0:5d1796a0f9ce | 154 | { |
ikuta | 0:5d1796a0f9ce | 155 | return microseconds / 29 / 2; |
ikuta | 7:ed304ba2712a | 156 | } |