Arduino类来控制RGB LED

时间:2020-09-15 23:40:17

标签: arduino arduino-uno arduino-c++

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

我想开一个新班来控制我的RGB led ...

我已经在代码中使用了带led的方法...但是我想推广代码以在不使用ctrl + c ctrl + v我的代码的情况下放置更多led。

我创建了课程:

/*
   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方法移到班级之外,则效果很好。

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

2 个答案:

答案 0 :(得分:1)

您试图使用PWM(脉冲宽度调制)控制RGB LED。要设置特定PWM引脚上的脉冲开/关比,应使用analogWrite(PWM_out_pin, PWM_out_level); 您的代码错误地使用了digitalWrite,不会影响PWM波形。除引脚号外,它还只需要一个HIGHLOW值参数。

答案 1 :(得分:0)

我将引脚的配置作为OUTPUT移到了我的类的构造函数中,

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);
}

谢谢大家!

相关问题