2016-07-24 2 views
1

У меня есть Arduino UNO, и я пытаюсь включить и выключить свет (красный, зеленый или синий) на полосе. Вот мой код, но все огни остаются горящими. Проблема в том, что, например, я могу просто показать цвет RED, но я не могу заставить любой из цветов отключиться. У меня есть контакты следующим образом:Arduino | RGB LED Strip Controller

  • RED: 5
  • ЗЕЛЕНЫЙ: 6
  • СИНИЙ: 3

Моя установка: enter image description here

По умолчанию контроллер фото: enter image description here

Релевантный код:

int ledPinR = 5; 
int ledPinG = 6; 
int ledPinB = 3; 

void setup() { 
    pinMode(ledPinR, OUTPUT); 
    pinMode(ledPinG, OUTPUT); 
    pinMode(ledPinB, OUTPUT); 
} 
void loop() { 
    analogWrite(ledPinR, 0); 
    analogWrite(ledPinG, 0); 
    analogWrite(ledPinB, 0); 
} 
+0

@MikeCAT ничего себе! Это было быстро! Правильно ли код для поворота полосы –

+0

Какая у вас полоса? – djUniversal

+0

@djУниверсальная SMD RGB 5050 Водонепроницаемая светодиодная полоса света –

ответ

1

Я думаю, вы поняли мой последний комментарий под @ ответ Secko, так вот что я имел в виду:

int r = 5; 
int g = 6; 
int b = 3; 

void setup() { 
    pinMode(r, OUTPUT); 
    pinMode(g, OUTPUT); 
    pinMode(b, OUTPUT); 
} 

void loop() { 
    analogWrite(r, 128); 
    delay(50); 
    analogWrite(r, 0); 
    analogWrite(g, 128); 
    delay(50); 
    analogWrite(g, 0); 
    analogWrite(b, 128); 
    delay(50); 
    analogWrite(b, 0); 
    delay(50); 
} 

Вам нужно выключить последний цвет вы включен для того, чтобы получить красный, зеленый и голубой мигает свет. В противном случае, если вы включите зеленый цвет после красного, полоса будет желтой на короткое время. Если вы затем включите синий цвет, он будет белым и останется белым, поскольку никакие цвета никогда не выключаются.

Второй параметр - напряжение, приложенное к вашим контактам. Он находится в диапазоне от 0 до 255, где 0 - 0 В, а 255 - 5 В. 128 находится посередине с 2.5V.

Если ваша полоса большая (=> 3 светодиода с энергосберегающими светодиодами. В противном случае> 1), я надеюсь, вы используете транзисторы для выгрузки тока от ардуино к транзистору. В противном случае вы взорвете ардуино очень скоро.

EDIT: Вы, наверное, взорвали Arduino уже потянув слишком много тока (слишком много светодиодов) от его контактов.

Вам понадобится PNP-транзистор между каждым цветом и ардуином, который может работать с большим током (поскольку вы управляете большим количеством светодиодов), что означает интегральную схему массива транзисторов Дарлингтона.

Что-то типа TIP125 приходит на ум. (https://www.fairchildsemi.com/datasheets/TI/TIP125.pdf)

Он имеет максимальный ток коллектора 5A.Поместите это прямо посередине вашего VCC и полосы (VCC на коллектор, полосу на эмиттер) и подключите ардуино к основанию транзистора. Вам понадобится 3, по одному для каждого цвета.

EDIT2: Вот очень быстро сделанная схема, чтобы показать вам основы. Он должен быть полностью функциональным для 12-вольтовой светодиодной полосы с индивидуальным цветовым током до 5 А (так всего 15А).

Возможно, вы захотите добавить резисторы на базе транзистора, чтобы тонуть ток.

tip125/arduino transistor schematic

EDIT3: Так как вы, вероятно, знакомы с электроникой: A PNP транзистор позволит соединение между коллектором и эмиттером, если база является низким. Значение: analogWrite(r, 0) превратит цвет на полосу и analogWrite(r, 255) отключит его. Он перевернут с транзистором между ними.

Кроме того, и я надеюсь, что это очевидно, НЕ МАРШРУТ 5A ПО ЦВЕТУ ЧЕРЕЗ ХЛЕБКУ ИЛИ ЧЕРЕЗ ТИНИ-ПРОВОДЫ. ОНИ ВОЙНЫ В КУРИТЬ.

+0

Что должен делать этот код? –

+0

Красный, зеленый, синий в быстрой последовательности. – showp1984

+0

Только один цвет? Ex, когда красный цвет продолжается, все остальные отключены? –

0

Вы должны добавить pinMode() в настройку.

void setup() { 
    pinMode(ledPinR, OUTPUT); 
    pinMode(ledPinG, OUTPUT); 
    pinMode(ledPinB, OUTPUT); 
} 
+0

Даже при этом все еще не выключается полоса –

0

Вы должны отложить операции до своей очереди следующий свет или выключить так:

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

int ledPinR = 5; 
int ledPinG = 6; 
int ledPinB = 3; 

int brightness = 0; 
int fade = 5; 

void setup() { 
    pinMode(ledPinR, OUTPUT); 
    pinMode(ledPinG, OUTPUT); 
    pinMode(ledPinB, OUTPUT); 
} 

void loop() { 
    for(int LED_PIN = 3; LED_PIN<=6; LED_PIN++) { 
    analogWrite(LED_PIN, brightness); //setting the brightness at LED pin 
    brightness += fade; //brightness increasE 
    if(brightness == 0 || brightness == 255){ 
     fade = -fade; 
    } 
    delay(30); //time of delay is in miliseconds 
    } 
} 

EDIT2: OK, видел ваши настройки, я был далеко от того, что вы хотите делать с цветами, не знаю, должен ли я удалить ответ, он дезинформирует прямо сейчас. Надеюсь, что задержка помогла.

+0

Полоса Led продолжает оставаться. Без изменений. Извините, что это хлопот! Lol –

+0

@NicholasJohnson Это будет приводить их в действие только при первом включении. После этого они будут гореть. Вам придется выключить цвет после задержки, если вы хотите, чтобы только один цвет проходил через полосу. – showp1984

+0

Ну, вы должны угаснуть или изменить значение яркости (сейчас 0), но я думал, что вы уже это знали. – Secko