Замена delay() на millis() в цикле for.
- Войдите на сайт для отправки комментариев
Вс, 22/04/2018 - 23:30
Уважаемые формучане! Имеется программа управления ргб светодиодом, которая по кругу выводит все цвета радуги. Необходимо заменить delay() внутри цикла for, ибо слишком большой отклик для моих целей (создание мини клавиатуры). Как это можно реализовать?
#define r 6 // Пин подключения красного #define g 5 // Пин подключения зеленого #define b 3 // Пин подключения синего int active_color; boolean turn = true; int invert(int value){ return map(value, 0, 255 ,255, 0); } void setup() { pinMode(r,OUTPUT); pinMode(g,OUTPUT); pinMode(b,OUTPUT); analogWrite(r,invert(255)); analogWrite(g,invert(0)); analogWrite(b,invert(0)); active_color = b; } void loop() { switch (active_color) { case r: active_color = b; break; case g: active_color = r; break; case b: active_color = g; break; } if (!turn) for (int i=0; i<=255; i++) { analogWrite(active_color,i); delay(5); } else for (int i=255; i>=0; i--) { analogWrite(active_color,i); delay(5); } turn = !turn; }
Разными путями. Самый простой, после каждого delay вызвать подпрограмму опроса клавиатуры и реакции на действие.
#27
как вариант задать глобальную переменную для величины ШИМ, убрать циклы for, а действия из них перенести в луп, выполняя раз в 5мс с помощью millis
Всем спасибо за идеи. Проблему решил. Для тех, кому нужен код, выкладываю.
и в чем был смылс такого перехода на миллис? Глобально ничего не изменилось и программа работает точно так же как и с делей.
Уменьшить время отклика
И прям получилось то, что нужно? Можно полный код посмотреть с кнопками?
Не совсем то, но стало лучше
Это вопрос привычек. Мне в шараге тётка тоже грит: решаем уравнения, пишем real, потому что есть точка. Мотаем цыкал - int. А я вижу что цыкл от 1 до 8 (пизжю, от 0 до 7) - пишу byte.
<срыв покровов>
sersh4nt, он хотел сказать
</срыв покровов>
sersh4nt, он хотел сказать
Только зачем нужна эта функция?
Все, больше она нигде не используется.
я вообще-то имел ввиду по другому, потому как
и в чем был смылс такого перехода на миллис? Глобально ничего не изменилось и программа работает точно так же как и с делей.
примерно так (в работе не проверял):