gpt4 book ai didi

c++ - Arduino:在 Stream 对象上调用 serial.begin()

转载 作者:行者123 更新时间:2023-11-27 23:48:51 32 4
gpt4 key购买 nike

我正在尝试修改 this class这样我就可以同时使用 SoftwareSerialHardwareSerial 对象。因此,我添加了一个接受 Stream 对象的构造函数,该对象是 Software 和 HardwareSerial 的父类(super class):

/**
* Instantiates an SBUS object
* @param Stream* A HardwareSerial or SoftwareSerial object pointer
*/
SBUS::SBUS(const Stream *serialPort){
port = serialPort;
}

不幸的是,在 SBUS::begin() 方法中我必须调用 port->begin(BAUDRATE),尽管 begin() 作为方法存在于两个子类中,因为它不在 Stream 父类(super class)中,我无法调用它。

如何调用 port->begin()?我试图在 SBUS 构造和 SBUS::begin() 方法之间调用外部硬件或 SoftwareSerial 对象上的 begin(),但这似乎没有初始化SBUS 对象正确。有没有办法从 SBUS 类内部调用 begin()

我非常感谢任何帮助。 (FUTABA_SBUS 已更改为 SBUS 以便于编程)

最佳答案

static_cast 因为对于 dynamic_cast 你必须启用 RTTI

bool hwSerial;
Stream * port;
SBUS::SBUS(SoftwareSerial * serial) {hwserial = false; port = serial;}
SBUS::SBUS(HardwareSerial * serial) {swserial = true; port = serial;}

Then you can do something like this:
SBUS::portBegin(long baudrate) {
if(hwserial) {
static_cast<HardwareSerial*>(port)->begin(baudrate);
} else {
static_cast<SoftwareSerial*>(port)->begin(baudrate);
}

关于c++ - Arduino:在 Stream 对象上调用 serial.begin(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48353981/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com