#author("2018-07-11T19:23:04+09:00","default:pbl","pbl") #author("2018-07-11T19:23:26+09:00","default:pbl","pbl") **進捗・残り作業 [#qdb7a763] -だいたい完成した -ディスプレイに表示する顔の作成 -音声認識関連で少し手直し -パワーポイントの作成 **連絡事項 [#q8a78a2c] -PC2台と作品に使用するパーツをお借りしています. **必要な物 [#ha68c6ab] -[[電池スナップ DC変換>https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-4CTP]] **学習させた用語とindex [#vee91cf2] |0|前| |1|後ろ| |2|左| |3|右| |4|こんにちは| |5|へいshiri| |6|おみくじ| |7|元気?| ***問題点 [#v4ce75e9] -電源落としたりすると学習させた内容がおかしくなる -学習はあきらめた **プログラム [#kf21ca8d] ***本体(車) [#d9a8f43d] #region(program) #include <time.h> #include <SoftwareSerial.h> #define motorR1 8 #define motorR2 9 #define motorRout 3 #define motorL1 5 #define motorL2 12 #define motorLout 13 SoftwareSerial mySerial(10,11); // RX, TX int i; int phrase_state; int motor_sec; void setup() { Serial.begin(9600); mySerial.begin(9600); mySerial.println("?"); srand(time(NULL)); pinMode(motorR1, OUTPUT); //信号用ピン pinMode(motorR2, OUTPUT); //信号用ピン pinMode(motorL1, OUTPUT); //信号用ピン pinMode(motorL2, OUTPUT); //信号用ピン i = 0; phrase_state = 1; motor_sec = 3000; } //静止 void stop() { digitalWrite(motorR1, LOW); digitalWrite(motorR2, LOW); digitalWrite(motorL1, LOW); digitalWrite(motorL2, LOW); } //前進 void forward() { digitalWrite(motorR1, HIGH); digitalWrite(motorR2, LOW); digitalWrite(motorL1, HIGH); digitalWrite(motorL2, LOW); } //後退 void back() { digitalWrite(motorR1, LOW); digitalWrite(motorR2, HIGH); digitalWrite(motorL1, LOW); digitalWrite(motorL2, HIGH); } void left() { digitalWrite(motorR1, HIGH); digitalWrite(motorR2, LOW); digitalWrite(motorL1, LOW); digitalWrite(motorL2, HIGH); } void right() { digitalWrite(motorR1, LOW); digitalWrite(motorR2, HIGH); digitalWrite(motorL1, HIGH); digitalWrite(motorL2, LOW); } void motorCtr(int select, int sec) { switch (select) { case 0: stop(); break; case 1: forward(); break; case 2: back(); break; case 3: left(); break; case 4: right(); break; } analogWrite(motorRout, 255); //出力値:1~255 analogWrite(motorLout, 255); //出力値:1~255 delay(sec); } void loop() { //i = ++i % 5; //motorCtr(i, motor_sec); byte x; if (Serial.available()) { x = Serial.read(); if (x == 'S') { /* motor stops */ motorCtr(0, motor_sec); } else if (x == 'F') { /* motor foward */ motorCtr(1, motor_sec); } else if (x == 'B') { /* motor back */ motorCtr(2, motor_sec); } else if (x == 'R') { /* motor right */ motorCtr(3, motor_sec); } else if (x == 'L') { /* motor left */ motorCtr(4, motor_sec); } /*else if (x == 'G') { greeting mySerial.print("konnitiwa--\r"); } else if (x == '') { mySerial.print("watashiwashiridewaarimasen"); } else if (x == '') { int omikuzi = rand() % 3; switch (omikuzi) { case 0: mySerial.print("daikitidesu"); mySerial.print("omedetougozaimasuooataridesu"); break; case 1: mySerial.print("kyoudesu"); mySerial.print("kyouwaunngawaruimitaidesu"); break; case 2: mySerial.print("yazawaeikiti"); delay(1000); mySerial.print("gomennnasai"); break; } mySerial.print(""); }*/ } else { /* int action = rand() % 5; switch (action) { case 0: mySerial.print("sorosorotukaretana---\r"); break; default: motorCtr(random() % 5, 1000); }*/ } } #endregion ***コントローラ(音声認識) [#kcf8c8e6] #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX #define DELAY() delay( 20 ); #define CMD_BREAK() cmd0( 'b' ) #define CMD_SLEEP(x) cmd1( 's', (x)+0x41 ) #define CMD_LANGUAGE(x) cmd1( 'l', (x)+0x41 ) #define CMD_TIMEOUT(x) cmd1( 'o', (x)+0x41 ) #define CMD_BAUDRATE(x) cmd1( 'a', (x)+0x41 ) #define CMD_RESETALL() cmd1( 'r', 'R' ) #define CMD_RECOG_SI(x) cmd1r1( 'i', (x)+0x41, 's' ) #define LANG_En 0 #define LANG_It 1 #define LANG_Ja 2 #define LANG_De 3 #define LANG_Es 4 #define LANG_Fr 5 #define PHRASE_action 1 #define PHRASE_direction 2 #define PHRASE_number 3 int cmd0( byte cmd ) { int r; mySerial.write( cmd ); DELAY(); while ( mySerial.available() <= 0 ); r = mySerial.read(); DELAY(); return r; } int cmd1( byte cmd, byte arg ) { int r; mySerial.write( cmd ); DELAY(); mySerial.write( arg ); DELAY(); while ( mySerial.available() <= 0 ); r = mySerial.read(); DELAY(); return r; } int cmd1r1( byte cmd, byte arg, byte succ ) { int r; mySerial.write( cmd ); DELAY(); mySerial.write( arg ); DELAY(); while ( mySerial.available() <= 0 ); r = mySerial.read(); DELAY(); if ( r != succ ) return r; mySerial.write( ' ' ); DELAY(); while ( mySerial.available() <= 0 ); r = mySerial.read(); DELAY(); return r - 0x41; } void setup() { Serial.begin( 9600 ); pinMode( 10, INPUT ); pinMode( 11, OUTPUT ); mySerial.begin( 9600 ); while ( CMD_BREAK() != 'o' ); CMD_LANGUAGE( LANG_Ja ); } void loop() { int x; x = CMD_RECOG_SI(PHRASE_direction); switch ( x ) { case 't': Serial.println( "Time out" ); break; case 'e': Serial.println( "Cannot regognize" ); break; case 0: Serial.write( 'L' ); Serial.println("0-0"); break; case 1: Serial.write( 'R' ); Serial.println("1-1"); break; case 2: Serial.write( 'S' ); Serial.println("2-2"); break; case 4: Serial.write( 'F' ); Serial.println("3-3"); break; case 5: Serial.write( 'B' ); Serial.println("4-4"); break; default: Serial.println( x ); break; } } ***ディスプレイ(表情) [#c49e1828]