#c #oop #arduino #rgb #servo
#c #ооп #arduino #rgb #сервопривод
Вопрос:
Я работаю над своим первым проектом Arduino… В этом проекте я использую светодиод RGB и 2 сервомотора…
Прежде всего, следуя ООП, я создаю класс для управления моим RGB-светодиодом…
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 все в порядке, я начинаю включать код своего серводвигателя…
#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 ведет себя странно, цвета, которые я использовал раньше, например, светло-фиолетовый RGB(2, 0, 2)
;, больше не работает, теперь, когда я пытаюсь это сделать, светодиод загорается красным цветом.
Если я прокомментирую servo.attach()
строки, светодиод будет работать хорошо.
Уже пробовал:
- Изменить версию библиотеки сервоприводов;
- Замените сервоприводы на другие контакты;
Кто-нибудь может мне помочь?
Редактировать:
Просто чтобы устранить сомнения в том, что мой класс светодиодов является проблемой, я создаю новый файл…
#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()
, светодиод работает нормально, без комментариев, он мигает только красным цветом…
Комментарии:
1. Сервоприводы управляются с помощью сигналов PWM, поэтому вы должны подключить его к контакту, который позволяет это. arduino.cc/reference/en/language/functions/analog-io/…
2. Сервоприводы хорошо работают на выводе без ШИМ… Я меняю свой светодиод на контакты 3,5 и 6, и теперь он тоже работает хорошо
Ответ №1:
В зависимости от версии вашего arduino, servo.attach работает только на выводах 9 и 10, что противоречит вашим выводам RGB. См. https://www.arduino.cc/en/Reference/ServoAttach