我想从csv文件中读取一个字符列表,然后通过串口将该列表发送到Arduino,每个值之间有一些延迟 . 如果我发送隔离数据,arduino会收到它 . 我可以通过闪烁内置LED来检查接收 . (如果收到'1'则将其打开,如果收到'0'则关闭)但是当我发送整个列表时:

for (int i =0; i < data.length(); i ++) {
    arduino->write(data[i]);
    Sleep(100);
}

Arduino只考虑收到的最后一条信息 . 我认为Qt不会通过串口发送任何东西,直到循环结束,然后它立即发送所有数据(忽略 Sleep(100); ),因此所有信息,但跳过最后一个 . 我认为Qt暂时将信息存储在一个缓冲区中,我试图通过在循环中添加 arduino->flush(); 来每次写入内容时刷新缓冲区 . arduino仍然在循环结束时收到所有信息,而不是逐步收到 . 我试图在循环中放入arduino-> flush以确保整个缓冲区已经发送:

while(arduino->flush() == true) {}

但这会导致无限循环 .

这是下面的Qt代码:

void MainWindow::on_pushButton_clicked()
{
     QStringList wordList;
     QFile f("file.csv");

     if (f.open(QIODevice::ReadOnly))
     {
     //file opened successfully

        QString stringData;
        char readData[200];
        while (f.readLine(readData, 200)>0)
        {
            Sleep(50);
            stringData = QString(readData);
            wordList = stringData.split(';');
            if (wordList.length()==6)
            {
                data.append(QString("%1\n").arg(wordList[0]));
            }
        }
        f.close();
        for(int i = 0; i < data.length(); i ++)
        {
            commuSerial(data[i]);
            Sleep(500);
        }

     }

}
void MainWindow::commuSerial(QString data)
{
   arduino->write(data.toStdString().c_str());
   arduino->flush();
}

这是Arduino代码(虽然我很确定这个代码没有任何错误)

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

void loop() {
    if (Serial.available() > 0){
        int data= Serial.parseInt();
        digitalWrite(13, data);
    }
}