c++ - Arduino/C++ 交叉函数变量

标签 c++ function variables arduino

我正在尝试创建一个 Arduino 库,我需要在其中声明和初始化三个变量,(redpin_ledIDgreenpin_ledIDbluepin_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/

相关文章:

postgresql - Postgres 触发器适用于 INSERT,不适用于 DELETE

C++ API——什么是正确的方法

c++ - 在 C++20 中,析构函数中通常具有非 constexpr 行为的类的 constexpr 实例

c - function() 中未指定的参数会发生什么?

list - 在 VCL(Varnish 配置语言)中定义列表

javascript - 命名;在javascript中动态创建变量

javascript - 停止动态生成的setInterval

c++ - 我无法获取 LPRECT 结构数据,我做错了什么?

C++ - 难以理解分而治之的功能

c++ - 使用 lambda 的简单 RAII 包装器的复制初始化在 GCC 和 Clang 下意外失败