Энкодер RGB контроллер
- Войдите на сайт для отправки комментариев
Чт, 07/05/2015 - 09:46
Ребята всем првет.
Есть энкодер приведенный на картинке ниже, RGB лента и arduino, необходимо сделать следующее.
1 при повороте энкодера менялся цвет RGB светодиода по спектру.
2 при нажатии на энкодер переключался из режима смены цвета в режим управления яркостью, пр повторном нажатии возврощался обратно в режим управления яркостью.
3 сохранялся цвет RGB светодиода при отключении питания.
Вот код который пытался сделать не получается. Данный скет контролирует только 1 светодиод, 3 не смог сделать
int brigRed = 0; // яркость LED, int fadeRed = 10; int brigGreen = 0; // яркость LED, int fadeGreen = 10; int brigBlue = 0; // яркость LED, int fadeBlue = 10; // шаг изменения яркости LED unsigned long currentTime; unsigned long loopTime; const int pin_A = 5; // pэнкодер А const int pin_B = 6; // Энкодер Б unsigned char encoder_A; unsigned char encoder_B; unsigned char Red=0; unsigned char Green=0; unsigned char Blue=0; void setup() { Serial.begin(9600); pinMode(9, OUTPUT); pinMode(10, OUTPUT); pinMode(11, 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); // считываем состояние выхода B энкодера if((!encoder_A) && (Red)) { // если состояние изменилось с положительного к нулю if(encoder_B) { // установим максимум 250 if(brigRed + fadeRed <= 250) // если условия соблюдаются то к brigRed прибовляем fadeRed brigRed += fadeRed; } else { // установим минимум 0 if(brigRed - fadeRed >= 0) // если условия соблюдаются то от brigRed отнмаем fadeRed brigRed -= fadeRed; } } Red = encoder_A; analogWrite(9, brigRed); Serial.println(brigRed); loopTime = currentTime; } }
Этот прмер гуляет строго по спектру но управляеться он просто в цикле for а не энкодером.
int REDpin = 9; int GREENpin = 10; int BLUEpin = 11; void setup(){} void loop(){ for(int value = 0 ; value <= 255; value +=1) { //яркость красного уменьшается analogWrite(REDpin, value); //яркость зеленого увеличивается analogWrite(GREENpin, 255-value); //синий не горит analogWrite(BLUEpin, 255); //пауза delay(30); } for(int value = 0 ; value <= 255; value +=1) { //красный не горит analogWrite(REDpin, 255); //яркость зеленого уменьшается analogWrite(GREENpin, value); //яркость синего увеличивается analogWrite(BLUEpin, 255-value); //пауза delay(30); } for(int value = 0 ; value <= 255; value +=1) { //яркость красного увеличивается analogWrite(REDpin, 255-value); //зеленый не горит analogWrite(GREENpin, 255); //яркость синего уменьшается analogWrite(BLUEpin, value); //пауза delay(30); } }
Задача как я понмаю не сложная но готов обсудить стоимость прошивки с тем кто сможет это написать.
Это даже не просто, а очень просто. На выходных буду с ребенком ардуинку мучать - сделаем. :)
Спасибо! Я могу собрать железо, но програмироване для меня тёмный лес) так вот иногда сижу изуаю интересно но тяжеловато чтото дается.
Забал сказать яркость тоже должна запомитаться при отключии птания)
Хочу встроить эту штуку для контроля светодиодной лентой в машину.
Забал сказать яркость тоже должна запомитаться при отключии птания)
Хочу встроить эту штуку для контроля светодиодной лентой в машину.
Какая яркость? У Вас в примере управление по модели HSV (яркость постоянная, только цвет меняется). Цвет запомнить можно в EEPROM, конечно. Но если его запоминать при каждом изменении и крутить его будут постоянно, то EEPROMа на долго не хватит, надо тогда какую-то FRAM ставить.
При нажатии на энкодер хочу сделать чтоб менялась яркость, я описал выше.
Ну так надо сделать както так чтобы при повороте ручки данные сразу в еепром не писались а скажем нет действий после каких то изменений с энкодером в течении 1-2 секунд записался в еепром,
Понятно
Сохранение делайте после того как покрутили энкодер и в течении 3-х секунд его не крутят, а не при каждом изменении цвета (щелчке энкодера). В этом случае даже если менять цвет 100 раз в день, ЕЕПРОМ хватит на 3 года. И это только исходя из того, что атмел гарантирует 100000 перезаписей, на самом же деле негарантированный износ ячейк ЕЕПРОМ наступает примерно через 1000000 перезаписей. Так что сохранение, при измении цвета 100 раз в день, будет работать от 3 до 30 лет.
И это только исходя из того, что атмел гарантирует 100000 перезаписей, на самом же деле негарантированный износ ячейк ЕЕПРОМ наступает примерно через 1000000 перезаписей.
Зависит от тех. процесса.
2ТС:У меня уже готовый проект есть, управляется с кнопки, без энкодера.
Связь: PCBADM на мэйлру
И это только исходя из того, что атмел гарантирует 100000 перезаписей, на самом же деле негарантированный износ ячейк ЕЕПРОМ наступает примерно через 1000000 перезаписей.
Зависит от тех. процесса.
Что зависит? И от какого процесса?
И это только исходя из того, что атмел гарантирует 100000 перезаписей, на самом же деле негарантированный износ ячейк ЕЕПРОМ наступает примерно через 1000000 перезаписей.
Зависит от тех. процесса.
Что зависит? И от какого процесса?
Макс , просто стыдно за тебя. Не знал разве что Атмел использует разные тех. процессы? До обеда один, после обеда другой, а по вторникам вообще баба Маня полы моет в лаборатории и епром сделаный в такой день выдерживает до миллиарда перезаписей.
До обеда один, после обеда другой, а по вторникам вообще баба Маня полы моет в лаборатории и епром сделаный в такой день выдерживает до миллиарда перезаписей.
Специалист микросхемотехники, примите таблетку и к Наполеону, он скучает.
Что зависит? И от какого процесса?
у атмела технормы 350/180/130 нметров.
кол-во перезаписей дано с учетом всего температурного диапазона и питающих напряжений.
тоесть при 200 тысячной перезаписи при пяти вольтах и 25 градусах, возможно успешно, но при малом напряжении и/или при минусе запись будут неудачны.
для разных версий может быть использован разный техпроцесс. также при одном процессе могу использоваться SLC или MLC.
кол-во перезаписей дано с учетом всего температурного диапазона и питающих напряжений.
тоесть при 200 тысячной перезаписи при пяти вольтах и 25 градусах, возможно успешно, но при малом напряжении и/или при минусе запись будут неудачны.
у атмела технормы 350/180/130 нметров.
для разных версий может быть использован разный техпроцесс. также при одном процессе могу использоваться SLC или MLC.
Это вы говорите. Что я сказал, написано выше.
Атмел меняет процессы, например были 2313/A/V все они сделаны про разным процессам.
Что ТС собрался использовать я не в курсе, поэтому утверждение "1000000 перезаписей" считаю неуместной.
Это вы говорите. Что я сказал, написано выше.
Атмел меняет процессы, например были 2313/A/V все они сделаны про разным процессам.
Что ТС собрался использовать я не в курсе, поэтому утверждение "1000000 перезаписей" считаю неуместной.
1000000 это заниженная величина, при испытаниях ATmega328P-PU, комнатная температура, 5 вольт, некоторые ячейки и на 2500000 перезаписей хватало, так же почитайте форумы у кого то и под 3500000 получалось.
Так что 1000000 для устройства ТС, в котором судя по коду будет стоять именно ATmega328P-PU/UA и эксплуатироваться оно будет в помещении очень даже уместно.
Сначала соглашаемся:
а потом сами себя посылаем:
Вы теритезируете. Пробовали проводить реальные испытания?
Тест на внимательность тоже завалили:
Хочу встроить эту штуку для контроля светодиодной лентой в машину.
неожиданно.
Сначала соглашаемся:
а потом сами себя посылаем:
Вы теритезируете. Пробовали проводить реальные испытания?
Ребята, что за флуд, лучше бы написали прошивку))
ты бы озвучил цену, а то так и будут флудить. хотя какая тут цена. код то совсем простой
500 рублей?
ну вот. теперь жди. только если хочешь чтобы помогли укажи какая лента, если с контроллером то каким и так далее. ты сам виноват что задачу нормально не описал
...укажи какая лента, если с контроллером то каким и так далее...
Дык, RGB же, остальное не важно, от конкретного контроллера зависит только пару строк кода как передать ленте конкретные значения R,G,B.
Вот что у меня сейчас собранно, для него нужна прошивка. С железом потом сам разберусь, для запитки светодиодной ленты буду использовать мосфет
Тебе написали, что есть готовый проект. Только управление с кнопки, а не энкодера.
Кнопку подключать одним концом к земле ,другим к цифровому выводу дуины.
У нас вышло как-то так :):
Запись по смене режима регулировки (нажатие кнопки). Т.е. выставил цвет - нажал, выставил яркость и опять нажал.
Ребята всем спасибо огромное за помощ. Но у меня почему-то не работает обработка энокодера.
Странно. Я этот алгоритм использовал. Все взлетело сразу. Что у Вас за енкодер?
Завтра приду домой посмотрю, может энокодер подругому собран у меня. Ps энокодер у меня сразу собранан на плате со всеми подтягивающими резисторами куплен на ebay
Ребята всем спасбо огромное, посидель сегодня дописал код под себя и довел почти до совершенства) Осталось сделать так чтобы пр удержани кнопки включался белый цвет, так как когда бегаешь по спектру белый цвет не включается.
вот код может кому пригодится
в когде используеться библиотека EEPROM2 для храненя не цельных чсел!
Ребята есть какаята проблема в коде, устрйство зависает примерно через 10 мин после включения. т.е лампочки горят но на энкодер перестает реагировать
Не примерно, а точно через 10 минут. Конструкция:
if
(millis() > 0x927C0)
while
(millis());
в переводе с ардуино на русский: "Через 10 минут не делай ничего приблизительно 50 дней."Не примерно
Это значит, что разработчика кинули :)
Не примерно
Это значит, что разработчика кинули :)
ТС зажал максиму обещанные 500 рублей? :)
Не примерно
Это значит, что разработчика кинули :)
Вот-вот.
А чего защита такая детская?
А чего защита такая детская?
Мне даже в голову не пришло, что это "защита", думал так задумано, чтобы можно было цвет выставить только в первые 10 минут работы, типа фича такая :).
А чего защита такая детская?
Мне даже в голову не пришло, что это "защита", думал так задумано, чтобы можно было цвет выставить только в первые 10 минут работы, типа фича такая :).
Теперь ты должен Максиму 500 рублей. Ибо нефиг лезть куда не просят.
Что значит "не просят"? ТС как раз и просил ;)
Что значит "не просят"? ТС как раз и просил ;)
Мдааа.. не дал человеку получить заработаные 500 рублей и делает вид что он не причем. Как-то не хорошо.
Мельчают людишки. :(
Ребята я никого кидать не собираюсь, я готов заплатить за готовую прошивку но мне такую никто еще не предоставил. код максима мне очень помог но как он работал мне не нравилося, шаг измененя яркости очень маленький был и регулировался он кнопкой а не энкодером. код kvadik у меня вообще не запустился. И никто из вас напрямую комне не обратлся что готов сделать за объявленную сумму прошивку, а тупо покидали на форум свои прошивки, и говорите что я зажал 500р.
maksim мне твоя прошивка более понятна была, и многое сделал на его основе, поэтому тебе я готов заплатить скажи куда тебе закинуть денюшку.
ну я как-то и не претендовал :)
http://arduino.ru/forum/ishchu-ispolnitelya/spisok-ispolnitelei
#4
Последний код не работает. Он специально похерен? EEPROM_write(10, brightness); -что это?
Запоминание яркости.
Код рабочий, добавь библиотеку eeprom2 (скачай в интернете), она нужна чтобы сохранять не целые числа
Так ты добавил библиотеку EEPROM2?
Вот еще такой код нашел.....работают только индикаторные диоды...думаю прерывания не для меги2560 (если что не смейтесь, неделю как мигаю светодиодом))
Библиотеку можешь скачать у меня на сайте
http://dixom.ru/instruktsii-i-uroki/rgb-lenta-i-povortonyj-enkoder
Если буквы оранжевые то значит есть?....Несколько раз добавлял мож какой нить конфликт?
В примерах библиотеки не вижу такого, с подчеркиванием " EEPROM_read"