Светодиодная лента RGB с инвертированным ШИМ

arduino-nano rgb-led led-strip

Эта ошибка/глупость-моя-сама/проблема убивает меня:
Я создал контроллер RGB-ленты, который циклически переключается по спектру аддитивных цветов RGB, поворачивая потенциометр.

У меня есть потенциометр, подключенный к моему Arduino Nano v3 (от AZ-Delivery, а не официальный Arduino). Затем у меня есть усилитель RGB, подключенный к Arduino с каждой фазой (R, G, B, V+) и к внешнему источнику питания (12 В при 2 А макс.).

Я сократил свою программу и удалил все преобразования значений в цвета, поскольку они не имеют никакого отношения к проблеме:

void loop() {
    ColorVal = analogRead(pinPot); //считывание значения потенциометра цвета
    ColorByte = map(ColorVal, 0, 1023, 0, 255); //Масштабирует от 0-1023 до 0-255

    // преобразование значения потенциала в цвет
    // ...

    // запись через ШИМ на светодиод
    analogWrite(pinR, R);
    analogWrite(pinG, G);
    analogWrite(pinB, B);
}

Моя проблема: Теоретически можно было бы ожидать, что система будет показывать белый цвет, когда все переменные (R, G и B) установлены на 255. Однако она ведет себя наоборот. Когда все значения установлены на 255, она выключена, и наоборот. Другой пример: когда R = 255, G = 0 и B = 0, зеленый и синий горят, а красный выключен.

Я думал, что это связано с полярностью или чем-то еще, но я не могу этого выяснить.

, 👍1


1 ответ


Лучший ответ:

2

Светодиодная лента RGB имеет общий анод (V+). Когда вы подаете 12 В на R, G или B, светодиоды имеют 12 В с обеих сторон, поэтому на них нет напряжения и тока.

А если подать 0 В, то на них будет 12 В, и они загорятся.

Чтобы исправить это, просто инвертируйте значение ШИМ в вашем коде:

analogWrite(255-pinR, R);
analogWrite(255-pinG, G);
analogWrite(255-pinB, B);
,