#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]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS