Форматирование вывода текста на Arduino Uno

Тема в разделе "Arduino & Shields", создана пользователем EugenF, 26 сен 2015.

  1. EugenF

    EugenF Нуб

    Добрый день. Столкнулся с проблемой при передаче данных с аналогового стика на ПК по 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
    }
     
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    А если %.3d ?
     
  3. geher

    geher Гуру

    Для printf.
    Можно примерно так:
    Код (Text):

    char strbuf[20];
    sprintf(strbuf,"%03d-%03d-%1d",xPosition,yPosition,buttonState);
    Serial.println(strbuf);
     
    Только в качестве разделителя лучше использовать не минус (а как вдруг отрицательные числе придется передавать), а какой-нибудь другой символ, например, точку с запятой.
     
    EugenF нравится это.
  4. EugenF

    EugenF Нуб

    Спасибо