我试图创建一个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);
}发布于 2014-02-09 09:14:39
在靠近的地方,只需将引脚变量定义移出函数即可。这将使他们有一个永久的生命。除了定义在其中的.CPP文件之外,您的库可能不需要任何模块来使用变量'redpin‘等。下面添加的“静态”意味着这些变量对其他代码模块是不可见的。这意味着如果某个应用程序偶然使用了一个变量'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);
...
}发布于 2014-02-08 15:33:40
您正在从主文件中调用第一个函数,这意味着这些变量必须存在于主文件中。实际上,您并没有在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);
}https://stackoverflow.com/questions/21642134
复制相似问题