Переход переменной через 0
- Войдите на сайт для отправки комментариев
Ср, 17/02/2016 - 19:20
Нужно сделать плавное заполнение ШИМ (как для светодиода)
Пишу примерно такой код:
byte i=0;
if(digitalWrite(pin)==HIGH){
i++;
analogWrite(otherPin , i );
}
else i--;
В итоге переменная i после значение 255 становится 0, а после 0 при уменьшении становится 255 и диод плавно мигает. Как от этого избавиться?
есть пример FADE называется
Да я видел, только он тоже меняет значение, а мне нужно, чтобы кнопку нажал, плавно стартануло и на нужном уровне(другая переменная) осталось, пока я ее держу. Потом после отпускания плавно погасло :)
Ну дык сравнивай первую переменную со второй через if. Когда первая достигнет значения второй, перестаёш инкрементировать первую.
Ну дык сравнивай первую переменную со второй через if. Когда первая достигнет значения второй, перестаёш инкрементировать первую.
приклей ему кнопку - иначе будет жаловаться, что работает без остановки.
Завтра на работе попробую. Делей никак нельзя. Она паразитирует радиомодуль
приклей ему кнопку - иначе будет жаловаться, что работает без остановки.
Та неохота было ещё кнопки писать...
Делей никак нельзя. Она паразитирует радиомодуль
Убрать не проблема, millis() же есть.
P.S. Налажал я что-то... В строке 07 надо так: if (brightness1 <= brightness2). Иначе остановится на 145, а не 150 (на один "шаг" меньше). И в строке 10 надо: brightness1 = brightness1 + fadeAmount;
Итак, рабочего цикла все-равно не получается :(
Вот код. Если убрать плавное торможение, то все работает, но вот последний блок все портит. Что не так?
Проблема оказалась в другом. Код исправил. Все стартует и останавливается, но вот значение spd прыгает с 252-255, соответственно есть перебои в выполнении условий и как результат, резкие скачки мотора. Как заложить предел?