【问题标题】:Sending more than one character from Qt to Arduino从 Qt 向 Arduino 发送多个字符
【发布时间】:2015-04-01 15:31:47
【问题描述】:

首先:对不起,我的英语不太好。

我正在 Qt (C++) 和 Arduino 之间进行串行通信。首先,我尝试向 Arduino 发送一个字符('1')以打开 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'");

}

【问题讨论】:

    标签: c++ qt arduino communication


    【解决方案1】:

    我想你正在使用 QT 中的 QSerialPort 类。

    从文档 (http://doc.qt.io/qt-5/qserialport-members.html) 中可以看出,您有三个函数重载了超类中的 write(...)

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        发送数据的最佳选择是使用您可以自己定义的协议。

        最好用十六进制值。

        首先定义一个数据包起始字节和数据包停止字节。例如 0x00 和 0x01。

        从串口读取 arduino 循环。直到找到 0x00。一旦它找到这个起始字节。将每个字符读入一个数组,直到找到停止字节 0x01。

        如果数据中显示 0x01,请使用转义字节。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多