首先:抱歉,我对英语不太满意。
我在Qt(C ++)和Arduino之间进行串行通信。首先,我尝试将一个字符(' 1')发送到Arduino以打开LED并且它工作正常。现在我想发送多个角色。如何发送更多字符,以便每个字符都是Arduino代码中的变量?
这是我的一个角色的Qt代码:
void MainWindow::on_pushButton_clicked()
{
serial.setPortName("com17");
serial.setBaudRate(QSerialPort::Baud9600);
serial.setDataBits(QSerialPort::Data8);
serial.setParity(QSerialPort::NoParity);
serial.setStopBits(QSerialPort::OneStop);
serial.setFlowControl(QSerialPort::NoFlowControl);
serial.open(QIODevice::ReadWrite);
serial.write("'0'");
}
答案 0 :(得分:0)
如果不了解Arduino的代码,我就无法提供详细帮助。你基本上要做的是以下几点:
serial.write()
。答案 1 :(得分:0)
发送数据的最佳选择是使用您自己定义的协议。
最好值得十六进制。
首先定义数据包起始字节和数据包停止字节。例如0x00和0x01。
从串口读取arduino循环。直到找到0x00。一旦找到此起始字节。将每个字符读入一个数组,直到找到0x01为停止字节。
如果在数据中显示0x01,则使用转义字节。
答案 2 :(得分:0)
我想您正在使用QT的QSerialPort类。
从文档(http://doc.qt.io/qt-5/qserialport-members.html)中可以看出,你有三个函数重写了写(...),超类
write(const char *, qint64) : qint64
write(const char *) : qint64
write(const QByteArray &) : qint64
您实际使用"'0'"
发送的内容实际上是由三个字符,两个单引号和数字零组成的字符串。
如果您想发送多个字符,则必须将所有字符打包到QByteArray中。
您必须按以下方式调用serial.write()
QByteArray ba;
ba.append('1')
ba.append('2')
ba.append('3')
etc...
serial.write(ba)
通过这种方式,您可以发送由三个字节组成的数据{' 1',' 2',' 3' }