Если я правильно понял то проблема в том как передать число?
вот пример функции получения числа, главное за диапазон int16_t не выйти
Код:
#define MAX_COUNT 5
int16_t read_number(){
int16_t tmp=0 //int16_t -32766 .. 32766
uint8_t count=0;
uint8_t b;
int8_t minus=1;
do{
//wait for next byte
while(!Serial.available()){delay(1);}
b = Serial.read();
if(count==0 && b== '-'){
minus=-1;
}else
if(b>= '0' && b<='9'){
tmp*=10;
tmp+=(b-'0');
count++;
}else{ //non integer byte!
return tmp*minus;
}
}while( count<MAX_COUNT )
return tmp*minus;
}
тогда твой код будет таким (пример послыки "f1000 ")
признаком окончания числа является любой не числовой символ, пробел,#,$,%,^ и т.п. как тебе удобнее,
либо 5 знаков,
но символ '-' в начале числа означает отрицательное
например
f-30000f20000
f1 f2 f30 f-2 f5
Код:
if (inc_b == 'f') //forward
{
NRot_tmp = 0;
NRot = read_number();//считываем число.
while(NRot_tmp < NRot)
{
forward();
NRot_tmp++;
}
for (int a=1; a < NRot; a++)
{
laying();
}
Serial.flush();
//Serial.print("forward ");
}
Добавлено спустя 19 минут 3 секунды:упс, в твоём коде нет обработки значения NRot <0, тут тебе нужно подумать как обрабатывать отрицательные значения.
Добавлено спустя 39 минут 27 секунд:>1. forward или backward должны, по замыслу, работать одновременно с laying. Сейчас этого не происходит.
а чтобы это работало, нужно сначала получить команду а потом приниматься за исполнение.
при этом счётчики положения у каждого двигателя должны быть свои.
_________________
R3
forum87/topic15337.html R2 roboforum.ru/forum102/topic13980.html
R4 roboforum.ru/post336339.html#p336339
Делать надо хорошо - плохо получится само!