我需要测试一堆arduino单元,并想更改标准的HardwareSerial,因此它也将打印的内容发送到我的UDP服务器。与UDP服务器的通讯正常,那里没有问题。
我曾考虑将HardwareSerial库复制到我的项目/ src文件夹中,但是即使使用#include "src/HardwareSerial/HardwareSerial.h"
,它似乎也会忽略它并包括标准库。那里的东西也不会被执行。
用myUDPandprintfunction()替换所有Serial.println()应该有点简单,但是我遇到了很多错误(草图相当大,宁愿只在一个地方更改代码。
关于最佳方法的任何建议?我在尝试过的所有方法上都遇到了很大的麻烦,可以就一些好的方法使用一些建议。我应该重新摆弄HardwareSerial.h吗?
编辑:似乎Arduino IDE在第1行中包含Arduino.h,即使那里什么也没有。依次包含标准的HardwareSerial.h。很不方便
此外,我想将我的自定义库文件放在项目文件夹中,以便与Git同步
编辑:找出正确的方法。我写了这样的头文件:
#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()
。对于可以放入的每种单个类型,分别编写重载。
仍然欢迎更好的建议,因为我不喜欢编写丑陋的代码