如何将Serial对象作为数字传递(使用arduino Serial的新库)。

我想创建一个新的库来控制arduino的串行库。

以下是我想要的…

主草图

#include <newLibrary.h>

newLibrary connection(2,9600); // 2 is Serial2, 9600 is baudRate

void main()
{
   connection.start();
}

newLibrary.cpp

newLibrary::newLibrary (uint8_t port, long baudRate)
{
   __port = port;
   __baudRate = baudRate;
}

void newLibrary::start()
{
   (Serial+port).begin(); // I need to add port to Serial to make Serial2
}

我想做的是:

用户将选择哪个Serial端口(例如SerialSerial1Serial2等……)将被用于.NET系统。

newLibrary connection(2,9600);  // 2 is Serial2, 9600 is baudRate

然后newLibrary.h中的start函数将用类似算法启动该Serial端口。


void newLibrary::start()
{
   (Serial+port).begin(); //  Which is equal to Serial.begin() or Serial1.begin() etc
}

我知道可以通过if语句或switch case来实现……。

但有没有其他方法?

比如说宏….

我知道可以用宏来实现,比如……。

#define serialPort (Serial##1) // so the serialPort refers to Serial1

但是这种方式对我来说不适用……

解决方案:

C++不支持 反思. 你不能在运行时建立变量名。

你可以在一个容器中存储对象的指针。

#include <array>

class S {
public:
    void begin() {}
} Serial, Serial1, Serial2;

int main() {
    std::array serials = {&Serial, &Serial1, &Serial2};
    std::uint8_t port = 1;
    serials[port]->begin();
}

给TA打赏
共{{data.count}}人
人已打赏
未分类

grep pygdal

2022-9-9 1:39:17

未分类

Mysql查询编号组行。

2022-9-9 1:39:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索