繁体   English   中英

从Arduino中的另一个文件访问c ++对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM