串行对象作为 Arduino 中的函数参数

Serial object as function parameter in Arduino

本文关键字:函数 参数 Arduino 对象      更新时间:2023-10-16

我有一个名为Client的类。该类的构造函数定义为

Client(HardwareSerial * serial);

我的班级里还有一个私人领域HardwareSerial * serial。在构造函数中,我分配了this->serial = serial.该类使用 Client * client = new Client(&Serial2); 启动。

一切都很好,直到我在构造函数中调用this->serial->begin(baud)。Arduino在这一点之后卡住了。发生了什么事情?

类定义

#include <HardwareSerial.h>
class Client {
  private:
    HardwareSerial * serial;
  public:
    Client(HardwareSerial * serial);
};

类实现

#include "Client.h"
Client::Client(HardwareSerial * serial) {
  this->serial = serial;
  this->serial->begin(115200);
}

和实例化

Client * client = new Client(&Serial2);

将 Stream 对象传递给类(当然,更改变量类型(并在 Arduino 设置函数中调用 begin 可以工作,但这不是最佳选择。这样,类就不会处理 begin 函数的调用。

构造函数在串行接口初始化之前被调用。

您需要有一个begin方法,然后在setup() 中调用该方法。

客户.h

#include <HardwareSerial.h>
class Client {
  private:
    HardwareSerial * serial;
  public:
    Client(HardwareSerial * serial);
    void begin();
};

客户端.cpp

#include "Client.h"
Client::Client(HardwareSerial * serial) {
  this->serial = serial;
}
void Client::begin() {
  this->serial->begin(115200);
}

您的程序:

#include "Client.h"
Client * client = new Client(&Serial2);
void setup() {
  client->begin();
}