Задержка сигнала потенциометром.
- Войдите на сайт для отправки комментариев
Пт, 06/05/2022 - 11:44
Все доброго дня, помогите разобраться как реализовать програмно вот такую идею на arduino nano:
D2 - подключена кнопка. D3 - светодиод A1 - потенциометр.
При нажатии кнопки зажигается светодиод, потенциометром нужно реализовать задержку между нажатием кнопки и поджигом диода с маской : 1/30 сек, 1/32 сек, 1/35сек, 1/40сек, 1/45сек, 1/50сек,1/55сек,1/60сек, 1/65сек,1/70сек. Не уверен что светодиод в данном случаи нужно подключать через D3 т.к при удержании кнопки светодиод будет гореть непрерывно, а нужно чтобы просто мигнул. Буду рад вашей помощи и идеям
Не уверен что светодиод в данном случаи нужно подключать через D3 т.к при удержании кнопки светодиод будет гореть непрерывно
почему бы это?
Я правильно понял - кнопка на D2. а светик D3 ? с чего они станут влиять друг на друга?
>>При нажатии кнопки зажигается светодиод,
>>потенциометром нужно реализовать задержку между нажатием кнопки и поджигом диода
Мне кажется одно противоречит другому...
нужно реализовать задержку..... с маской : 1/30 сек, 1/32 сек, 1/35сек, 1/40сек, 1/45сек, 1/50сек,1/55сек,1/60сек, 1/65сек,1/70сек
что такое "маска 1/32 сек" ? - одна тридцать вторая секунды?
>>При нажатии кнопки зажигается светодиод,
>>потенциометром нужно реализовать задержку между нажатием кнопки и поджигом диода
Мне кажется одно противоречит другому...
Выставляем на ПЦ задержку>жмем кнопку>диод зажигается через выставленное на ПЦ время.
нужно реализовать задержку..... с маской : 1/30 сек, 1/32 сек, 1/35сек, 1/40сек, 1/45сек, 1/50сек,1/55сек,1/60сек, 1/65сек,1/70сек
что такое "маска 1/32 сек" ? - одна тридцать вторая секунды?
верно
Ну и какие проблемы? Читаем резистор и ждем нажатия. По нажатию моргаем в соответствии с резистором. Ждем отпускания кнопки. Всё по новой.
вы уверены, что отличите на глаз 1/32 от 1/35 секунды? :)
вы уверены, что отличите на глаз 1/32 от 1/35 секунды? :)
Абсолютно)
>>При нажатии кнопки зажигается светодиод,
>>потенциометром нужно реализовать задержку между нажатием кнопки и поджигом диода
Мне кажется одно противоречит другому...
Выставляем на ПЦ задержку>жмем кнопку>диод зажигается через выставленное на ПЦ время.
Как два пальца... Создаешь массив задержек arrDelay[10] = {тут значения};
Нажал кнопку;
delay(arrDelay[analogRead(pin)/103]);// [ переводим 0-1023 в 0-9 ]
зажигаешь лед;
>>При нажатии кнопки зажигается светодиод,
>>потенциометром нужно реализовать задержку между нажатием кнопки и поджигом диода
Мне кажется одно противоречит другому...
Выставляем на ПЦ задержку>жмем кнопку>диод зажигается через выставленное на ПЦ время.
Как два пальца... Создаешь массив задержек arrDelay[10] = {тут значения};
Нажал кнопку;
delay(arrDelay[analogRead(pin)/103]);// [ переводим 0-1023 в 0-9 ]
зажигаешь лед;
Мои знания кода остановились на этом)
void setup() { Serial.begin(9600); pinMode(2, INPUT_PULLUP); // пин с кнопкой pinMode(A1, INPUT); // пин с потенцеометром } void loop() { if (digitalRead(2) == 0) { pinMode(3, OUTPUT); // пин с диодом digitalWrite(3, 1); } else { pinMode(3, OUTPUT); digitalWrite(3, 0); } int value = analogRead(A1); Serial.println(value); delay(100); }elaz74, попробуйте сформулировать своими словами. что вы хотите получить. Не на языке программирования.
elaz74, попробуйте сформулировать своими словами. что вы хотите получить. Не на языке программирования.
Выставляем на ПЦ задержку>жмем кнопку>диод зажигается через выставленное на ПЦ время.
Выставляем на ПЦ задержку>жмем кнопку>диод зажигается через выставленное на ПЦ время.
То есть СНАЧАЛА задержка, потом диод, правильно? Тогда почему в вашем коде наоборот? диод зажигается СРАЗУ, а задержка применяется потом? одна рука не знает. что делает другая?
Выставляем на ПЦ задержку>жмем кнопку>диод зажигается через выставленное на ПЦ время.
То есть СНАЧАЛА задержка, потом диод, правильно? Тогда почему в вашем коде наоборот? диод зажигается СРАЗУ, а задержка применяется потом? одна рука не знает. что делает другая?
Все верно, задержка потом диод
Все верно, задержка потом диод
отлично. Теперь переставьте операторы в соответвии с этим алгоритмом.
Все верно, задержка потом диод
отлично. Теперь переставьте операторы в соответвии с этим алгоритмом.
Сложно( я не потяну.
Сложно( я не потяну.
переставить операторы сложно? - а пробовал?
Если даже это "сложно" - то может чем-то другим заняться? Не каждый умеет играть на скрипке - а ведь живут же люди....
Как два пальца... Создаешь массив задержек arrDelay[10] = {тут значения};
Нажал кнопку;
delay(arrDelay[analogRead(pin)/103]);// [ переводим 0-1023 в 0-9 ]
зажигаешь лед;
Потенциометр нужно поставить на панель и нарисовать шкалу на десять диапазонов или 11 меток. Диапазоны в единицах АЦП 0-102, 103-205 и т.д. Затем, устанавливая ручку потенциометра на соответствующий диапазон, будешь выбирать одну из 10 задержек.
analogRead(pin) / 103; вот это и есть номер задержки, отсчет с нуля до 9
Сложно( я не потяну.
переставить операторы сложно? - а пробовал?
Если даже это "сложно" - то может чем-то другим заняться? Не каждый умеет играть на скрипке - а ведь живут же люди....
Спасибо за развернутый ответ.
Спасибо за развернутый ответ.
обращайтесь
int arrDelay[10] = {33, 31, 28, 25, 22, 20, 18, 17, 15, 14}; void setup() { Serial.begin(9600); pinMode(2, INPUT_PULLUP); // пин с кнопкой pinMode(A1, INPUT); // пин с потенцеометром pinMode(3, OUTPUT); // пин с диодом } void loop() { if (digitalRead(2) == 0) { delay(arrDelay[analogRead(A1) / 103]); // [ переводим 0-1023 в 0-9 ] digitalWrite(3, 1); } else { digitalWrite(3, 0); } }строка 5 лишняя
строка 5 лишняя
да, но это уже без меня )))
Для ТС чуть подумать. 1/30 сек = 33,(3) мс, а не ровно 33 мс. Да еще millis() неравномерно тикает.
Для ТС чуть подумать. 1/30 сек = 33,(3) мс, а не ровно 33 мс. Да еще millis() неравномерно тикает.
можно через микрос, тогда "лохматость" будет повыше
А где у вас там millis()?
А где у вас там millis()?
Это называется коротыш мозга)) Хотел предложить ТС сделать через миллис, потом стер эту глупую затею... а миллис то остался. Как говорит деда - наданапицца...
int arrDelay[10] = {33, 31, 28, 25, 22, 20, 18, 17, 15, 14}; void setup() { Serial.begin(9600); pinMode(2, INPUT_PULLUP); // пин с кнопкой pinMode(A1, INPUT); // пин с потенцеометром pinMode(3, OUTPUT); // пин с диодом } void loop() { if (digitalRead(2) == 0) { delay(arrDelay[analogRead(A1) / 103]); // [ переводим 0-1023 в 0-9 ] digitalWrite(3, 1); } else { digitalWrite(3, 0); } }Попробовал собрать симуляцию на основе вашего кода. https://wokwi.com/projects/329203001267847763
Попробовал собрать симуляцию на основе вашего кода. https://wokwi.com/projects/329203001267847763
это не мой код! в ваш код добавлено предложенное одним из участников, точно по алгоритму что описали, если нужна была не задержка на включение, а длительность импульса (одновибратор), то это несколько иное
Диод должен гореть определенное время или же загораться через определенное время после нажатия кнопки. Если второе, то сколько он должен гореть - пока кнопка нажата ?