簡體   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