Кнопка, которая дает ввод, имеет небольшую задержку - затем дает другой
Я новичок в сфере Arduino, и мой вопрос, скорее всего, ответят более опытные коллеги. Я пытаюсь создать код для переключателя/кнопки, который, когда вы нажимаете его, генерирует выходной сигнал, затем ждет (задерживает?) и производит другой (после этого заданного количества времени), прежде чем завершить передачу информации. Можно ли что-нибудь сказать по этому поводу? Как это будет выглядеть? Например, код, который я представляю, выглядит примерно так:
if(buttonisPressed){
Function1 = 1; // Выдается исходный вывод
delay(1000); // Устанавливаем задержку для следующего вывода
Function2 = 1; // Второй вывод следует этому примеру после установленного времени задержки (только после одного нажатия, без вторичного)
}
Это фрагмент кода, который я использую, но мне не удалось заставить его работать.
Большое спасибо за помощь! Будем очень признательны за любые советы.
@Darkseid305, 👍0
Обсуждение1 ответ
Стандартный способ сделать это — подключить цифровой вывод ввода-вывода через (нормально разомкнутую) кнопку к земле. Внутри Arduino можно активировать подтягивающий резистор, чтобы поддерживать высокий уровень на выводе, когда кнопка открыта. Например, когда используется вывод №8: pinMode(8, INPUT_PULLUP). Программа следит за состоянием контакта, чтобы определить, была ли нажата кнопка. Подробное руководство по использованию переключателей для ввода данных в микрокомпьютеры вы можете найти здесь: http://www.gammon.com. au/forum/?id=11955
Обязательно ознакомьтесь с явлением, называемым «подпрыгиванием контактов»: при нажатии или отпускании кнопки контакты не размыкаются и не замыкаются сразу, а проходят серию быстрых размыканий/замыканий/размыканий/и т. д. состояния. Лучшая информация, которую я знаю о том, как с этим справиться, вы можете найти здесь: http://www.ganssle.com/debouncing.htm
- Кнопка с таймером переключения и функцией сброса времени + светодиод обратной связи
- Как использовать millis вместо delay на Arduino для независимых интервалов времени для двух выходных контактов
- Отображение случайного числа для отображения в течение T секунд с помощью Millis() для Dice Roller
- avrdude ser_open() can't set com-state
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Как справиться с rollover millis()?
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
что такое «генерировать ввод»? генерируется вывод. ввод читается., @Juraj
@Юрай Привет, Юрай! Спасибо что нашли время ответить. Чтобы уточнить: это будет сгенерированный результат., @Darkseid305
опубликуйте реальный код и опишите, что не так, @Juraj
В вашем операторе if установите флаг и метку времени с помощью функции millis(). Также в основном цикле напишите код, как в примере BlinkWithoutDelay, который активируется флагом. Внутри него вы можете сбросить флаг, @chrisl