Приветствую.Подскажите пожалуйста, целый день пытаюсь разобраться с кодом. Задача: джойстик передает через UART данные вида (положение по осьХ, осьУ, кнопки).
На принимающей части пакет данных обрабатывается функцией sscanf(buffer, "%[^','],%[^','],%s", &strX, &strY, &key); . Кнопки отлично обрабатываются, а вот с осями проблема, .toInt() выдает некорректные результаты. Сервы не вращаются.
Код:
Передатчик
int X = analogRead(axisX);
int Y = analogRead(axisY);
Serial.print(X);
Serial.print(",");
Serial.print(Y);
Serial.print(",");
Serial.println(key);
//Serial.println('\n');
Код:
Приемник
Servo servX;
Servo servY;
int servXPoz = 90;
int servYPoz = 0;
int valX;
int valY;
char key ;
String strX;
String strY;
void loop() {
int i=0;
char buffer[12];
if(Serial.available()){
delay(50);
while( Serial.available() && i< 12) {
buffer[i++] = Serial.read();
}
buffer[i++]='\n';
}
if(i>0){
sscanf(buffer, "%[^','],%[^','],%s", &strX, &strY, &key);
}
valX = strX.toInt();
//valX = atoi(strX);
servXPoz = map(valX, 0, 1023, 0, 180);
servX.write(servXPoz);
valY = strY.toInt();
servYPoz = map(valY, 0, 1023, 0, 180);
servY.write(servYPoz);
moving();
}
void moving(){
switch(key){
case '5':
ServPravo();
break;
case '4':
ServLevo();
break;
case '3':
ServCentr();
break;
}
}
void ServPravo(){
servXPoz = 0;
servYPoz = 0;
servX.write(servXPoz);
servY.write(servYPoz);
}
void ServLevo(){
servXPoz = 180;
servYPoz = 0;
servX.write(servXPoz);
servY.write(servYPoz);
}
void ServCentr(){
servXPoz = 90;
servYPoz = 0;
servX.write(servXPoz);
servY.write(servYPoz);
}