сервоприводы работают 20-25 минут после зависают
- Войдите на сайт для отправки комментариев
Суть программы , с копьютера по COM порту идут данные координаты Х и У , ардуино их получает и переводит в градусы поворота сервоприводов от 0 - 54 , все роботает нормально , но проходит 20-25 минут сервы могут завернуться кудато в сторону, а могут и нет , и все, происходит зависание сервоприводов, хотя ТХ мигает то есть данные с компа идут, нажимаю RESET на ардуинке опять начинает работать нормально примерно 20-25 мин. В ЧЕМ МОЖЕТ БЫТЬ ДЕЛО?
Вот скеч.
#include <Servo.h>
Servo servo1;
Servo servo2;
int x=27;
int y=20;
int ledPin = 13;
String datas;
String readString;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(115200);
servo1.attach(10);
servo2.attach(11);
}
void loop() {
if(Serial.available() > 0) {
//datas = Serial.read();
char c = Serial.read();
readString += c;
if(readString.indexOf("coordinate") >=0){
x=Serial.read();
delay(3);
y=Serial.read();
}
}
servo1.write(x);
servo2.write(y);
}
http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...
исправил
[quote=IVAN222]
Суть программы , с копьютера по COM порту идут данные координаты Х и У , ардуино их получает и переводит в градусы поворота сервоприводов от 0 - 54 , все роботает нормально , но проходит 20-25 минут сервы могут завернуться кудато в сторону, а могут и нет , и все, происходит зависание сервоприводов, хотя ТХ мигает то есть данные с компа идут, нажимаю RESET на ардуинке опять начинает работать нормально примерно 20-25 мин. В ЧЕМ МОЖЕТ БЫТЬ ДЕЛО?
Вот скеч.
#include <Servo.h> Servo servo1; Servo servo2; int x=27; int y=20; int ledPin = 13; String datas; String readString; void setup() { pinMode(ledPin, OUTPUT); Serial.begin(115200); servo1.attach(10); servo2.attach(11); } void loop() { if(Serial.available() > 0) { //datas = Serial.read(); char c = Serial.read(); readString += c; if(readString.indexOf("coordinate") >=0){ x=Serial.read(); delay(3); y=Serial.read(); } } servo1.write(x); servo2.write(y); }1. После строки 25 сбрасывайте readString, т.е. присваивайте её пустую строку: readString = ""; Зависать перестанет сразу.
2. Вы эе это смиволами передайте (координаты)? Вводите строку типа coordinate25. И хотите, чтобы x был 2, а y - 5? Или Вы координаты честными байтовыми числами передаёте? Если символами, то добавьте после строки 25
x -= '0';
y -= '0';
Только, надеюсь Вы понимаете, что таким способом Вы можете передать только однозначные координаты? Т.е. x не может быть, например 15, т.к. это воспримется как x=1 и y=5
Вставил после 25 строки readString="";
Провожу тест , пока работает 25 минут.Если тупанет то отпишу.
Проблема решилась, мне так кажется. 55 минут пока работает. СПАСИБО ОГРОМНОЕ ЕвгенийП !
Координаты передаются байтовыми числами.