Я строю робот, управляемый Интернетом, который использует 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);
}
}
В принципе, он ничего не должен делать, если данных нет.
К сожалению, это не работает, как двигатели stoppes спиннинг. Думаю, это из-за времени. когда Ардуино получает «1», следующим шагом является выполнение инструкции else и, поскольку оба случая выполняются почти одновременно, у моторов не хватает времени для вращения. Я попытался добавить 100 мс задержки на другое, но в этом случае каждые 100 мс мои моторы останавливаются в течение некоторого времени. – Fender90
Я отредактировал свой ответ, пожалуйста, проверьте Если проблема будет такой, как вы описали, тогда она должна работать –