При вращении ручки энкодера ky-040 можно сделать добавить RGB подсветку при помощи светодиодного кольца.
RGB (на контроллере WS2812) кольца бывают разного размера с разным кол-вом светодиодов, для подсветки энкодера отлично подойдет светодиодное кольцо с восемью светодиодами.
Скетч разрабатывался для интеграции в проекты Arduino где используются энкодеры, например в электронных регуляторных громкости.
При вращении ручки энкодера загораются и гаснут светодиоды. Скетч отслеживает установленный энкодером уровень значения (от 0 до 79 значений), в зависимости от установленного значения светодиоды загораются с различным цветом, от синего и плавно переходящего в красный (при максимальном уровне).
#include <Adafruit_NeoPixel.h> // https://github.com/adafruit/Adafruit_NeoPixel.git #include <Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, 6, NEO_GRB + NEO_KHZ800);// 8 LED, D6 Encoder myEnc(9, 8);//CLK, DT unsigned long oldPosition = -999,newPosition; int poz,data; #define KOL 79 // максимальное значение регулировки void setup(){ OCR1A = 5000; TCCR1B |= (1 << WGM12)|(1 << CS10); TIMSK1 |= (1 << OCIE1A); strip.begin();Serial.begin(9600); pinMode(7,INPUT); strip.setBrightness(32); poz = data/8; } void loop(){ if(digitalRead(7)==LOW){ for(int i=0;i<8;i++){strip.setPixelColor(i, strip.Color(0, 50, 0));}strip.show();delay(300); for(int i=0;i<8;i++){strip.setPixelColor(i, strip.Color(0, 0, 0));}strip.show();} if (newPosition != oldPosition) {oldPosition = newPosition; data=data+newPosition;if(data>=0&&data<=KOL){poz=poz+newPosition;}myEnc.write(0);newPosition=0; Serial.println(data);} strip.setPixelColor(poz-1, strip.Color(0, 0, 0)); strip.setPixelColor(poz, strip.Color(data, 0+data/10, KOL-data)); strip.setPixelColor(poz+1, strip.Color(0, 0, 0)); if(poz>7){poz=0;}if(poz<0){poz=poz+8;} if(data<0){data=0;}if(data>KOL){data=KOL;} strip.show(); }// LOOP ISR (TIMER1_COMPA_vect){newPosition = myEnc.read()/4;}
Переменная data содержит уровень регулировки, в зависимости от назначения можно поменять максимальное значение регулировки энкодера.
RGB кольцо на контроллере W2812 питается от напряжения 5 В, выход D6 Arduino подключается ко входу DI светодиодного кольца.
Форум — http://forum.rcl-radio.ru/viewtopic.php?pid=1966#p1966
не работает. постоянно горят пиксели зеленым цветом.
на вращение энкодера не реагирует. проверил на 3 экземплярах энкодера.
лента проверена — исправна. в чем ошибка?
Горит зеленым — нажата кнопка энкодера. Кнопка энкодера инверсная, нажатие лог. 0
Проверьте наличие подтягивающего резистора на +5В выходу SW. Если у Вас в энкодере подтяжка выхода SW к GND, то поправьте код:
if(digitalRead(7)==LOW){
замените на:
if(digitalRead(7)==HIGH){
Вот это прикольная задумка, возьму на заметку. Можно через задержку в несколько секунд сделать переход в режим плавной радуги по кругу.
Можно кольцо в кольцо сделать разных диаметров и ещё больше поле для творчества.
А сама схемка подключения к ардуинке? Как оно соединяется вместе?
D6 — LED
Encoder
9, 8 — CLK, DT
7 — SW