Энкодер
- Войдите на сайт для отправки комментариев
Чт, 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
Нашёл этот скетч, только теперь не знаю, как при помощи кнопки сделать переключение цветов
01
int
brightness = 120;
// яркость LED, начинаем с половины
02
03
int
fadeAmount = 10;
// шаг изменения яркости LED
04
05
unsigned
long
currentTime;
06
07
unsigned
long
loopTime;
08
09
const
int
pin_A = 12;
// pin 12
10
11
const
int
pin_B = 11;
// pin 11
12
13
unsigned
char
encoder_A;
14
15
unsigned
char
encoder_B;
16
17
unsigned
char
encoder_A_prev=0;
18
19
void
setup
() {
// declare pin 9 to be an output:
20
21
pinMode(9, OUTPUT);
// устанавливаем pin 9 как выход
22
23
pinMode(pin_A, INPUT);
24
25
pinMode(pin_B, INPUT);
26
27
currentTime = millis();
28
29
loopTime = currentTime; }
30
31
void
loop
() {
32
33
currentTime = millis();
34
35
if
(currentTime >= (loopTime + 5)){
// проверяем каждые 5мс (200 Гц)
36
37
encoder_A = digitalRead(pin_A);
// считываем состояние выхода А энкодера
38
39
encoder_B = digitalRead(pin_B);
// считываем состояние выхода А энкодера
40
41
if
((!encoder_A) && (encoder_A_prev)){
// если состояние изменилось с положительного к нулю
42
43
if
(encoder_B) {
// выход В в полож. сост., значит вращение по часовой стрелке
44
45
// увеличиваем яркость, не более чем до 255
46
47
if
(brightness + fadeAmount <= 255) brightness += fadeAmount; }
48
49
else
{
// выход В в 0 сост., значит вращение против часовой стрелки
50
51
// уменьшаем яркость, но не ниже 0
52
53
if
(brightness - fadeAmount >= 0) brightness -= fadeAmount; }
54
55
}
56
57
encoder_A_prev = encoder_A;
// сохраняем значение А для следующего цикла
58
59
analogWrite(9, brightness);
// устанавливаем яркость на 9 ножку
60
61
loopTime = currentTime; }
62
63
}
только с этим скетчем проблемы
Нашёл этот скетч, только теперь не знаю, как при помощи кнопки сделать переключение цветов
Этот скетч расчитан на один светодиод (не 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
01
#include <EEPROM2.h>
02
#include <EEPROM.h>
03
#define BRT_pin 5
04
#define BTN_pin 8
05
#define RED_pin 9
06
#define GRN_pin 10
07
#define BLE_pin 11
08
byte
KNOP = EEPROM.read(2);
// ячейка памяти для кнопки
09
float
brightness;
// переменная для яркости
10
float
fadeAmount = 0.2;
// шаг изменения яркости LED
11
byte
color = EEPROM.read(22);
12
float
fadeColor = 2;
13
const
int
pin_A = 7;
// pin 12
14
const
int
pin_B = 6;
// pin 11
15
unsigned
char
encoder_A;
16
unsigned
char
encoder_B;
17
unsigned
char
encoder_A_prev=0;
18
uint32_t savemillis = 0;
19
20
21
void
setup
() {
22
23
Serial
.begin(9600);
24
EEPROM_read(10,brightness);
// переменная для яркости
25
digitalWrite(BTN_pin, 1);
// подтяжка кнопки энкодера
26
pinMode(RED_pin, OUTPUT);
//красный светодиод
27
pinMode(GRN_pin, OUTPUT);
//зеленый светодиод
28
pinMode(BLE_pin, OUTPUT);
//синий светодиод
29
pinMode(BRT_pin, OUTPUT);
//шим пин для других светодиодов
30
pinMode(pin_A, INPUT);
31
pinMode(pin_B, INPUT);
32
EEPROM.write(2,0);
33
34
}
35
36
void
loop
() {
37
38
{ encoder_A = digitalRead(pin_A);
// считываем состояние выхода А энкодера
39
encoder_B = digitalRead(pin_B);
// считываем состояние выхода B энкодера
40
if
((!encoder_A) && (encoder_A_prev)){
// если состояние изменилось с положительного к нулю
41
if
(encoder_B)
42
{
43
savemillis = millis();
44
if
(brightness + fadeAmount <= 10&&EEPROM.read(2)==0){brightness += fadeAmount;}
45
if
(color + fadeColor <= 75&&EEPROM.read(2)==1){color += fadeColor; }
46
}
47
else
{
48
savemillis = millis();
49
if
(brightness - fadeAmount >= 0&&EEPROM.read(2)==0){brightness -= fadeAmount;}
50
if
(color - fadeColor >= 0&&EEPROM.read(2)==1){color -= fadeColor;}
51
52
}
53
54
55
}
56
encoder_A_prev = encoder_A;
// сохраняем значение А для следующего цикла
57
58
Serial
.println(EEPROM.read(10));
59
Serial
.println(EEPROM.read(22));
60
byte
red = 0, grn = 0, ble = 0;
61
if
(color >= 0 && color < 25) {red = 25-color, grn = color, ble = 0;}
62
else
if
(color >= 25 && color < 50){ red = 0, grn = 50-color, ble = color-25;}
63
else
{red = color-50, grn = 0, ble = 75-color;}
64
65
66
analogWrite(RED_pin,red*brightness);
67
analogWrite(GRN_pin,grn*brightness);
68
analogWrite(BLE_pin,ble*brightness);
69
analogWrite(BRT_pin,brightness*25);
70
71
72
}
73
//Сохранение яркости и цвета
74
if
(savemillis && millis()-savemillis > 3000)
75
{
76
EEPROM_write(10, brightness);
77
EEPROM.write(22, color);
78
79
savemillis = 0;
80
}
81
82
83
//Выбор цвет яркость 0 яркость 1 цвет
84
if
(digitalRead(BTN_pin)==LOW&&EEPROM.read(2)==0)
85
{EEPROM.write(2,1);
//цвет
86
delay(1000); }
87
88
if
(digitalRead(BTN_pin)==LOW&&EEPROM.read(2)==1)
89
{EEPROM.write(2,0);
//яркость
90
delay(1000); }
91
92
if
(EEPROM.read(2)==1)
//цвет
93
{digitalWrite(13,HIGH);}
94
95
if
(EEPROM.read(2)==0)
//яркость
96
{digitalWrite(13,LOW);}
97
98
}
Внимательно читаем:
25
digitalWrite(BTN_pin, 1);
// подтяжка кнопки энкодера
26
pinMode(RED_pin, OUTPUT);
//красный светодиод
27
pinMode(GRN_pin, OUTPUT);
//зеленый светодиод
28
pinMode(BLE_pin, OUTPUT);
//синий светодиод
29
pinMode(BRT_pin, OUTPUT);
//шим пин для других светодиодов
25 строка, BTN - кнопка энкодера
29 строка, BRT - шим для светодиодов.
Наверное, Вам это должно о чем то сказать, Вы ведь знаете схему использования.
Упс... не заметил, что "нужно очень быстро" было пару дней назад :)