Arduino类来控制RGB LED

问题描述

我是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);
  delay(1000);
  led.RGB(0,255,255);
  delay(1000);
}

调用了RGB方法,但是我的led无法打开。

如果我将RGB方法移到班级之外,则效果很好。

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

解决方法

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

,

我将引脚的配置作为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);
}

这可以解决问题。

我也将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);
}

谢谢大家!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...