繁体   English   中英

Arduino / C ++跨函数变量

[英]Arduino/C++ cross-function variables

我正在尝试创建一个Arduino库,在该库中我需要在一个函数( rgbInitiate )中声明和初始化三个变量( redpin_ledIDgreenpin_ledIDbluepin_ledID ),以便另一个函数( rgbMixer )可以在没有第一个函数的情况下使用它们叫第二个。

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

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);
}

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

int r = 2;
int g = 3;
int b = 4;
libname.rgbInitiate(r,g,b);

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

另外,您的第一个函数(编写时)可以大大简化

int rgbInitiate(int r, int g, int b)
{
    pinMode(r, OUTPUT);
    pinMode(g, OUTPUT);
    pinMode(b, OUTPUT);
}

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

// 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,则以上将使用一个阵列。

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);
  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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