トランジスタ技術2015年6月号 mbed ラジコン・カーp169-p184掲載
Dependencies: mbed
main.cpp
- Committer:
- YoshihitoShimada
- Date:
- 2015-06-01
- Revision:
- 0:6228c3688e54
File content as of revision 0:6228c3688e54:
#include "mbed.h" #include "ATP3012.h" Serial bluetooth(p9,p10); //tx, rx ATP3012 talk(P0_5, P0_4); // sda, scl PwmOut Rin(P0_8); PwmOut Lin(P0_9); PwmOut S40kHz(P0_21); DigitalOut IN1(P0_11); DigitalOut IN2(P0_12); AnalogIn Ain(P0_13); DigitalOut StopSignal(P0_20); DigitalOut Light(P0_16); int main() { bluetooth.baud(115200); int32_t i, j; int32_t count=10000; uint8_t buf='5'; char moji[64]; int32_t onsei=0; char* LightOn[64] = { "raitoon.\r", "tentou.\r" } ; char* LightOff[64] = { "raito/ohu.\r", "syoutou.\r" } ; char* Forward[64] = { "susume.\r", "<ALPHA VAL=start>.\r" } ; char* Stop[64] = { "tomare.\r", "<ALPHA VAL=stop>.\r" } ; char* Backward[64] = { "sagare.\r", "bakku.\r" } ; char* LeftTurn[64] = { "<ALPHA VAL=left>.\r", "sasetu.\r" } ; char* RightTurn[64] = { "raito.\r", "usetu.\r" } ; char* LeftBackward[64] = { "hidariusiro.\r", "usiro /hidari.\r" }; char* RightBackward[64] = { "migiusiro.\r", "usiro /migi.\r" }; char* LeftOblique[64] = { "naname/hidari.\r","hidari/naname.\r" }; char* RightOblique[64] = { "naname/migi.\r","migi/naname.\r" }; char* Acceleration[64] = { "hayaku.\r","supi-do/appu.\r" }; char* Deceleration[64] = { "osoku.\r","supi-do/daun.\r" }; float speed=0; float Rdata=1; float Ldata=1; float threshold=0.2; S40kHz.period_us(25); // 40kHz S40kHz.pulsewidth_us(12.5); Light=0; j = count; talk.Synthe("sumahode,ennbextudo'ka-o/ugoka'_su+koto'ga/dekima'_su.\r"); talk.Synthe("ta'xtu_chi+shite/ugoka'_shite+mi'te+kudasa'i.\r"); talk.Synthe("mata shabe'ttemo/je'_sucha-demo/ugokasema'_su.\r"); talk.Synthe("ma'zuwa buru-twu'-suni/setsuzo_kushimasho'-.\r"); while (1) { if(bluetooth.readable()) { i=0; do { buf=bluetooth.getc(); moji[i++]=buf; } while(buf!='\0'); buf=moji[0]; } for(int i = 0; i <= 1; i++) { if (strcmp(LeftBackward[i],moji) == 0) buf='1'; if (strcmp(Backward[i],moji) == 0) buf='2'; if (strcmp(RightBackward[i],moji) == 0) buf='3'; if (strcmp(LeftTurn[i],moji) == 0) buf='4'; if (strcmp(Stop[i],moji) == 0) buf='5'; if (strcmp(RightTurn[i],moji) == 0) buf='6'; if (strcmp(LeftOblique[i],moji) == 0) buf='7'; if (strcmp(Forward[i],moji) == 0) buf='8'; if (strcmp(RightOblique[i],moji) == 0) buf='9'; if (strcmp(LightOn[i],moji) == 0) buf='+'; if (strcmp(LightOff[i],moji) == 0) buf='-'; if (strcmp(Acceleration[i],moji) == 0) buf='*'; if (strcmp(Deceleration[i],moji) == 0) buf='0'; } if(Ain > threshold) { StopSignal=0; // Red LED ON if((buf>='4')){ buf='5'; IN1=1;IN2=1; if(onsei==1) { talk.Synthe("zennpo-ni sho-gai'butsuo/hakkennshima'_shita.\r"); talk.Synthe("ka'i_hi+shitekudasa'i.\r"); onsei=0; } } } else { StopSignal=1; // Red LED OFF onsei=1; } switch (buf){ case '1': // Left Backward IN1=1;IN2=0; Rdata=0.4+speed; Ldata=0.6+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("hidariusiro.\r"); break; case '2': // Backward IN1=1;IN2=0; Rdata=0.5+speed; Ldata=0.5+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("ushironi/sagarima'_su.\r"); break; case '3': // Right Backward IN1=1;IN2=0; Rdata=0.6+speed; Ldata=0.4+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("migiusiro.\r"); break; case '4': // Left Turn IN1=0;IN2=1; Rdata=0.3+speed; Ldata=0.8+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("sasetsu.\r"); break; case '5': // Stop IN1=1;IN2=1; break; case '6': // Right Turn IN1=0;IN2=1; Rdata=0.8+speed; Ldata=0.3+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("usetsu.\r"); break; case '7': // Left Oblique IN1=0;IN2=1; Rdata=0.4+speed; Ldata=0.6+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("hidarinana'me.\r"); break; case '8': // Forward IN1=0;IN2=1; Rdata=0.5+speed; Ldata=0.5+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("zennshinn.\r"); break; case '9': // Right Oblique IN1=0;IN2=1; Rdata=0.6+speed; Ldata=0.4+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("miginana'me.\r"); break; case '+': //Light On Light=1; talk.Synthe("#J\r"); talk.Synthe("ra'itoo/tennto-shima'_su.\r"); break; case '-': //Light Off Light=0; talk.Synthe("#J\r"); talk.Synthe("ra'itoo/keshima'_su.\r"); break; case '0': // Deceleration speed=speed+0.05; Rdata=Rdata+speed; Ldata=Ldata+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("gennsoku.\r"); break; case '*': // Acceleration speed=speed-0.05; Rdata=Rdata+speed; Ldata=Ldata+speed; Rin=Rdata; Lin=Ldata; talk.Synthe("kasoku.\r"); break; default: j--; if( j == 0) { talk.Synthe(" .\r"); j = count; } break; } buf='X'; moji[0]=0; } }