Проблема з кодом для 3dof платформи
- Войдите на сайт для отправки комментариев
Ср, 17/06/2015 - 19:34
Здраствуйте уважаемие участники форума , столкнулся з проблемой. нужна помощ.
проблема в следуещем, когда поступают данние з частотой 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();
}
Убрать delay? Или вы хотите идей с бубнами, танцами и хороводами?
уберая делей не успевает зчитать з порта и заполнить буфер
Плакалъ
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.
Спасибо !