Проблемы со светодиодом RGB и сервомоторами

#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