我正在尝试创建一个 Arduino 库,我需要在其中声明和初始化三个变量,(redpin_ledID
、greenpin_ledID
、bluepin_ledID
) 在一个函数 (rgbInitiate
) 中,这样另一个函数 (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);
}
最佳答案
你很接近,你只需要将 pin 变量定义移出函数。这将使他们拥有永久的生命。除了定义它们的 .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);
...
}
关于c++ - Arduino/C++ 交叉函数变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21642134/