Строка последовательного ввода Arduino разбита на несколько строк

Прежде всего, извините за непонятное название. Я пытаюсь создать простую программу на своем Arduino, которая повторяет последовательный ввод, полученный от последовательного монитора. Мой код такой:

String string= "";
String string2 = "";

void setup()
{
    Serial.begin(9600);

}

void loop() {


    string = "";

    while(Serial.available() > 0)
    {
        string += (char) Serial.read();
        Serial.flush();

    }


    if(string != "")
    {
        Serial.println(string); 
    }

}

Но когда я загружаю его, открываю монитор последовательного порта и вводю что-либо, он распределяется по нескольким строкам, вот так:

Input: Why are you doing this?

W
hy 
are y
ou doin
g this?

Я застрял на этом уже несколько часов. Мое устройство - Arduino Uno (Offical), я работаю на Windows 7. Заранее благодарим за любую помощь.

Изменить: Serial.print (string) ничего не возвращает, оставляет пустой экран консоли.


person Derek    schedule 09.02.2013    source источник


Ответы (2)


Используйте Serial.print(string); вместо println ()

println () Печатает данные на последовательный порт в виде удобочитаемого текста ASCII, за которым следует символ возврата каретки (ASCII 13 или '\ r') и символ новой строки (ASCII 10 или '\ n ').

Ссылка: http://arduino.cc/en/Serial/Println

person FGiL    schedule 09.02.2013
comment
Serial.print (string) ничего не возвращает, я забыл упомянуть об этом в своем исходном посте. - person Derek; 09.02.2013
comment
Привет, Деза, у меня это работает. Попробуйте создать новый пустой эскиз с помощью вашего кода. Проверьте скорость передачи данных монитора последовательного порта и выбранный последовательный порт. - person FGiL; 09.02.2013
comment
Также попробуйте вывести что-нибудь в начале, например Serial.println("Starting..."); - person FGiL; 09.02.2013
comment
Он работает с print () с официальной IDE arduino, похоже, это была проблема с IDE, которую я использовал, MariaMole. Теперь придется искать замену. Большое спасибо Вам. - person Derek; 09.02.2013

Просто сделайте небольшую задержку в цикле while, чтобы код был таким:

String string= "";
String string2 = "";

void setup()
{
    Serial.begin(9600);

}

void loop() {


    string = "";

    while(Serial.available() > 0)
    {
        string += (char) Serial.read();
        Serial.flush();
        delay(10);

    }


    if(string != "")
    {
        Serial.println(string); 
    }

}
person goc335    schedule 13.02.2013