Проблема з кодом для 3dof платформи

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

Здраствуйте уважаемие участники форума , столкнулся з проблемой.  нужна помощ.
проблема в следуещем, когда поступают данние з частотой 200 мс  то в условии if(Serial.available()) срабативает задержка и двигатель во время вращения приостанавливаеться,  может возникнут идеи как обойти задержу так чтоби буфер успевал заполниться.

#include <AccelStepper.h>
#include <string.h>
AccelStepper stepper(1, 9, 10);
AccelStepper stepper1(1, 7, 8);
AccelStepper stepper2(1, 5, 6);

void setup()

{
  Serial.begin(9600); 
  Serial.println("hello");
  stepper.setMaxSpeed(1000);
  stepper.setAcceleration(1000);
  } 
void loop() {         
  Serial.flush();
  int i=0;
  char buffer[100];
  int x1=0;
  int x2=0;
  int x3=0;
  if(Serial.available()){
     delay(100);
      
          while( Serial.available() && i< 99) {
        buffer[i++] = Serial.read();
     }
     
     buffer[i++]='\0';
  }
 
  if(i>0){  
 sscanf(buffer, "%d,%d,%d", &x1, &x2, &x3); 
   stepper.moveTo(x1);
   stepper.moveTo1(x2);
   stepper.moveTo2(x3);
  }
  
  stepper.run();
  stepper1.run();
  stepper2.run();
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Убрать delay? Или вы хотите идей с бубнами, танцами и хороводами?

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

Puhlyaviy пишет:
Убрать delay? Или вы хотите идей с бубнами, танцами и хороводами?

уберая делей не успевает зчитать з порта и заполнить буфер 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Плакалъ

maksim
Offline
Зарегистрирован: 12.02.2012
void loop() {
  if(Serial.available()){
    static char buffer[20];
    static byte i = 0;
    char ch = Serial.read();
    if(ch != '\n') buffer[i++] = ch;
    else
    {
      buffer[i] = '\0';
      i = 0;
      int x1 = 0, x2 = 0, x3 = 0;
      sscanf(buffer, "%d,%d,%d", &x1, &x2, &x3); 
      stepper.moveTo(x1);
      stepper1.moveTo(x2);
      stepper2.moveTo(x3);
    }
  }

  stepper.run();
  stepper1.run();
  stepper2.run();
}

Только в конце отправляемой строки добавьте символ "новой строки" - \n.

ve3yn4ik
Offline
Зарегистрирован: 17.06.2015

Спасибо !