сервоприводы работают 20-25 минут после зависают

IVAN222
Offline
Зарегистрирован: 19.04.2017

Суть программы , с копьютера по 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); 

}

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015
IVAN222
Offline
Зарегистрирован: 19.04.2017

исправил
 

 

 

IVAN222
Offline
Зарегистрирован: 19.04.2017

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

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

1. После строки 25 сбрасывайте readString, т.е. присваивайте её пустую строку: readString = ""; Зависать перестанет сразу.

2. Вы эе это смиволами передайте (координаты)? Вводите строку типа coordinate25. И хотите, чтобы x был 2, а y - 5? Или Вы координаты честными байтовыми числами передаёте? Если символами, то добавьте после строки 25 

x -= '0';
y -= '0';

Только, надеюсь Вы понимаете, что таким способом Вы можете передать только однозначные координаты? Т.е. x не может быть, например 15, т.к. это воспримется как x=1 и y=5

IVAN222
Offline
Зарегистрирован: 19.04.2017

Вставил после 25 строки  readString="";

Провожу тест , пока работает 25 минут.Если тупанет то отпишу.

IVAN222
Offline
Зарегистрирован: 19.04.2017

Проблема решилась, мне так кажется. 55 минут пока работает. СПАСИБО ОГРОМНОЕ ЕвгенийП ! 

IVAN222
Offline
Зарегистрирован: 19.04.2017

Координаты передаются байтовыми числами.