在Arduino中自定义标准Serial.print函数

问题描述 投票:0回答:1

我需要测试一堆arduino单元,并想更改标准的HardwareSerial,因此它也将打印的内容发送到我的UDP服务器。与UDP服务器的通讯正常,那里没有问题。

我曾考虑将HardwareSerial库复制到我的项目/ src文件夹中,但是即使使用#include "src/HardwareSerial/HardwareSerial.h",它似乎也会忽略它并包括标准库。那里的东西也不会被执行。

用myUDPandprintfunction()替换所有Seri​​al.println()应该有点简单,但是我遇到了很多错误(草图相当大,宁愿只在一个地方更改代码。

关于最佳方法的任何建议?我在尝试过的所有方法上都遇到了很大的麻烦,可以就一些好的方法使用一些建议。我应该重新摆弄HardwareSerial.h吗?

编辑:似乎Arduino IDE在第1行中包含Arduino.h,即使那里什么也没有。依次包含标准的HardwareSerial.h。很不方便

此外,我想将我的自定义库文件放在项目文件夹中,以便与Git同步

c++ arduino libraries
1个回答
0
投票

编辑:找出正确的方法。我写了这样的头文件:

#ifndef UdpSerial_h
#define UdpSerial_h

#include <HardwareSerial.h>
#include "Arduino.h"

class UdpSerial: public HardwareSerial{
    using HardwareSerial::HardwareSerial;   // Inheriting constructors
    public: 
    size_t write(const uint8_t *buffer, size_t size);   // Overriding base functionality
};

extern UdpSerial udpSerial; // Making it available as udpSerial
#endif

以及一个.cpp文件,例如:

#include "udpSerial.h"

#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL)
UdpSerial udpSerial(0);
#endif

size_t UdpSerial::write(const uint8_t *buffer, size_t size){
    myExtraFunctionality();
    Print::write(buffer, size);
}

非常感谢@Delta_G为我指出了正确的方向

原始帖子:

现在,我放弃,只是编写一个包装函数,将打印输出到串行和UDP。然后将我项目中Serial.println()的〜100个调用更改为UDPWrapper()。对于可以放入的每种单个类型,分别编写重载。

仍然欢迎更好的建议,因为我不喜欢编写丑陋的代码

© www.soinside.com 2019 - 2024. All rights reserved.