Энкодер
- Войдите на сайт для отправки комментариев
Чт, 09/06/2016 - 17:28
здравствуйте! Возник такой проект, управление RGB подсветкой при помощи энкодера, подскажите пожалуйста, какие статьи почитать, и возможно ли это?
здравствуйте! Возник такой проект, управление RGB подсветкой при помощи энкодера, подскажите пожалуйста, какие статьи почитать, и возможно ли это?
Возможно всё при понимании физики процесса. Сначала научитесь управлять RGB подсветкой без энкодера, чисто программно. Потом почитайте что такое энкодер и как он работает. Научитесь просто считывать энкодер, без управления RGB посдветкой. Потом объедините свои знания по RGB подствеке и энкодеру.
P.S. Гугл много чего знает, не стесняйтесь у него спрашивать ;-)
https://www.google.com/webhp?ion=1&espv=2&ie=UTF-8#q=arduino%20encoder
Нашёл этот скетч, только теперь не знаю, как при помощи кнопки сделать переключение цветов
int brightness = 120; // яркость LED, начинаем с половины int fadeAmount = 10; // шаг изменения яркости LED unsigned long currentTime; unsigned long loopTime; const int pin_A = 12; // pin 12 const int pin_B = 11; // pin 11 unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; void setup() { // declare pin 9 to be an output: pinMode(9, OUTPUT); // устанавливаем pin 9 как выход pinMode(pin_A, INPUT); pinMode(pin_B, INPUT); currentTime = millis(); loopTime = currentTime; } void loop() { currentTime = millis(); if(currentTime >= (loopTime + 5)){ // проверяем каждые 5мс (200 Гц) encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера encoder_B = digitalRead(pin_B); // считываем состояние выхода А энкодера if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю if(encoder_B) { // выход В в полож. сост., значит вращение по часовой стрелке // увеличиваем яркость, не более чем до 255 if(brightness + fadeAmount <= 255) brightness += fadeAmount; } else { // выход В в 0 сост., значит вращение против часовой стрелки // уменьшаем яркость, но не ниже 0 if(brightness - fadeAmount >= 0) brightness -= fadeAmount; } } encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла analogWrite(9, brightness); // устанавливаем яркость на 9 ножку loopTime = currentTime; } }только с этим скетчем проблемы
Нашёл этот скетч, только теперь не знаю, как при помощи кнопки сделать переключение цветов
Этот скетч расчитан на один светодиод (не RGB). Вы знаете, как меняется цвет в RGB светодиоде?
И что Вы подразумеваете под RGB подсветкой - несколько светодиодов разного цвета, простые RGB светодиоды, цифровые RGB светодиоды типа WS2812?
нашёл другую работу, загрузил скетч, но не пойму, как подключать светодиодhttp://genmc.ru/instruktsii-i-uroki/rgb-lenta-i-povortonyj-enkoder
не, имеется ввиду светодиоды разных цветов
простые rgb
нашёл другую работу, загрузил скетч, но не пойму, как подключать светодиодhttp://genmc.ru/instruktsii-i-uroki/rgb-lenta-i-povortonyj-enkoder
буду очень благодарен, просто давно ардуино не использовал
Нашёл этот скетч, только теперь не знаю, как при помощи кнопки сделать переключение цветов
Блин, Вам что знающий человек сказал? Скетчи искать или "Сначала научитесь управлять RGB подсветкой без энкодера, чисто программно. Потом почитайте что такое энкодер и как он работает. Научитесь просто считывать энкодер, без управления RGB посдветкой. Потом объедините свои знания по RGB подствеке и энкодеру".
Делайте, что Вам говорят и всё у Вас получится.
сорри, просто нужно очень быстро сделать, а времени нет, подскажите пожалуйста в этом скетче за что отвечаю пины BRT и BTN
#include <EEPROM2.h> #include <EEPROM.h> #define BRT_pin 5 #define BTN_pin 8 #define RED_pin 9 #define GRN_pin 10 #define BLE_pin 11 byte KNOP = EEPROM.read(2); // ячейка памяти для кнопки float brightness; // переменная для яркости float fadeAmount = 0.2; // шаг изменения яркости LED byte color = EEPROM.read(22); float fadeColor = 2; const int pin_A = 7; // pin 12 const int pin_B = 6; // pin 11 unsigned char encoder_A; unsigned char encoder_B; unsigned char encoder_A_prev=0; uint32_t savemillis = 0; void setup() { Serial.begin(9600); EEPROM_read(10,brightness); // переменная для яркости digitalWrite(BTN_pin, 1); // подтяжка кнопки энкодера pinMode(RED_pin, OUTPUT); //красный светодиод pinMode(GRN_pin, OUTPUT); //зеленый светодиод pinMode(BLE_pin, OUTPUT); //синий светодиод pinMode(BRT_pin, OUTPUT); //шим пин для других светодиодов pinMode(pin_A, INPUT); pinMode(pin_B, INPUT); EEPROM.write(2,0); } void loop() { { encoder_A = digitalRead(pin_A); // считываем состояние выхода А энкодера encoder_B = digitalRead(pin_B); // считываем состояние выхода B энкодера if((!encoder_A) && (encoder_A_prev)){ // если состояние изменилось с положительного к нулю if(encoder_B) { savemillis = millis(); if(brightness + fadeAmount <= 10&&EEPROM.read(2)==0){brightness += fadeAmount;} if(color + fadeColor <= 75&&EEPROM.read(2)==1){color += fadeColor; } } else { savemillis = millis(); if(brightness - fadeAmount >= 0&&EEPROM.read(2)==0){brightness -= fadeAmount;} if(color - fadeColor >= 0&&EEPROM.read(2)==1){color -= fadeColor;} } } encoder_A_prev = encoder_A; // сохраняем значение А для следующего цикла Serial.println(EEPROM.read(10)); Serial.println(EEPROM.read(22)); byte red = 0, grn = 0, ble = 0; if(color >= 0 && color < 25) {red = 25-color, grn = color, ble = 0;} else if(color >= 25 && color < 50){ red = 0, grn = 50-color, ble = color-25;} else {red = color-50, grn = 0, ble = 75-color;} analogWrite(RED_pin,red*brightness); analogWrite(GRN_pin,grn*brightness); analogWrite(BLE_pin,ble*brightness); analogWrite(BRT_pin,brightness*25); } //Сохранение яркости и цвета if(savemillis && millis()-savemillis > 3000) { EEPROM_write(10, brightness); EEPROM.write(22, color); savemillis = 0; } //Выбор цвет яркость 0 яркость 1 цвет if(digitalRead(BTN_pin)==LOW&&EEPROM.read(2)==0) {EEPROM.write(2,1); //цвет delay(1000); } if(digitalRead(BTN_pin)==LOW&&EEPROM.read(2)==1) {EEPROM.write(2,0); //яркость delay(1000); } if(EEPROM.read(2)==1) //цвет {digitalWrite(13,HIGH);} if(EEPROM.read(2)==0) //яркость {digitalWrite(13,LOW);} }Внимательно читаем:
25 строка, BTN - кнопка энкодера
29 строка, BRT - шим для светодиодов.
Наверное, Вам это должно о чем то сказать, Вы ведь знаете схему использования.
Упс... не заметил, что "нужно очень быстро" было пару дней назад :)