我是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方法移到班级之外,则效果很好。
有人可以告诉我我在做什么吗?
答案 0 :(得分:1)
您试图使用PWM(脉冲宽度调制)控制RGB LED。要设置特定PWM引脚上的脉冲开/关比,应使用analogWrite(PWM_out_pin, PWM_out_level);
您的代码错误地使用了digitalWrite
,不会影响PWM波形。除引脚号外,它还只需要一个HIGH
或LOW
值参数。
答案 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);
}
谢谢大家!