Код: Выделить всё
char direct[3]; //3
char st[6]; //6
char sp[2]; //2
char buffer[12]; //12
void setup()
{
Serial.begin(9600);
...
}
void loop()
{
int k = 0;
...
direct[0] = '\n';
st[0] = '\n';
sp[0] = '\n';
...
while(Serial.available() > 0) // Загоняем прочитанное в буфер
{
buffer[k] = Serial.read();
k++;
delay(5);
}
buffer[k++] = '\n'; // Закрываем массив
if(k>0) // Если буфер наполнен
{
sscanf(buffer, "%[^','],%[^','],%[^',']", &direct, &st, &sp); // Разбираем его на части отделенные запятой
}
S = String(st).toInt();
V = String(sp).toInt();
...
// Крутим вправо (RIGHT)/////////////////////
if ((String)direct == "r" && rightStop == LOW)
{
digitalWrite(magn, LOW);
for (i=0; i<S; i++)
{
digitalWrite(dirpin1, LOW); // Выбираем направление
digitalWrite(steppin1, LOW);
digitalWrite(steppin1, HIGH);
delay(V);
}
digitalWrite(magn, HIGH);
}
В коде описан процесс обмена на стороне ардуино. Сначала здесь: символ конца строки оставил стандарт для LabVIEW (\n). На форуме ардуино говорят, что это критичный момент и лучше использовать для закрытия пакета \0. Если конец \n, то в LabVIEW termination character будет 10, если \0 - то 0. Верно? Символ окончания строки говорит о конце пакета передачи, а для чего нужен символ возврата каретки и нужно ли его вообще использовать?
Например возьмем в коде
char direct[3];
direct[0] = '\n';
здесь у меня предусмотрена передача до 2х символов (например "r" или "sb") и + "\n". Т.е. в пакете максимум 3 символа. Этого достаточно для правильного формирования пакета?
Также хотел бы услышать мнение знающих Си о функции
sscanf(buffer, "%[^','],%[^','],%[^',']", &direct, &st, &sp);
прочитал, что функция довольно тяжелая, но проще описать комплект команд я не смог. Насколько это может быть критично?
Думаю для начала достаточно. Вопросы еще будут. Очень прошу помочь.
С уважением, Александр.