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 波形。它也只需要一个 HIGH
或 LOW
值参数除了引脚号。
我将引脚配置作为 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);
}
谢谢大家!
我是一个新的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 波形。它也只需要一个 HIGH
或 LOW
值参数除了引脚号。
我将引脚配置作为 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);
}
谢谢大家!