我想从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);
}
}