Arduino class 控制 RGB LED

Arduino class to control a RGB led

我是一个新的arduino用户,所以我现在正在学习...

我想制作一个新的 class 来控制我的 RGB LED...

我已经在我的代码中使用了这个 led 和一个方法...但是我想概括代码以在我的代码中不使用 ctrl+c ctrl+v 来放置更多 led。

我创建 class:

/*
   STATUSLED CLASS DEFINITION
*/
class StatusLED {
  int pinVermelho;
  int pinVerde;
  int pinAzul;

  public:
    StatusLED(int pinRed, int pinGreen, int pinBlue) {
      this->pinVermelho = pinRed;
      this->pinVerde = pinGreen;
      this->pinAzul = pinBlue;
    }

    void RGB(int red, int green, int blue) {
      Serial.print("StatusLED.RGB(");
      Serial.print(red);
      Serial.print(", ");
      Serial.print(green);
      Serial.print(", ");
      Serial.print(blue);
      Serial.println(");");
      digitalWrite(pinVermelho, 255 - red);
      digitalWrite(pinVerde, 255 - green);
      digitalWrite(pinAzul, 255 - blue);
    }

};

我用我的 RBG led 的引脚初始化它:

#define pinoAzul 9
#define pinoVerde 10
#define pinoVermelho 11

StatusLED led(pinoVermelho, pinoVerde, pinoAzul);

为了测试它,我使用:

void setup() {
  pinMode(pinoAzul, OUTPUT);
  digitalWrite(pinoAzul, LOW);
  pinMode(pinoVerde, OUTPUT);
  digitalWrite(pinoVerde, LOW);
  pinMode(pinoVermelho, OUTPUT);
  digitalWrite(pinoVermelho, LOW);
}

void loop() {
  led.RGB(255, 0, 0);
  delay(1000);
  led.RGB(0, 255, 0);
  delay(1000);
  led.RGB(0, 0, 255);
  delay(1000);
}

调用了RGB方法,但是我的led不亮

如果我将 RGB 方法移到我的 class 之外,效果很好。

有人可以告诉我我在做什么吗?

您正在尝试使用 PWM(脉冲宽度调制)控制 RGB LED。要在特定 PWM 引脚上设置脉冲 on/off 比率,您应该使用 analogWrite(PWM_out_pin, PWM_out_level); 您的代码使用 digitalWrite 不正确,这不会影响 PWM 波形。它也只需要一个 HIGHLOW 值参数除了引脚号。

我将引脚配置作为 OUTPUT 移动到我的 class 的构造函数中,就像这样:

StatusLED::StatusLED(int pinRed, int pinGreen, int pinBlue) {
  this->pinRed = pinRed;
  pinMode(pinRed, OUTPUT);
  this->pinGreen = pinGreen;
  pinMode(pinGreen, OUTPUT);
  this->pinBlue = pinBlue;
  pinMode(pinBlue, OUTPUT);
  RGB(0, 0, 0);
}

这解决了问题。

我也更改了 RGB 方法以使用 analogWrite,现在淡入淡出效果也很好。

void StatusLED::RGB(int redValue, int greenValue, int blueValue) {
  if (redValue > 255) {
    redValue = 255;
  }
  if (greenValue > 255) {
    greenValue = 255;
  }
  if (blueValue > 255) {
    blueValue = 255;
  }
  if (redValue < 0) {
    redValue = 0;
  }
  if (greenValue < 0) {
    greenValue = 0;
  }
  if (blueValue < 0) {
    blueValue = 0;
  }
  analogWrite(pinRed, 255 - redValue);
  analogWrite(pinGreen, 255 - greenValue);
  analogWrite(pinBlue, 255 - blueValue);
}

谢谢大家!