RGB LED 和伺服电机的问题
Issues with RGB led and Servomotors
我正在进行我的第一个 Arduino 项目...在这个项目中,我使用了一个 RGB LED 和 2 个伺服电机...
首先,按照 OOP,我创建了一个 class 来控制我的 RGB LED...
class StatusLED {
private:
int pinRed;
int pinGreen;
int pinBlue;
public:
StatusLED(int pinRed, int pinGreen, int pinBlue);
void RGB(int redValue, int greenValue, int blueValue);
};
它运行良好,没有问题...
RGB LED 一切正常后,我开始包含我的伺服电机代码...
#include <Servo.h>
#define PIN_RGBLED_R 9
#define PIN_RGBLED_G 10
#define PIN_RGBLED_B 11
#define PIN_SERVO_H 12
#define PIN_SERVO_V 13
Servo servoH;
Servo servoV;
LED led(PIN_RGBLED_R, PIN_RGBLED_G, PIN_RGBLED_B);
void setup() {
servoH.attach(PIN_SERVO_H);
servoV.attach(PIN_SERVO_V);
}
在我包含 servo.attach()
行之后,我的 RBG LED 有一个奇怪的行为,我以前使用的颜色,比如浅紫色 RGB(2, 0, 2)
;,现在不再工作了,当我试了一下,led灯亮了红色。
如果我评论 servo.attach()
行,led 工作正常。
已经尝试过:
- 更改伺服库版本;
- 将舵机换到另一个引脚;
有人可以帮帮我吗?
编辑:
为了排除我的LED的疑虑class有问题,我新建一个文件...
#include <Servo.h>
#define PIN_SERVO_H 3
#define PIN_SERVO_V 4
#define PIN_RGBLED_R 9
#define PIN_RGBLED_G 10
#define PIN_RGBLED_B 11
Servo servoH;
Servo servoV;
void setup() {
pinMode(PIN_RGBLED_R, OUTPUT);
pinMode(PIN_RGBLED_G, OUTPUT);
pinMode(PIN_RGBLED_B, OUTPUT);
servoH.attach(PIN_SERVO_H);
servoV.attach(PIN_SERVO_V);
}
void loop() {
RGB(2,0,2);
delay(100);
RGB(4,0,4);
delay(100);
RGB(8,0,8);
delay(100);
RGB(16,0,16);
delay(100);
RGB(0,0,0);
delay(1000);
}
void 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;
}
// This is a common anode RGB Led.
// So 255 is OFF and 0 is Fully ON
analogWrite(PIN_RGBLED_R, 255 - redValue);
analogWrite(PIN_RGBLED_G, 255 - greenValue);
analogWrite(PIN_RGBLED_B, 255 - blueValue);
}
问题还在继续...如果我评论 attach()
的行,led 工作正常,没有评论,它只会以红色闪烁...
根据您的arduino版本,servo.attach仅适用于Pin 9和Pin 10,这与您的RGB管脚冲突。参见 https://www.arduino.cc/en/Reference/ServoAttach
我正在进行我的第一个 Arduino 项目...在这个项目中,我使用了一个 RGB LED 和 2 个伺服电机...
首先,按照 OOP,我创建了一个 class 来控制我的 RGB LED...
class StatusLED {
private:
int pinRed;
int pinGreen;
int pinBlue;
public:
StatusLED(int pinRed, int pinGreen, int pinBlue);
void RGB(int redValue, int greenValue, int blueValue);
};
它运行良好,没有问题...
RGB LED 一切正常后,我开始包含我的伺服电机代码...
#include <Servo.h>
#define PIN_RGBLED_R 9
#define PIN_RGBLED_G 10
#define PIN_RGBLED_B 11
#define PIN_SERVO_H 12
#define PIN_SERVO_V 13
Servo servoH;
Servo servoV;
LED led(PIN_RGBLED_R, PIN_RGBLED_G, PIN_RGBLED_B);
void setup() {
servoH.attach(PIN_SERVO_H);
servoV.attach(PIN_SERVO_V);
}
在我包含 servo.attach()
行之后,我的 RBG LED 有一个奇怪的行为,我以前使用的颜色,比如浅紫色 RGB(2, 0, 2)
;,现在不再工作了,当我试了一下,led灯亮了红色。
如果我评论 servo.attach()
行,led 工作正常。
已经尝试过:
- 更改伺服库版本;
- 将舵机换到另一个引脚;
有人可以帮帮我吗?
编辑:
为了排除我的LED的疑虑class有问题,我新建一个文件...
#include <Servo.h>
#define PIN_SERVO_H 3
#define PIN_SERVO_V 4
#define PIN_RGBLED_R 9
#define PIN_RGBLED_G 10
#define PIN_RGBLED_B 11
Servo servoH;
Servo servoV;
void setup() {
pinMode(PIN_RGBLED_R, OUTPUT);
pinMode(PIN_RGBLED_G, OUTPUT);
pinMode(PIN_RGBLED_B, OUTPUT);
servoH.attach(PIN_SERVO_H);
servoV.attach(PIN_SERVO_V);
}
void loop() {
RGB(2,0,2);
delay(100);
RGB(4,0,4);
delay(100);
RGB(8,0,8);
delay(100);
RGB(16,0,16);
delay(100);
RGB(0,0,0);
delay(1000);
}
void 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;
}
// This is a common anode RGB Led.
// So 255 is OFF and 0 is Fully ON
analogWrite(PIN_RGBLED_R, 255 - redValue);
analogWrite(PIN_RGBLED_G, 255 - greenValue);
analogWrite(PIN_RGBLED_B, 255 - blueValue);
}
问题还在继续...如果我评论 attach()
的行,led 工作正常,没有评论,它只会以红色闪烁...
根据您的arduino版本,servo.attach仅适用于Pin 9和Pin 10,这与您的RGB管脚冲突。参见 https://www.arduino.cc/en/Reference/ServoAttach