RGB светодиоды + AVR
- КАШАК
- Это не хвост, это антенна
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
- Контактная информация:
RGB светодиоды + AVR
Нужно сделать чтобы плавно изменялись цвета RGB светодиодов. Изменение цвета должно быть рандомным. С плавным изменением все просто, использую программный ШИМ. А вот с рандомным изменением цвета возникли проблемы. При использовании функции rand() цвета меняются как-то одинаково, при этом преобладает голубоватый и синий цвет, другие получаются намного реже. Какой алгоритм использовать для получения разнообразных цветов?
Опыт растет прямо пропорционально выведенному из строя оборудованию...
- Реклама
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: RGB светодиоды + AVR
не уверен, что и с плавной сменой цвета все так уж просто. а по поводу рандомных цветов, то, имхо, надо сделать массив "сочных" цветов и случайно выбирать из него очередной цвет, реализуя плавный переход от предыдущего к новому.
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: RGB светодиоды + AVR
Надо ввести коефициенты Ey=0.299Er+0.587Eg+0.114Eb
Где Er,Eb,Eg - яркости свечения соответствующих светодиодов
Ey - яркость свечения общего цвета (1 - max 0 - выключено)
Где Er,Eb,Eg - яркости свечения соответствующих светодиодов
Ey - яркость свечения общего цвета (1 - max 0 - выключено)
- КАШАК
- Это не хвост, это антенна
- Сообщения: 1303
- Зарегистрирован: Вс апр 19, 2009 17:20:22
- Откуда: г.Ростов-на-Дону/г.Таганрог/г.Геленджик
- Контактная информация:
Re: RGB светодиоды + AVR
А можно подробнее? Например у меня есть три цвета: 255 - цвет погашен, 0 - максимальная яркость. Как это применить в формуле и как использовать Ey?FUZZY_ писал(а):Надо ввести коефициенты Ey=0.299Er+0.587Eg+0.114Eb
Где Er,Eb,Eg - яркости свечения соответствующих светодиодов
Ey - яркость свечения общего цвета (1 - max 0 - выключено)
Опыт растет прямо пропорционально выведенному из строя оборудованию...
- Реклама
Re: RGB светодиоды + AVR
Я както делал агрегат который меняет цвет псевдо случайно с плавным переходом от цвета к цвету.
Есть таблица с цветами из которой при помощи функции RND() выбирается цвет для вывода.
После за 255 шагов цвет меняется с текущего на новый.
Самый вариант если использовать в качестве генератора случайной последовательности внешний генератор шума.
Вот код, написано на Bascom для Tiny85 с апаратным шимом.
А вобше поищит в инете "Лампу настроения".
Есть таблица с цветами из которой при помощи функции RND() выбирается цвет для вывода.
После за 255 шагов цвет меняется с текущего на новый.
Самый вариант если использовать в качестве генератора случайной последовательности внешний генератор шума.
Вот код, написано на Bascom для Tiny85 с апаратным шимом.
А вобше поищит в инете "Лампу настроения".
Код: Выделить всё
$regfile = "attiny85.dat "
$crystal = 8000000
Tccr0a = &B10100011
Tccr0b = &B00000001
Tcnt0 = &H00
'-------------------------------------
Pllcsr = &H00
Tccr1 = &B00000001
Gtccr = &B01100000
Tcnt1 = &H00
Ocr1c = &HFF
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.4 = Output
'тикущий цвет
Dim Red As Single
Dim Green As Single
Dim Blue As Single
'следующий цвет
Dim Nextred As Byte
Dim Nextgreen As Byte
Dim Nextblue As Byte
'приращение шага
Dim Delta_red As Single
Dim Delta_green As Single
Dim Delta_blue As Single
'временные переменые
Dim Temp1 As Integer
Dim Temp2 As Long
Dim Temp5 As Byte
Dim I As Byte
Dim B As Byte 'номер позиции из таблицы цвета.
Dim Ledr As Byte
Dim Ledg As Byte
Dim Ledb As Byte
B = 0
Restore Color
Ocr0a = 127
Ocr0b = 127
Ocr1b = 127
Do
B = B + 1
If B = 29 Then
B = 0
Restore Color
End If
'For I = 0 To B
Read Temp2
'Next
Nextblue = Temp2 And 255
Temp2 = Temp2 / 256
Nextgreen = Temp2 And 255
Temp2 = Temp2 / 256
Nextred = Temp2 And 255
'вычесляем прибавку для перехода к новому цвету за 255 шагов
Delta_red = Nextred - Red
Delta_red = Delta_red / 255
Delta_green = Nextgreen - Green
Delta_green = Delta_green / 255
Delta_blue = Nextblue - Blue
Delta_blue = Delta_blue / 255
For I = 0 To 254 'вывод цвета за 255 шагов
Red = Red + Delta_red
Green = Green + Delta_green
Blue = Blue + Delta_blue
Temp5 = Fix(red)
Ledr = Temp5
Temp5 = Fix(green)
Ledg = Temp5
Temp5 = Fix(blue)
Ledb = Temp5
Ocr0a = Ledg
Ocr0b = Ledb
Ocr1b = Ledr
Waitms 15
Next
Wait 20
Loop
Color:
Data &HFF0000& , &HDC143C& , &HFFA07A& , &HFA8072& ' красные
Data &HFF1493& , &HFF69B4& , &HFFB6C1& , &HC71585& ' розовые
Data &HFFA500& , &HFF4500& , &HFF7F50& , &HFFA07A& ' оранжевые
Data &HFFFF00& , &HFFD700& , &HFFFACD& , &HFFE4B5& ' жёлтые
Data &HEE82EE& , &HDDA0DD& , &H8A2BE2& , &HFF00FF& ' фиолетовые
Data &H00FF00& , &H00FA9A& , &H20B2AA& , &H8FBC8F& ' зелёные
Data &H0000FF& , &H00FFFF& , &H00BFFF& , &HB0C4DE& ' синие
Только абсолютная пустота бездны принесёт мне покой.


