トランジスタ技術2015年6月号 mbed ラジコン・カーp169-p184掲載
Dependencies: mbed
main.cpp@0:6228c3688e54, 2015-06-01 (annotated)
- Committer:
- YoshihitoShimada
- Date:
- Mon Jun 01 02:03:38 2015 +0000
- Revision:
- 0:6228c3688e54
mbed test sample code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
YoshihitoShimada | 0:6228c3688e54 | 1 | #include "mbed.h" |
YoshihitoShimada | 0:6228c3688e54 | 2 | #include "ATP3012.h" |
YoshihitoShimada | 0:6228c3688e54 | 3 | |
YoshihitoShimada | 0:6228c3688e54 | 4 | Serial bluetooth(p9,p10); //tx, rx |
YoshihitoShimada | 0:6228c3688e54 | 5 | ATP3012 talk(P0_5, P0_4); // sda, scl |
YoshihitoShimada | 0:6228c3688e54 | 6 | |
YoshihitoShimada | 0:6228c3688e54 | 7 | PwmOut Rin(P0_8); |
YoshihitoShimada | 0:6228c3688e54 | 8 | PwmOut Lin(P0_9); |
YoshihitoShimada | 0:6228c3688e54 | 9 | PwmOut S40kHz(P0_21); |
YoshihitoShimada | 0:6228c3688e54 | 10 | DigitalOut IN1(P0_11); |
YoshihitoShimada | 0:6228c3688e54 | 11 | DigitalOut IN2(P0_12); |
YoshihitoShimada | 0:6228c3688e54 | 12 | AnalogIn Ain(P0_13); |
YoshihitoShimada | 0:6228c3688e54 | 13 | DigitalOut StopSignal(P0_20); |
YoshihitoShimada | 0:6228c3688e54 | 14 | DigitalOut Light(P0_16); |
YoshihitoShimada | 0:6228c3688e54 | 15 | |
YoshihitoShimada | 0:6228c3688e54 | 16 | int main() { |
YoshihitoShimada | 0:6228c3688e54 | 17 | bluetooth.baud(115200); |
YoshihitoShimada | 0:6228c3688e54 | 18 | int32_t i, j; |
YoshihitoShimada | 0:6228c3688e54 | 19 | int32_t count=10000; |
YoshihitoShimada | 0:6228c3688e54 | 20 | uint8_t buf='5'; |
YoshihitoShimada | 0:6228c3688e54 | 21 | char moji[64]; |
YoshihitoShimada | 0:6228c3688e54 | 22 | int32_t onsei=0; |
YoshihitoShimada | 0:6228c3688e54 | 23 | |
YoshihitoShimada | 0:6228c3688e54 | 24 | char* LightOn[64] = { "raitoon.\r", "tentou.\r" } ; |
YoshihitoShimada | 0:6228c3688e54 | 25 | char* LightOff[64] = { "raito/ohu.\r", "syoutou.\r" } ; |
YoshihitoShimada | 0:6228c3688e54 | 26 | char* Forward[64] = { "susume.\r", "<ALPHA VAL=start>.\r" } ; |
YoshihitoShimada | 0:6228c3688e54 | 27 | char* Stop[64] = { "tomare.\r", "<ALPHA VAL=stop>.\r" } ; |
YoshihitoShimada | 0:6228c3688e54 | 28 | char* Backward[64] = { "sagare.\r", "bakku.\r" } ; |
YoshihitoShimada | 0:6228c3688e54 | 29 | char* LeftTurn[64] = { "<ALPHA VAL=left>.\r", "sasetu.\r" } ; |
YoshihitoShimada | 0:6228c3688e54 | 30 | char* RightTurn[64] = { "raito.\r", "usetu.\r" } ; |
YoshihitoShimada | 0:6228c3688e54 | 31 | char* LeftBackward[64] = { "hidariusiro.\r", "usiro /hidari.\r" }; |
YoshihitoShimada | 0:6228c3688e54 | 32 | char* RightBackward[64] = { "migiusiro.\r", "usiro /migi.\r" }; |
YoshihitoShimada | 0:6228c3688e54 | 33 | char* LeftOblique[64] = { "naname/hidari.\r","hidari/naname.\r" }; |
YoshihitoShimada | 0:6228c3688e54 | 34 | char* RightOblique[64] = { "naname/migi.\r","migi/naname.\r" }; |
YoshihitoShimada | 0:6228c3688e54 | 35 | char* Acceleration[64] = { "hayaku.\r","supi-do/appu.\r" }; |
YoshihitoShimada | 0:6228c3688e54 | 36 | char* Deceleration[64] = { "osoku.\r","supi-do/daun.\r" }; |
YoshihitoShimada | 0:6228c3688e54 | 37 | |
YoshihitoShimada | 0:6228c3688e54 | 38 | float speed=0; |
YoshihitoShimada | 0:6228c3688e54 | 39 | float Rdata=1; |
YoshihitoShimada | 0:6228c3688e54 | 40 | float Ldata=1; |
YoshihitoShimada | 0:6228c3688e54 | 41 | float threshold=0.2; |
YoshihitoShimada | 0:6228c3688e54 | 42 | S40kHz.period_us(25); // 40kHz |
YoshihitoShimada | 0:6228c3688e54 | 43 | S40kHz.pulsewidth_us(12.5); |
YoshihitoShimada | 0:6228c3688e54 | 44 | Light=0; |
YoshihitoShimada | 0:6228c3688e54 | 45 | j = count; |
YoshihitoShimada | 0:6228c3688e54 | 46 | |
YoshihitoShimada | 0:6228c3688e54 | 47 | talk.Synthe("sumahode,ennbextudo'ka-o/ugoka'_su+koto'ga/dekima'_su.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 48 | talk.Synthe("ta'xtu_chi+shite/ugoka'_shite+mi'te+kudasa'i.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 49 | talk.Synthe("mata shabe'ttemo/je'_sucha-demo/ugokasema'_su.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 50 | talk.Synthe("ma'zuwa buru-twu'-suni/setsuzo_kushimasho'-.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 51 | |
YoshihitoShimada | 0:6228c3688e54 | 52 | while (1) { |
YoshihitoShimada | 0:6228c3688e54 | 53 | if(bluetooth.readable()) { |
YoshihitoShimada | 0:6228c3688e54 | 54 | i=0; |
YoshihitoShimada | 0:6228c3688e54 | 55 | do { |
YoshihitoShimada | 0:6228c3688e54 | 56 | buf=bluetooth.getc(); |
YoshihitoShimada | 0:6228c3688e54 | 57 | moji[i++]=buf; |
YoshihitoShimada | 0:6228c3688e54 | 58 | } while(buf!='\0'); |
YoshihitoShimada | 0:6228c3688e54 | 59 | buf=moji[0]; |
YoshihitoShimada | 0:6228c3688e54 | 60 | } |
YoshihitoShimada | 0:6228c3688e54 | 61 | for(int i = 0; i <= 1; i++) { |
YoshihitoShimada | 0:6228c3688e54 | 62 | if (strcmp(LeftBackward[i],moji) == 0) buf='1'; |
YoshihitoShimada | 0:6228c3688e54 | 63 | if (strcmp(Backward[i],moji) == 0) buf='2'; |
YoshihitoShimada | 0:6228c3688e54 | 64 | if (strcmp(RightBackward[i],moji) == 0) buf='3'; |
YoshihitoShimada | 0:6228c3688e54 | 65 | if (strcmp(LeftTurn[i],moji) == 0) buf='4'; |
YoshihitoShimada | 0:6228c3688e54 | 66 | if (strcmp(Stop[i],moji) == 0) buf='5'; |
YoshihitoShimada | 0:6228c3688e54 | 67 | if (strcmp(RightTurn[i],moji) == 0) buf='6'; |
YoshihitoShimada | 0:6228c3688e54 | 68 | if (strcmp(LeftOblique[i],moji) == 0) buf='7'; |
YoshihitoShimada | 0:6228c3688e54 | 69 | if (strcmp(Forward[i],moji) == 0) buf='8'; |
YoshihitoShimada | 0:6228c3688e54 | 70 | if (strcmp(RightOblique[i],moji) == 0) buf='9'; |
YoshihitoShimada | 0:6228c3688e54 | 71 | if (strcmp(LightOn[i],moji) == 0) buf='+'; |
YoshihitoShimada | 0:6228c3688e54 | 72 | if (strcmp(LightOff[i],moji) == 0) buf='-'; |
YoshihitoShimada | 0:6228c3688e54 | 73 | if (strcmp(Acceleration[i],moji) == 0) buf='*'; |
YoshihitoShimada | 0:6228c3688e54 | 74 | if (strcmp(Deceleration[i],moji) == 0) buf='0'; |
YoshihitoShimada | 0:6228c3688e54 | 75 | } |
YoshihitoShimada | 0:6228c3688e54 | 76 | |
YoshihitoShimada | 0:6228c3688e54 | 77 | if(Ain > threshold) { |
YoshihitoShimada | 0:6228c3688e54 | 78 | StopSignal=0; // Red LED ON |
YoshihitoShimada | 0:6228c3688e54 | 79 | if((buf>='4')){ |
YoshihitoShimada | 0:6228c3688e54 | 80 | buf='5'; |
YoshihitoShimada | 0:6228c3688e54 | 81 | IN1=1;IN2=1; |
YoshihitoShimada | 0:6228c3688e54 | 82 | if(onsei==1) { |
YoshihitoShimada | 0:6228c3688e54 | 83 | talk.Synthe("zennpo-ni sho-gai'butsuo/hakkennshima'_shita.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 84 | talk.Synthe("ka'i_hi+shitekudasa'i.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 85 | onsei=0; |
YoshihitoShimada | 0:6228c3688e54 | 86 | } |
YoshihitoShimada | 0:6228c3688e54 | 87 | } |
YoshihitoShimada | 0:6228c3688e54 | 88 | } else { |
YoshihitoShimada | 0:6228c3688e54 | 89 | StopSignal=1; // Red LED OFF |
YoshihitoShimada | 0:6228c3688e54 | 90 | onsei=1; |
YoshihitoShimada | 0:6228c3688e54 | 91 | } |
YoshihitoShimada | 0:6228c3688e54 | 92 | switch (buf){ |
YoshihitoShimada | 0:6228c3688e54 | 93 | case '1': // Left Backward |
YoshihitoShimada | 0:6228c3688e54 | 94 | IN1=1;IN2=0; |
YoshihitoShimada | 0:6228c3688e54 | 95 | Rdata=0.4+speed; Ldata=0.6+speed; |
YoshihitoShimada | 0:6228c3688e54 | 96 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 97 | talk.Synthe("hidariusiro.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 98 | break; |
YoshihitoShimada | 0:6228c3688e54 | 99 | case '2': // Backward |
YoshihitoShimada | 0:6228c3688e54 | 100 | IN1=1;IN2=0; |
YoshihitoShimada | 0:6228c3688e54 | 101 | Rdata=0.5+speed; Ldata=0.5+speed; |
YoshihitoShimada | 0:6228c3688e54 | 102 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 103 | talk.Synthe("ushironi/sagarima'_su.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 104 | break; |
YoshihitoShimada | 0:6228c3688e54 | 105 | case '3': // Right Backward |
YoshihitoShimada | 0:6228c3688e54 | 106 | IN1=1;IN2=0; |
YoshihitoShimada | 0:6228c3688e54 | 107 | Rdata=0.6+speed; Ldata=0.4+speed; |
YoshihitoShimada | 0:6228c3688e54 | 108 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 109 | talk.Synthe("migiusiro.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 110 | break; |
YoshihitoShimada | 0:6228c3688e54 | 111 | case '4': // Left Turn |
YoshihitoShimada | 0:6228c3688e54 | 112 | IN1=0;IN2=1; |
YoshihitoShimada | 0:6228c3688e54 | 113 | Rdata=0.3+speed; Ldata=0.8+speed; |
YoshihitoShimada | 0:6228c3688e54 | 114 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 115 | talk.Synthe("sasetsu.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 116 | break; |
YoshihitoShimada | 0:6228c3688e54 | 117 | case '5': // Stop |
YoshihitoShimada | 0:6228c3688e54 | 118 | IN1=1;IN2=1; |
YoshihitoShimada | 0:6228c3688e54 | 119 | break; |
YoshihitoShimada | 0:6228c3688e54 | 120 | case '6': // Right Turn |
YoshihitoShimada | 0:6228c3688e54 | 121 | IN1=0;IN2=1; |
YoshihitoShimada | 0:6228c3688e54 | 122 | Rdata=0.8+speed; Ldata=0.3+speed; |
YoshihitoShimada | 0:6228c3688e54 | 123 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 124 | talk.Synthe("usetsu.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 125 | break; |
YoshihitoShimada | 0:6228c3688e54 | 126 | case '7': // Left Oblique |
YoshihitoShimada | 0:6228c3688e54 | 127 | IN1=0;IN2=1; |
YoshihitoShimada | 0:6228c3688e54 | 128 | Rdata=0.4+speed; Ldata=0.6+speed; |
YoshihitoShimada | 0:6228c3688e54 | 129 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 130 | talk.Synthe("hidarinana'me.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 131 | break; |
YoshihitoShimada | 0:6228c3688e54 | 132 | case '8': // Forward |
YoshihitoShimada | 0:6228c3688e54 | 133 | IN1=0;IN2=1; |
YoshihitoShimada | 0:6228c3688e54 | 134 | Rdata=0.5+speed; Ldata=0.5+speed; |
YoshihitoShimada | 0:6228c3688e54 | 135 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 136 | talk.Synthe("zennshinn.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 137 | break; |
YoshihitoShimada | 0:6228c3688e54 | 138 | case '9': // Right Oblique |
YoshihitoShimada | 0:6228c3688e54 | 139 | IN1=0;IN2=1; |
YoshihitoShimada | 0:6228c3688e54 | 140 | Rdata=0.6+speed; Ldata=0.4+speed; |
YoshihitoShimada | 0:6228c3688e54 | 141 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 142 | talk.Synthe("miginana'me.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 143 | break; |
YoshihitoShimada | 0:6228c3688e54 | 144 | case '+': //Light On |
YoshihitoShimada | 0:6228c3688e54 | 145 | Light=1; |
YoshihitoShimada | 0:6228c3688e54 | 146 | talk.Synthe("#J\r"); |
YoshihitoShimada | 0:6228c3688e54 | 147 | talk.Synthe("ra'itoo/tennto-shima'_su.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 148 | break; |
YoshihitoShimada | 0:6228c3688e54 | 149 | case '-': //Light Off |
YoshihitoShimada | 0:6228c3688e54 | 150 | Light=0; |
YoshihitoShimada | 0:6228c3688e54 | 151 | talk.Synthe("#J\r"); |
YoshihitoShimada | 0:6228c3688e54 | 152 | talk.Synthe("ra'itoo/keshima'_su.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 153 | break; |
YoshihitoShimada | 0:6228c3688e54 | 154 | case '0': // Deceleration |
YoshihitoShimada | 0:6228c3688e54 | 155 | speed=speed+0.05; |
YoshihitoShimada | 0:6228c3688e54 | 156 | Rdata=Rdata+speed; Ldata=Ldata+speed; |
YoshihitoShimada | 0:6228c3688e54 | 157 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 158 | talk.Synthe("gennsoku.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 159 | break; |
YoshihitoShimada | 0:6228c3688e54 | 160 | case '*': // Acceleration |
YoshihitoShimada | 0:6228c3688e54 | 161 | speed=speed-0.05; |
YoshihitoShimada | 0:6228c3688e54 | 162 | Rdata=Rdata+speed; Ldata=Ldata+speed; |
YoshihitoShimada | 0:6228c3688e54 | 163 | Rin=Rdata; Lin=Ldata; |
YoshihitoShimada | 0:6228c3688e54 | 164 | talk.Synthe("kasoku.\r"); |
YoshihitoShimada | 0:6228c3688e54 | 165 | break; |
YoshihitoShimada | 0:6228c3688e54 | 166 | default: |
YoshihitoShimada | 0:6228c3688e54 | 167 | j--; |
YoshihitoShimada | 0:6228c3688e54 | 168 | if( j == 0) { |
YoshihitoShimada | 0:6228c3688e54 | 169 | talk.Synthe(" .\r"); |
YoshihitoShimada | 0:6228c3688e54 | 170 | j = count; |
YoshihitoShimada | 0:6228c3688e54 | 171 | } |
YoshihitoShimada | 0:6228c3688e54 | 172 | break; |
YoshihitoShimada | 0:6228c3688e54 | 173 | } |
YoshihitoShimada | 0:6228c3688e54 | 174 | buf='X'; |
YoshihitoShimada | 0:6228c3688e54 | 175 | moji[0]=0; |
YoshihitoShimada | 0:6228c3688e54 | 176 | } |
YoshihitoShimada | 0:6228c3688e54 | 177 | } |