[英]Understanding c++ function with missing variables in Arduino's RTClib
[英]Arduino/C++ cross-function variables
我正在尝试创建一个Arduino库,在该库中我需要在一个函数( rgbInitiate
)中声明和初始化三个变量( redpin_ledID
, greenpin_ledID
和bluepin_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.