2017-02-10 22 views
-1

Я строю робот, управляемый Интернетом, который использует 2 телефона Android для контроля. Первый телефон подключен к Arduino Uno через USB и служит экраном 3G. Второй телефон используется для управления всем этим. Он отправляет неназначенный байт на первый телефон, который отправляет его в Arduino. У приложений, которые я использую на телефонах, есть одна проблема. Джойстик в приложении не отправляет определенную команду, когда он находится в состоянии покоя. Например, когда я перемещаю его, он отправляет «1» на телефон, подключенный к Arduino, который двигает двигатели вперед, но когда я отпускаю джойстик, он прекращает отправку данных, однако двигатели моего робота все еще вращаются, пока я не сдвинуту джойстик вниз, «2» motor.run (RELEASE);Как выйти из цикла void в Arduino, если нет последовательных данных?

Как остановить двигатели, если нет серийных данных?

Это код, который я написал.

#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); 
} 

} 

В принципе, он ничего не должен делать, если данных нет.

ответ

0

Используйте свой код, как это, это поможет

void loop() { 

      if (Serial.available() > 0) { 
       byte command = Serial.read(); 

       if (command == 1) { 
        Serial.println("Move Forward"); 
        digitalWrite(ledPin, HIGH); 
        motor_left.run(FORWARD); 
       } else if (command == 2) { 
        Serial.println("Stop"); 
        digitalWrite(ledPin, LOW); 
        motor_left.run(RELEASE); 

       } else { 
        //put your code to stop Motor 
       } 


      } 
     } 
+0

К сожалению, это не работает, как двигатели stoppes спиннинг. Думаю, это из-за времени. когда Ардуино получает «1», следующим шагом является выполнение инструкции else и, поскольку оба случая выполняются почти одновременно, у моторов не хватает времени для вращения. Я попытался добавить 100 мс задержки на другое, но в этом случае каждые 100 мс мои моторы останавливаются в течение некоторого времени. – Fender90

+0

Я отредактировал свой ответ, пожалуйста, проверьте Если проблема будет такой, как вы описали, тогда она должна работать –