Конкатенация строк с Arduino

У меня есть очень короткий пример программы, работающей на устройстве Arduino Fio. Эта программа отправляет серийные данные. Подключенное маршрутизатор Xbee получает эти данные и отправляет их на устройство координатора Xbee, подключенное к моему ноутбуку. Программа также считывает данные с последовательного порта. Я могу отправить 1 или 0 включить или выключить светодиод устройства Fio.

Включение или выключение светодиода путем отправки 1 или 0 из терминала на моем ноутбуке работает хорошо.

Но когда я пытаюсь прочитать данные, которые отправляет устройство Fio, я получаю следующее:

his direction works 
is direction works 
s direction works 
 direction works 
direction works 
irection works 
rection works 
ection works 
ction works

... и так далее.

Но я ожидаю строку ("This direction works " + counter++;), как вы можете видеть в следующем примере кода.

Вот короткий набросок Arduino:

int incomingByte = 0;   // for incoming serial data
 int counter = 0;

void setup()
{
    Serial.begin(57600);
    pinMode(13,OUTPUT);

    // blink twice at startup
    digitalWrite(13, LOW);
    delay(1000);

    digitalWrite(13, HIGH); // first blink
    delay(50);
    digitalWrite(13, LOW);
    delay(200);
    digitalWrite(13, HIGH); // second blink
    delay(50);
    digitalWrite(13, LOW);
}

void loop()
{   
    // send data only when you receive data:
    if (Serial.available() > 0) 
    {
        // read the incoming byte:
        incomingByte = Serial.read();

        if(incomingByte == '0')
        {
            digitalWrite(13, LOW);
        }
        else if(incomingByte == '1')
        {
            digitalWrite(13, HIGH);
        }

        // say what you got:
        Serial.print("Fio received: ");
        Serial.write(incomingByte);  // Arduino 1.0 compatibility
        Serial.write(10);    // send a line feed/new line, ascii 10
    }
    else
    {
        String sendData = "This direction works " + counter++;
        Serial.println(sendData);       
        delay(1500);
    }   
}

Что я делаю не так? Почему я не получаю:

This direction works 0
This direction works 1
This direction works 2
This direction works 3

... и так далее?

1 ответ

Решение

Как отметили @Elric и @Olaf в комментариях, сделать это невозможно, как в моем опубликованном коде.

После прочтения документации я снова нашел "объяснение":

Внимание: вы должны быть осторожны при объединении нескольких типов переменных в одной строке, так как вы можете получить неожиданные результаты. Например:

int sensorValue = analogRead (A0); String stringOne = "Значение датчика:"; String stringThree = stringOne + sensorValue;
Serial.println (stringThree);

приводит к "значению датчика: 402" или какому-либо аналогу аналога Read(), но

int sensorValue = analogRead(A0); String stringThree = "Значение датчика: " + sensorValue; Serial.println(stringThree);

дает непредсказуемые результаты, потому что stringThree никогда не получал начальное значение, прежде чем вы начали объединять различные типы данных.

Во-первых, вы должны инициализировать переменную String, чтобы присвоить ей две соединенные строки.

Другие вопросы по тегам