Я пытаюсь управлять автомобилем/колесным роботом в основном с помощью этого кода. Проблема в том, что если я посылаю сигналы быстрее, чем 0,9 секунды, Arduino не может обработать его. Есть ли способ исправить это?Arduino circuit не отвечает
(Я проверил серийный монитор с другого компьютера, и он показывает, что Arduino все еще получает сигнал, но он не дает выход на мой контроллер мотора).
Любая помощь будет оценена по достоинству. Благодарю.
#include <Servo.h>
//Using mega 2560 and sabertooth 2x12 dip switch 010111
int onevar;
int twovar;
Servo myservo;
Servo myservo2;
void setup() {
// put your setup code here, to run once:s
pinMode(servo1, OUTPUT);
pinMode(servo2, OUTPUT);
Serial.begin(9600);
myservo.attach(servo1);
myservo2.attach(servo2);
Serial.setTimeout(10);
//works for 10ms 0.9s need to figure out
}
void loop() {
// put your main code here, to run repeatedly:
// Receive up to 7 bytes
if (Serial.available()>0) {
// Wait for characters
onevar = Serial.parseInt();
twovar = Serial.parseInt();
//number = atoi(buffer);
Serial.println(onevar);
Serial.println(twovar);
/* if (Serial.available() > 0) {
number = Serial.read()-'0'; // read the incoming byte:
Serial.print(number);
*/
myservo.write(onevar);
// 93 is stop backward and forward is scalable range 25 to 155
myservo2.write(twovar);
//93 is no steering 30 to 160
}
}
Вы не показываете, что вызовет цикл, который не является циклом. Помимо этого: переместите глобальные переменные в локальные переменные в пределах функции, к которой они относятся, где это возможно. –
@WeatherVane - 'setup()' и 'loop()' вызывается из скрытого 'main()' на Arduino. 'main()' продолжает вызов цикла снова и снова. –
Я не знаю, как работает тайм-аут (для каждого символа или для каждого сообщения), но 9600 бод может получить только один символ за миллисекунду. Ваш тайм-аут составляет 10 миллисекунд, что немного жестко, чтобы получать два поля чисел в виде текста. –