декоративная подсветка
- Войдите на сайт для отправки комментариев
пытаюсь сделать контроллер управления освещением. в планах
1. при нажатии на кнопку энкодера зажигается белый
2. при повороте энкодера сначала загорается красный на 100%, (255-0-0). далее
1) Наращивается зеленый цвет 255-1-0, 255-2-0 ... 255-255-0.
2) Уменьшается красный цвет 254-255-0, 253-255-0 ... 0-255-0.
3) Наращивается синий цвет 0-255-1, 0-255-2 ... 0-255-255.
4) Уменьшается зеленый цвет 0-254-255, 0-253-255 ... 0-0-255.
5) Наращивается красный цвет 1-0-255, 2-0-255 ... 255-0-255.
6) Уменьшается синий цвет 255-0-254, 255-0-253 ... 255-0-0
и так далее по кругу. при нажатии на кнопку энкодера все выключается. энкодер на 24 импульса\оборот, хотелось бы чтобы весь сценарий проходил за 5-6 оборотов энкодера. точно так же все должно работать с пульта, с любого места программы. есть два скетча. первый управление яркостью одного светодиода энкодером, второй управление RGB светодиодом ардуиной. объединить толком не получается. поможете?
выкладывайте что есть из кода (только с правильным оформлением), там видно будет где копаться.
спасибо. вот собственно пока все что есть. при повороте энкодера зажигается красный на 100%, далее плавное увеличение зеленого до 100%, далее плавное уменьшение красного до 0 и сразу включение 100%. а как его остановить на 0 не пойму.
/* ** Энкодер ** Для управлением яркостью LED используется энкодер Sparkfun */ int brightnessRED = 0; // яркость LED, начинаем с 0 int brightnessGREEN = 0; // яркость LED, начинаем с 0 int brightnessBLUE = 0; // яркость LED, начинаем с 0 int start = 255; int fadeAmount = 10; // шаг изменения яркости LED 10 unsigned long currentTime; unsigned long loopTime; const int pin_A = 7; // pin 7 const int pin_B = 8; // pin 8 unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; int REDpin = 9; // pin 9 ШИМ int GREENpin = 10; // pin 10 ШИМ int BLUEpin = 11; // pin 11 ШИМ void setup() { pinMode(9, OUTPUT); // устанавливаем pin 9 как выход pinMode(10, OUTPUT); // устанавливаем pin 10 как выход pinMode(11, OUTPUT); // устанавливаем pin 11 как выход pinMode(pin_A, INPUT); pinMode(pin_B, INPUT); digitalWrite(pin_A, HIGH); //подключаем подтягивающий резистор digitalWrite(pin_B, HIGH); //подключаем подтягивающий резистор currentTime = millis(); loopTime = currentTime; } void loop() { currentTime = millis(); if(currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц) encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю if(encoder_B) { // выход В в полож. сост., значит вращение по часовой стрелке if(brightnessRED <=240) brightnessRED += start; if(brightnessGREEN + fadeAmount <= 240) brightnessGREEN += fadeAmount; if(brightnessGREEN >= 240) brightnessRED -= fadeAmount; } } encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла analogWrite(9, brightnessRED); // устанавливаем яркость на 9 ножку analogWrite(10, brightnessGREEN); analogWrite(11, brightnessBLUE); loopTime = currentTime; } }