トランジスタ技術2015年6月号 mbed ラジコン・カーp169-p184掲載

Dependencies:   mbed

Committer:
YoshihitoShimada
Date:
Mon Jun 01 02:03:38 2015 +0000
Revision:
0:6228c3688e54
mbed test sample code

Who changed what in which revision?

UserRevisionLine numberNew 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 }