светодиоды+Millis+аналоговый вход+кнопка включения.
- Войдите на сайт для отправки комментариев
Всем хорошего дня! Я новичок, не шарю и бла-бла-бла. Поставил себе задачу сделать следующее (просто в качестве обучения и понимания):
1) Нажатие кнопки выполняет код. (Повторил урок, но только кнопка была с фиксацией. Хочу понять как сделать тоже самое, только с кнопкой без фиксации)
2) Повторное нажатие кнопки останавливает код.
3) 5 светодиодов по кругу друг за другом по очереди зажигаются и сразу выключаются. (бегущая точка)
(Это сделать удалось, только с помощью Delay, но он не подходит тут, код смысла нет вставлять, он понятен всем. Уроки с millis повторял, но везде только 1 светодиод, как сделать больше уже непонятно)
4) Яркость светодиодов регулируется потенциометром в любой момент.
(Алгоритм готового известного урока в принципе понятен, но непонятно как его интегрировать)
#define led 9 #define pot A0 void setup() { pinMode(led, OUTPUT); pinMode(pot, INPUT); } void loop() { int x; x = analogRead(pot) / 4; analogWrite(led, x); }
Прошу помощи, подсказок, примеров. Спасибо.
3) 5 светодиодов по кругу друг за другом по очереди зажигаются и сразу выключаются. (бегущая точка)
(Это сделать удалось, только с помощью Delay, но он не подходит тут, код смысла нет вставлять, он понятен всем. Уроки с millis повторял, но везде только 1 светодиод, как сделать больше уже непонятно)
Вот это заявление просто шокировало.
Проблема с delay() именно в том, что крайне сложно вставить второй светодод, еще сложнее - третий, а дольше - вообще лучше не пытаться. В отличие от кода на millis(), в который любое количество светодилдов вставляется легко и непринужденно.
Давайте сделаем так: Вы для меня напишете код с delay(), а я для Вас напишу код той же задачи с millis().
А задача очень простая: первый светодиод должен мигать с полупериодом 125 мс, второй - 81 мс, а третий - 112 мс.
Вот это заявление просто шокировало.
Проблема с delay() именно в том, что крайне сложно вставить второй светодод, еще сложнее - третий, а дольше - вообще лучше не пытаться. В отличие от кода на millis(), в который любое количество светодилдов вставляется легко и непринужденно.
Давайте сделаем так: Вы для меня напишете код с delay(), а я для Вас напишу код той же задачи с millis().
А задача очень простая: первый светодиод должен мигать с полупериодом 125 мс, второй - 81 мс, а третий - 112 мс.
Либо я неправильно объяснил, либо Вы меня неправильно поняли. Светодиоды загораются по очереди один за одним. То есть код выполняется в последовательности: включаем первый-ждем(delay)-выключаем первый-включаем второй-ждем(delay)-выключаем второй и тд до пятого, потом снова первый.. То, что Вы задали, это не совсем то и мне не под силу.
С millis я не понимаю (да и вообще нужен ли тут millis?!) как сделать, чтобы 5 светодиодов загорались в такой же последовательности.
Пытался хотя бы с одним светодиодом и с millis провернуть схему, при которой он постоянно моргает с интервалом 1 секунда, и уровень яркости мигания берется с входа A0 потенциометра, но всё тщетно.
Так код работает. Предпоследняя строчка насколько я понимаю отвечает за смену статуса светодиода. Как сюда вкорячить analogWrite(led, x) и выключение digitalWrite(led, LOW) мне не понятно.
Предпоследняя строчка насколько я понимаю отвечает за смену статуса светодиода. Как сюда вкорячить analogWrite(led, x) и выключение digitalWrite(led, LOW) мне не понятно.
У вас явная проблема в понимании работы analogWrite и digitalWrite, а не миллис. Для начала попытайтесь сформулировать, зачем вы к одному пину собираетесь применять analogWrite, "смену статуса" и "выключение" :)
У вас явная проблема в понимании работы analogWrite и digitalWrite, а не миллис. Для начала попытайтесь сформулировать, зачем вы к одному пину собираетесь применять analogWrite, "смену статуса" и "выключение" :)
Не исключаю. Насколько я понимаю digitalWrite подаёт или отключает напряжение на порте. analogWrite подаёт напряжение на порт в пределах от 0 до 5 Вт, которое либо я задам сам, либо считаю с порта. Я не знаю зачем я хочу сделать так, я хочу узнать как правильно и, к сожалению, в округе объсянить некому, поэтому и спрашиваю как нужно. Хочу, чтобы светодиод мигал например с периодом в 1 секунду, но яркость (т.е. напряжение на порте) регулировалось потенциометром в режиме онлайн.
Алгоритм я понимаю так :
1)Считывание показания потенциометра
2)Подача напряжения, которое считали на светодиод в течение 1 секунды
3)Отключение напряжения на 1 секунду
4) См.пункт первый.
Не смейтесь, если несу что попало.
twilightwatch, я бы не сказал, что Вы все понимаете правильно, скорее - наоборот.
Но если Вам нужно именно тот алгоритм из 4-х пунктов, то возмитете любой blink - не важно, на delay или на millis, и замените в нем
digitalWrite(pin, HIGH);
на
analogWrite(pin, value);
а
digitalWrite(pin, LOW);
на
analogWrite(pin, 0);
Ну, естественно, позаботиться взять value с резистора и не забыть, что analogWrite работает не на любом пине.