#include <Servo.h>
Servo myservo; // create servo object to control a servo
int pos = 90;
String kontrolstr = "";
char kontrol;
void setup()
{
Serial.begin(9600);
myservo.attach(9);// attaches the servo on pin 9 to the servo object
}
void loop()
{
if(Serial.available())
{
kontrol=Serial.read(); // it reads from python voice recognition
kontrolstr.concat(kontrol);
}
if(kontrolstr== "right")
{pos += 30;
kontrol = '0';
kontrolstr = "";
}
else if(kontrolstr== "left")
{pos -= 30;
kontrol= '0';
kontrolstr = "";
}
myservo.write(pos);
delay(100);
}
これはLinuxの端末でvoice_command.py(私が書いたもの)と一緒に動作します。コードがこのような場合、このコードをarduinoにアップロードした直後に、音声認識が「右」または「左」とは異なる単語を理解するまでうまく動作します。音声コマンドが "右"または "左"とは異なる別の文字列をarduinoに送信すると、プログラムは何のエラーもなく動作しますが、この時点以降は "右"または "左"コマンドに応答しなくなります。これを解決するために私はこの変更を行いました。arduino:他の人と一緒に働いていないプログラム
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int pos = 90;
String kontrolstr = "";
char kontrol;
void setup()
{
Serial.begin(9600);
myservo.attach(9);// attaches the servo on pin 9 to the servo object
}
void loop()
{
if(Serial.available())
{
kontrol=Serial.read();
kontrolstr.concat(kontrol);
}
if(kontrolstr== "right")
{pos += 30;
kontrol = '0';
kontrolstr = "";
}
else if(kontrolstr== "left")
{pos -= 30;
kontrol= '0';
kontrolstr = "";
}
else { // I write this to make it work..
kontrol = '0';
kontrolstr = "";
}
myservo.write(pos);
delay(100);
}
しかし、今では「右」と「左」のコマンドも応答していません。どうすればこの問題を解決できますか?
おそらく、Serial.available()ブロックはデータが入ってくると集計されますか?だからループの1回の反復で 'rig'を取得した場合、' else 'ブロックを打ち、 'ht'が入る前に文字列をリセットしますか? – Paul
お返事ありがとうございますが、私はあなたが明確に意味するものをキャッチできませんでした。特に「リグ」と「ht」部品。私はこの問題を解決するために何をすべきか理解していませんでした。私はそれをよく理解するためにそれを少し開くことができますか?私は途中でarduinoで新しいです: –