首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino/C++交叉函数变量

Arduino/C++交叉函数变量
EN

Stack Overflow用户
提问于 2014-02-08 05:00:11
回答 2查看 1.2K关注 0票数 1

我试图创建一个Arduino库,在这个库中,我需要在一个函数(rgbInitiate)中声明和初始化三个变量(redpin_ledIDgreenpin_ledIDbluepin_ledID),以便另一个函数(rgbMixer)可以使用它们,而不需要第一个函数调用第二个函数。

(请注意,此代码包含在Arduino库中。)

代码语言:javascript
复制
int rgbInitiate(int ledID, int redpin, int greenpin, int bluepin)
{   
    int redpin_ledID;
    int greenpin_ledID;
    int bluepin_ledID;
    redpin_ledID = redpin;
    greenpin_ledID = greenpin;
    bluepin_ledID = bluepin;
    pinMode(redpin_ledID, OUTPUT);
    pinMode(greenpin_ledID, OUTPUT);
    pinMode(bluepin_ledID, OUTPUT);
}

void rgbMixer(int ledID, int redvalue, int greenvalue, int bluevalue)
{   
    analogWrite(redpin_ledID, redvalue);
    analogWrite(greenpin_ledID, greenvalue);
    analogWrite(bluepin_ledID, bluevalue);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-09 09:14:39

在靠近的地方,只需将引脚变量定义移出函数即可。这将使他们有一个永久的生命。除了定义在其中的.CPP文件之外,您的库可能不需要任何模块来使用变量'redpin‘等。下面添加的“静态”意味着这些变量对其他代码模块是不可见的。这意味着如果某个应用程序偶然使用了一个变量'redpin‘,那么它将不会干扰您的代码。

代码语言:javascript
复制
// somefile.cpp
static int redpin;
static int greenpin;
static int bluepin;

int rgbInitiate(int redpin, int greenpin, int bluepin) {   
  redpin = redpin;
  greenpin = greenpin;
  bluepin = bluepin;
  ...
}

void rgbMixer(int redvalue, int greenvalue, int bluevalue) {   
  analogWrite(redpin, redvalue);
  analogWrite(greenpin, greenvalue);
  analogWrite(bluepin, bluevalue);
}

你没有使用ledID。你认为有不止一个LED吗?C++不会动态地构造变量名。如果你要有N个LED,那么上面会使用一个数组。

代码语言:javascript
复制
static int redpin[4];
...

int rgbInitiate(int ledID, int redpin, int greenpin, int bluepin) {   
   redpin[ledID] = redpin;
   ...
}

void rgbMixer(int ledID, int redvalue, int greenvalue, int bluevalue) {   
  analogWrite(redpin[ledID], redvalue);
  ...
}
票数 0
EN

Stack Overflow用户

发布于 2014-02-08 15:33:40

您正在从主文件中调用第一个函数,这意味着这些变量必须存在于主文件中。实际上,您并没有在rgbInitiate()中更改它们,所以主文件中的示例代码如下所示:

代码语言:javascript
复制
int r = 2;
int g = 3;
int b = 4;
libname.rgbInitiate(r,g,b);

然后将这些变量从主文件libname.rgbMixer( r,g,b,ledID,redvalue,greenvalue,bluevalue)传递给下一个函数。

此外,您的第一个函数(它是编写的)可以大大简化。

代码语言:javascript
复制
int rgbInitiate(int r, int g, int b)
{
    pinMode(r, OUTPUT);
    pinMode(g, OUTPUT);
    pinMode(b, OUTPUT);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21642134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档