[英]access c++ objects from another file in Arduino
在我的Arduino文件TimerTime.ino中
#include "Arduino.h"
#include "Pulse.h"
#include <elapsedMillis.h>
elapsedMillis timeElapsed ;
Pulse trigger(45,60) ; //45 is pin number, 60 is pulse interval in msec
当我定义Pulse.cpp
#include "Arduino.h"
#include "Pulse.h"
Pulse::Pulse(int pin, long interval)
{
_pin = pin ;
pinMode(_pin, OUTPUT);
_interval = interval);
}
void Pulse::PulseOut()
{
if(timeElapsed > _previousTime + _interval)
digitalWrite(_pin,LOW);
}
我收到一个编译器错误,指出timeElapsed不在此文件范围内,我不了解足够的C ++来理解访问机制,所以有人可以向我指出正确的解决方案。
声明全局变量elapsedMillis timeElapsed;
在您的草图中,它仅对该文件可见,而对其他文件不可见。
在Pulse.cpp中,在包含之后,您可以添加语句
#include <elapsedMillis.h>
extern elapsedMillis timeElapsed;
这告诉C ++编译器您要在该文件中使用的另一个文件中定义了一个全局变量。 然后,编译器将知道不为其分配新的存储,而是为其创建一个占位符,以便在链接阶段将其胶合在一起,指向在草图中创建的存储。
通常,全局变量并不是一个好主意。
根据您要对Pulse类和timeElapsed进行的其他操作,您有多种选择:
将timeElapsed作为参数传递给构造函数
通过时间已作为PulseOut的参数使用
使时间经过Pulse对象的一个字段(使用getter / setter的public或private)
完全不使用OOP:如果您对C更加熟悉,请坚持使用它,您将有更多的机会来生成可以按需工作并且更易于调试的代码。 恕我直言,Arduino不是学习OOP的最佳选择,因为它使调试变得比仅依赖于普通PC的典型OOP学习路径难得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.