Добрый день. Столкнулся с проблемой при передаче данных с аналогового стика на ПК по Serial соединению. Данные передаю по одному каналу в виде строки. Допустим в исходном состоянии джойстика на ПК передается строчка 332-332-1. Первые 3 цифры - координата X, следующие 3 - Y, последний элемент - контроль нажатия кнопки. При повороте джойстика меняется порядок числа, и получается, например, 0-0-1. Вопрос, как сделать так, чтобы число разрядов осталось фиксированным, по 3 на координату? Другими словами надо получить вектор данных 000-000-1. В си для print должны быть спецификаторы типа %03d, но у меня почему-то они не работают. На всякий случай прикладываю код. Код (C++): #include <stdio.h> int xPin = A0; int yPin = A1; int buttonPin = 2; int xPosition = 000; int yPosition = 000; int buttonState = 0; void setup() { // initialize serial communications at 9600 bps: Serial.begin(9600); pinMode(xPin, INPUT); pinMode(yPin, INPUT); //activate pull-up resistor on the push-button pin pinMode(buttonPin, INPUT_PULLUP); } void loop() { xPosition = map(analogRead(xPin),0,1023,0,640); yPosition = map(analogRead(yPin),0,1023,0,640); buttonState = digitalRead(buttonPin); Serial.print(xPosition); Serial.print(yPosition); Serial.println(buttonState); delay(50); // add some delay between reads }
Для printf. Можно примерно так: Код (Text): char strbuf[20]; sprintf(strbuf,"%03d-%03d-%1d",xPosition,yPosition,buttonState); Serial.println(strbuf); Только в качестве разделителя лучше использовать не минус (а как вдруг отрицательные числе придется передавать), а какой-нибудь другой символ, например, точку с запятой.