从Qt向Arduino发送多个角色

时间:2015-04-01 15:31:48

标签: c++ qt arduino communication

首先:抱歉,我对英语不太满意。

我在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'");

}

3 个答案:

答案 0 :(得分:0)

如果不了解Arduino的代码,我就无法提供详细帮助。你基本上要做的是以下几点:

  • 使用Qt应用程序将一些字符发送到串行接口。您可以通过拨打serial.write()
  • 来执行此操作
  • 在Arduino方面,你必须实现一个循环(或更好地捕获一个事件)来检查串行数据是否可用。
  • 在该循环(或捕获的事件)中,您可以读取每个字符并将其分配给变量。

查看documentation for Serial.read()serialEvent()

答案 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' }