У меня Arduino UNO, и я пытаюсь включить и выключить цветной (красный, зеленый или синий) свет полосы. Вот мой код, но все огни горят. Проблема в том, что, например, я мог бы хотеть показать только красный цвет, но я не могу заставить какие-либо цвета отключиться. У меня есть булавки следующим образом:
Фото контроллера по умолчанию:
Соответствующий код:
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);
}
Я думаю, что вы неправильно поняли мой последний комментарий под ответом @ 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,5 В.
Если ваша полоса большая (=> 3 светодиода с энергосберегающими светодиодами. В противном случае> 1), я надеюсь, что вы используете транзисторы, чтобы разгрузить ток, потребляемый от Arduino к транзистору. В противном случае вы будете взрывать Arduino очень скоро.
РЕДАКТИРОВАТЬ:
Возможно, вы уже взорвали Arduino, вытянув слишком много тока (слишком много светодиодов) из его контактов.
Вам понадобится транзистор PNP между каждым цветом и arduino, который может обрабатывать большой ток (так как вы управляете большим количеством светодиодов), что означает интегральную схему матрицы транзисторов Дарлингтона.
Нечто подобное TIP125 приходит на ум. (https://www.fairchildsemi.com/datasheets/TI/TIP125.pdf)
Максимальный ток коллектора 5А. Поместите это прямо в середине вашего VCC и полосы (VCC для коллектора, полосы для эмиттера) и подключите Arduino к базе транзистора. Вам понадобится 3, по одному на каждый цвет.
EDIT2:
Вот очень быстро сделанная схема, чтобы показать вам основы. Он должен быть полностью функциональным для светодиодной ленты 12 В с индивидуальным потреблением тока до 5 А (итого 15 А).
Вы можете добавить резисторы на базе транзистора, чтобы поглотить ток.
EDIT3:
Поскольку вы, вероятно, новичок в электронике: транзистор PNP обеспечит соединение между коллектором и эмиттером, если база низкая. Имея в виду: analogWrite(r, 0)
включит цвет на полосе и analogWrite(r, 255)
выключу его. Он инвертирован с транзистором между ними.
Кроме того, и я надеюсь, что это очевидно, НЕ МАРШРУТНО 5А НА ЦВЕТ через ЩИТ ИЛИ ЧЕРЕЗ Крошечные провода. ОНИ ВСТУПАЮТ В ДЫМАХ.
Вы должны добавить pinMode () для установки.
void setup() {
pinMode(ledPinR, OUTPUT);
pinMode(ledPinG, OUTPUT);
pinMode(ledPinB, OUTPUT);
}
Вы должны отложить операции, прежде чем включить или выключить следующий индикатор:
РЕДАКТИРОВАТЬ: полный фейдер для вашего случая, вы можете пропустить 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
}
}
РЕДАКТИРОВАТЬ 2: Хорошо, видел ваши настройки, я был далеко от того, что вы хотели сделать с цветами, не знаю, если я должен удалить ответ, это вводит в заблуждение сейчас. Надеюсь, задержка помогла, хотя.