У новичка проблема
- Войдите на сайт для отправки комментариев
Втр, 23/01/2018 - 22:19
Есть RGB светодиод который нужно заставить красиво переливатся. Я написал вот такой скетч, который по идее должен изменять яркость всех трёх цветов от 0 до 255, и если какой-то цвет имеет пороговую яркость, то она начинает менятся в обратную сторану, но когда значение перемненной отвечающей за яркость синего цвета становится 0, то сразу же меняет своё значение на 255, помогите пожалуйста.
int bluePin = 3; //Инициализируем пины RGB светодиода int greenPin = 5; int redPin = 6; int r = 0; //переменная отвечающая за яркость красного цвета int g = 255; //переменная отвечающая за яркость зелёного цвета int b = 255; //переменная отвечающая за яркость синего цвета int x = 2; //переменная отвечающая за шаг изменения яркости красного и синего цветов int y = 1; //переменная отвечающая за шаг изменения яркости зелёного цвета void setup(){ pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); } void loop(){ r = r + x; g = g - y; b = b - x; if(r == 0 || r == 255){ // при достижение крайних значений для яркости меняем знак переменной шага изменения яркости x = -x; } if(g == 0 || g == 255){ y = -y; } analogWrite(redPin, r); analogWrite(greenPin, g); analogWrite(bluePin, b); delay(200); }
Так где у вас условие для "разворота" синего цвета? И ставьте не == , а >= и <= , иначе в пролете будете, если начнете прибавлять более, чем по единице.
ну неужели сами не видите? Или вы на самом деле этого скетча не писали, а сперли его в инете?
P.S когда переменная r=255 то переменная b=0, то есть нет смысла писать
if
(b == 0 || b == 255)...
У новичка проблема- головы у него нет, а его жопа думать не хочет .Нужен пинок в думающий орган. строка 30 . Вопрос сколько будет если 0.2 сек * на 256=???
Полагаю, что вам нужно завести переменную z для b...
Если вы не заметили, то условие разворота переменной x уже есть, так как она используется для двух цветов
Можно конечно и так, но я хочу минимизировать "вес" скетча.
Если вы не заметили, то условие разворота переменной x уже есть, так как она используется для двух цветов
Не совсем понимаю ход вашей мысли.
условие 21 строки не сработает никогда и r будет расти, пока не превысит максимум для int - 32768, а b, соответсвенно уйдет в минус
Пользуюс, просто убрал для более презентабельного вида и минимизации затрат памяти.
Спасибо, я понял
Да чего там минимизировать... Вообще - если у вас шаг инкремента более единицы, то ровно в заданное число вы можете никогда не попасть.
Спасибо, не подумал
Попробуйте что-то вроде этого. Для остальных цветов сделайте по аналогии. У вас отсутствует контроль крайних значений.
Спасибо, но мне уже подсказали более оптимальный вариант:
Да умею я пользоватся монитором порта, хватит про это писать.
Спасибо, но мне уже подсказали более оптимальный вариант:
Использовать int32 только для того чтобы контролировать крайние значения +/- километр - это не комильфо. В будущем вангую у вас нехватку ОЗУ даже в мелочах. Естественно не в этом проекте.
Использовать int32 только для того чтобы контролировать крайние значения +/- километр - это не комильфо. В будущем вангую у вас нехватку ОЗУ даже в мелочах. Естественно не в этом проекте.
Поживём - увидим.
Использовать int32 только для того
Rootware, там нет int32.
Что касается вашего метода контроля границ - в книжках по стилю не советуют создавать слишком навороченные конструкции на основе тернарного оператора. Пишите проще, например передача байт через сериал пишется в 2-3 строчки... тогда и байты не теряются :)
Использовать int32 только для того
Rootware, там нет int32.
Что касается вашего метода контроля границ - в книжках по стилю не советуют создавать слишком навороченные конструкции на основе тернарного оператора. Пишите проще, например передача байт через сериал пишется в 2-3 строчки... тогда и байты не теряются :)
У меня ничего не теряется. Промашечка с вашей стороны. А по теме... Да ошибочка. Исправляюсь - int16.
У меня ничего не теряется. Промашечка с вашей стороны. А по теме... Да ошибочка. Исправляюсь - int16.
Правильно ли я понял, что вы так и остались в убеждении, что ваш код рабочий, а неполные пакеты приходят исключительно по причине "кривости ардуины" ? - плохое качество для разработчика - искать причины своих ошибок на стороне...
У меня ничего не теряется. Промашечка с вашей стороны. А по теме... Да ошибочка. Исправляюсь - int16.
Правильно ли я понял, что вы так и остались в убеждении, что ваш код рабочий, а неполные пакеты приходят исключительно по причине "кривости ардуины" ? - плохое качество для разработчика - искать причины своих ошибок на стороне...
Да. Каждый новый пакет приходит с первыми четырьмя байтами F0, а уж после сам отсылаемый пакет. Что это? Я думаю, что любая "попса" имеет прорехи. Так сказать компромисы.
Да. Каждый новый пакет приходит с первыми четырьмя байтами F0, а уж после сам отсылаемый пакет. Что это? Я думаю, что любая "попса" имеет прорехи. Так сказать компромисы.
почему же у всех, кроме вас - эта "попса" работает, не догадываетесь?
У меня практически во всех проекта используется обмен по сериалу - и нигде ничего не теряется....
Да. Каждый новый пакет приходит с первыми четырьмя байтами F0, а уж после сам отсылаемый пакет. Что это? Я думаю, что любая "попса" имеет прорехи. Так сказать компромисы.
почему же у всех, кроме вас - эта "попса" работает, не догадываетесь?
У меня практически во всех проекта используется обмен по сериалу - и нигде ничего не теряется....
И у меня, уже (!), ничто и нигде не теряется. Не поверите.
У меня практически во всех проекта используется обмен по сериалу - и нигде ничего не теряется....
Честный Си, ничего не ворует?