![](/img/trans.png)
[英]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.