А можно ли проще?
- Войдите на сайт для отправки комментариев
Втр, 13/12/2016 - 18:36
Заранее извеняюсь, на ленте WS2812B нужно плано сменить все цвета на заданном светодиоде.
Я это решил так
} for (int i= 0; i<256;i++) { pixels.setPixelColor(0, pixels.Color(0, 0, i)); pixels.show(); delay (50); } for (int i= 0; i<256;i++) { pixels.setPixelColor(0, pixels.Color(0, i,255)); pixels.show(); delay (50); } for (int i= 0; i<256;i++) { pixels.setPixelColor(0, pixels.Color(0,255,255-i)); pixels.show(); delay (50); } for (int i= 0; i<256;i++) { pixels.setPixelColor(0, pixels.Color(i,255,0)); pixels.show(); delay (50); } for (int i= 0; i<256;i++) { pixels.setPixelColor(0, pixels.Color(255,255-i,0)); pixels.show(); delay (50); } for (int i= 0; i<256;i++) { pixels.setPixelColor(0, pixels.Color(255,0,i)); pixels.show(); delay (50); } for (int i= 0; i<256;i++) { pixels.setPixelColor(0, pixels.Color(255-i,0,255)); pixels.show(); delay (50); } for (int i= 0; i<256;i++) { pixels.setPixelColor(0, pixels.Color(0,0,255-i)); pixels.show(); delay (50);
Вопрос, а можно ли как-то упростить конструкцию? Моих знаний не хватает
Заранее извеняюсь, на ленте WS2812B нужно плано сменить все цвета на заданном светодиоде.
Вопрос, а можно ли как-то упростить конструкцию? Моих знаний не хватает
Попробуйте сформулировать задачу так, чтобы Вы и сами её понимали и другие тоже. Так, как задача сформулирована сейчас, она во-первых - в Вашем коде решена неправильно. Во-вторых даже, если бы она была решена правильно, непонятно, что Вы понимаете по "упростить"? Чтобы программа легче читалась? Чтобы была короче в исходном коде? Чтобы занимала меньше памяти? Что такое "упростить"?
Предвидя вопрос "откуда видно, что задача решена неправильно?" сразу же отвечу.
В вашей программе 8 циклов. Каждый показывает по 256 различных цветов, так? Значит, всего Ваша программа показывает 256*8 = 2 048 цветов. Однако всего цветов при восьмибитном цвете, как известно 256 в кубе, т.е. 16 777 216.
Т.е. Всего цветов 16 777 216, Вы показываете 2 048, а кто будет показывать остальные 16 775 168 цветов? Значит Ваша программа показывает не "все цвета" как написано в задании, а только 0,012% из них!!!!
Для справки, чтобы показать все цвета, задерживаясь на каждом по 50мс (как у Вас), потребуется почти 10 суток непрерывной работы. Вы по-прежнему желаете показывать все цвета?
Давайье уберём математику из вопроса.
Можноли сделать так чтобы было не 8 циклов а меньше(короче код)?
Давайье уберём математику из вопроса.
Можноли сделать так чтобы было не 8 циклов а меньше(короче код)?
Можно ли сделать что? Все цвета надо показывать? Или как у Вас - меньше процента?
Если все, то пожалуйста. Но работать будет почти 10 суток пока все покажет
Если все, то пожалуйста. Но работать будет почти 10 суток пока все покажет
К такому решению я и сам приходил, но она ратотает не так как в моём варианте
Блин, так я уже третий раз Вас спрашиваю. КАК она должна работать? ВСЕ цвета показывать или как у Вас? Вы не отвечаете. Чего Вы ждёте? Что я сам догадаюсь, что Вам нужно?
Если Вам нужны все цвета, так Ваш вариант неправильный.
Я же с самого начала написал, можно ли упростить тот код что я написал, но чтоб работа ло так же?
Я же с самого начала написал, можно ли упростить тот код что я написал, но чтоб работа ло так же?
Да, но при этом Вы же написали "нужно плано сменить все цвета на заданном светодиоде". Одно другому противоречит, потому я и задал вопрос, на который ответ получил только сейчас.
Значит Ваш вопрос: можно ли написать. чтобы работала также, но при этом занимало меньше строк? Правильно? ответ: Можно.
Спасибо за помощь, я нащёл способ решения своей задачи.
Правда наверное тоже не идиальный
А идеального ничего не бывает, разве что операционные усилители и то. только в расчётах :)
)))шикароно
тип так?
или так, те же яйца, чёт меня вставило :)
Спасибо за помощь, я нащёл способ решения своей задачи.
Правда наверное тоже не идиальный
а у вас какой?
Ну и так далее, лень все расписывать
А разве для ардуино нельзя использовать процедуры с параметрами?
У вас по сути меняются только три переменные. Было бы красиво. Мне проверить не на чем.
А разве для ардуино нельзя использовать процедуры с параметрами?
я запретил.
Я в программировании не селен, делаю как знаний хватает.
А разве для ардуино нельзя использовать процедуры с параметрами?
Увы, в языке С нет процедур :(
Увы, в языке С нет процедур :(
Так функции есть. Тот же Фаберже, только сбоку. :-)
А разве для ардуино нельзя использовать процедуры с параметрами?
Увы, в языке С нет процедур :(
таки есть #define sum(A,B) A+B
ну почти )
Заранее извеняюсь, на ленте WS2812B нужно плано сменить все цвета на заданном светодиоде.
Я это решил так
Вопрос, а можно ли как-то упростить конструкцию? Моих знаний не хватает
наврятли можно проще
наврятли можно проще
можно вообще без for, бесконечный цикл в МК же уже есть!
Можно и без case.
Судя по коду, ТС нужно получить не все возможные цвета, а просто бугущую радугу на ленте.
ну почти )
Почти - нещитово!
Ничего не возвращающая функция и есть процедура. Даже без "почти".
Ничего не возвращающая функция и есть процедура. Даже без "почти".
Это "по понятиям", а "по закону" нет такого слова в стандарте языка.
Это "по понятиям", а "по закону" нет такого слова в стандарте языка.
Прямо как в песне...
Заранее извеняюсь, на ленте WS2812B нужно плано сменить все цвета на заданном светодиоде.
Я это решил так
Вопрос, а можно ли как-то упростить конструкцию? Моих знаний не хватает
наврятли можно проще
Чтоб заработал данный вариант надо switch(i%256) заменить наswitch(i/256)
А можно ли вынести этот код в void setup() чтоб потом всегда обращаться к переменным R G B?
Нет нельзя
Зато можно переменные R G B сделать глобальными и тогда можно будет
Заранее извеняюсь, на ленте WS2812B нужно плано сменить все цвета на заданном светодиоде.
Вопрос, а можно ли как-то упростить конструкцию? Моих знаний не хватает
Для получения бегущей радуги достаточно 6 периодов вместо 8.