-1
私は制御するために2つのアンドロイド携帯電話を使用するインターネット制御ロボットを構築しています。 最初の電話はUSB経由でArduino Unoに接続され、3Gシールドとして機能します 2台目の電話機はすべてを制御します。それはArduinoにそれを送る最初の電話に割り当てられていないバイトを送ります。 私が電話で使用するアプリには1つの問題があります。アプリ内のジョイスティックは、休憩中に特定のコマンドを送信しません。例えば、私がそれを上に動かすと、Arduinoに接続された電話機に "1"が送信されます.Arduinoに接続されている電話機は前方に移動しますが、ジョイスティックを放すとデータは送信されませんが、 "2" motor.run(RELEASE);シリアルデータがない場合はArduinoのvoid loopを終了するには?
シリアルデータがない場合、どのようにモータを停止できますか?
これは私が書いたコードです。
#include <AFMotor.h>
AF_DCMotor motor_left(2, MOTOR12_1KHZ);
AF_DCMotor motor_right(3, MOTOR12_1KHZ);
int ledPin = 13;
int speed_min = 100; //the minimum "speed" the motors will turn - take it lower and motors don't turn
int speed_max = 1000; //the maximum "speed" the motors will turn – you can’t put in higher
int speed_left = speed_max; // set both motors to maximum speed
int speed_right = speed_max;
int command = 0;
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
motor_left.setSpeed(255);
motor_left.run(RELEASE);
motor_right.setSpeed(255);
motor_right.run(RELEASE);
motor_left.setSpeed(speed_left); // minimum speed 135 max speed 255
motor_right.setSpeed(speed_right); // minimum speed 135 max speed 255
}
void loop() {
if (Serial.available() > 0);
byte command = Serial.read();
if (command == 1)
{
Serial.println("Move Forward");
digitalWrite(ledPin, HIGH);
motor_left.run(FORWARD);
}
if (command == 2)
{
Serial.println("Stop");
digitalWrite(ledPin, LOW);
motor_left.run(RELEASE);
}
}
利用可能なデータがない場合、基本的には何もしません。
残念ながら、これはモーターstoppesスピニングとして機能しなかったのに役立ちます。私はこれがタイミングのためだと思う。 Arduinoが "1"を受け取ったとき、次のステップはelseステートメントを実行することです。両方のケースがほぼ同時に実行されるため、モトは回転するのに十分な時間がありません。私は100msの遅延をelseに追加しようとしましたが、この場合、それぞれの100msのモータがしばらく停止します。 – Fender90
私の答えを編集しました 問題があなたの説明どおりになるなら、それはうまくいくはずです –