Нажмите вкл. удержание выкл. выключатель питания
Привет всем, я надеюсь, что кто-то здесь может мне помочь. Я пытаюсь заставить Arduino включать и выключать мой проект. Используя реле. Я ищу, чтобы он действовал как кнопка питания компьютера. Короткое нажатие, чтобы включить, и они остаются включенными, и долгое нажатие (скажем, 5 секунд), чтобы выключить, а затем оставаться выключенным, пока кнопка не будет нажата снова. Хотелось бы чтобы проект нельзя было случайно выключить Кто-нибудь может помочь. Спасибо
@David Boswell, 👍1
Обсуждение2 ответа
Лучший ответ:
Вот тестовый скетч, который я написал для другого вопроса. Требование другого вопроса заключалось в том, чтобы короткое нажатие (минимум 100 мс) включало светодиод, а длительное нажатие (1 секунда) выключало его. С небольшой модификацией этого скетча он может сработать для вас. Вам потребуется установить библиотеку Bounce2
.
// Нажмите и удерживайте кнопку в течение 100 мс, чтобы включить светодиод.
// Нажмите и удерживайте кнопку в течение 1000 мс, чтобы выключить светодиод.
#include <Bounce2.h>
byte buttonState = 0;
const byte ledPin = 3;
const byte buttonPin = 2;
const unsigned long debouncerInterval = 50;
unsigned long buttonPressedTime = 0;
unsigned long currentMillis = 0;
Bounce debouncer = Bounce();
void setup(){
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
debouncer.attach(buttonPin, INPUT_PULLUP);
debouncer.interval(debouncerInterval);
}
void loop(){
// Получить текущее время.
currentMillis = millis();
// Проверяем, была ли кнопка нажата или отпущена.
if(debouncer.update()){
// Нажато.
if(debouncer.read() == 0){
if(buttonState == 0){
buttonState = 1;
buttonPressedTime = currentMillis;
}
}
// Выпущенный.
else{
buttonState = 0;
}
}
// Включите или выключите светодиод.
if(buttonState == 1){
if(currentMillis - buttonPressedTime >= 1000){
digitalWrite(ledPin, LOW);
buttonState = 0;
}
else if(currentMillis - buttonPressedTime >= 100){
digitalWrite(ledPin, HIGH);
}
}
}
Большое спасибо за вашу помощь, это отлично работает. Я только что изменил кнопкуPreeedTime с 1000 на 5000, и она дозирует все, что я хотел... Большое спасибо., @David Boswell
Чтобы прояснить проблему, хотите ли вы управлять ON OFF с помощью Arduino? Это очень просто. Прочтите этот простой учебник и измените его в соответствии со своими потребностями.
Это не то, что пытается сделать @David Boswell. Короткое нажатие кнопки включает реле, и пользователь должен нажать и удерживать кнопку в течение 5 секунд, чтобы выключить реле. Кнопка в ссылке на учебник включает реле, а затем автоматически выключает реле по истечении 5 секунд., @VE7JRO
@VE7JRO да, конечно, с небольшой модификацией. джис., @juliussin
Вы попали в самую точку... VE7JRO. это то, что мне нужно сделать. Нажмите и удерживайте, чтобы выключить, @David Boswell
- Использование кнопки для включения и выключения Arduino
- Включение потенциометра/кнопки с цифровым выводом
- Нажмите кнопку для подачи питания на сервопривод
- Какое максимальное энергопотребление Arduino Nano 3.0?
- Питание светодиодной ленты - Сколько ампер?
- Как переключить светодиод при нажатии кнопки?
- Определение того, была ли нажата и отпущена кнопка
- Как запомнить значения переменных после перезагрузки платы Arduino Uno R3
Что вы пробовали до сих пор, и какая часть вызывает у вас трудности? Если вам нужна подсказка для начала работы, ваш код должен будет хранить состояние реле (вкл./выкл.), измерять время каждого нажатия кнопки и сравнивать время с продолжительностью короткого или длительного нажатия , в зависимости от текущего состояния., @JRobert
Привет, Джей Роберт, проведя большую часть двух дней в Интернете. Читаю посты, смотрю видео на ютубе. Я не могу найти пример, чтобы сделать это. Arduino IDE как кнопка включения, выключения, пример в ней. Но мне нужно долгое нажатие, чтобы выключить. Для предотвращения случайного отключения питания. По сути, я хочу, чтобы контакт поднимался вверх при коротком нажатии. и опускаться только в том случае, если он видит долгое нажатие, скажем, 5 секунд. Поэтому, если кнопка нажата случайно, она ничего не сделает, если не будет долгого нажатия., @David Boswell