Нажмите вкл. удержание выкл. выключатель питания

Привет всем, я надеюсь, что кто-то здесь может мне помочь. Я пытаюсь заставить Arduino включать и выключать мой проект. Используя реле. Я ищу, чтобы он действовал как кнопка питания компьютера. Короткое нажатие, чтобы включить, и они остаются включенными, и долгое нажатие (скажем, 5 секунд), чтобы выключить, а затем оставаться выключенным, пока кнопка не будет нажата снова. Хотелось бы чтобы проект нельзя было случайно выключить Кто-нибудь может помочь. Спасибо

, 👍1

Обсуждение

Что вы пробовали до сих пор, и какая часть вызывает у вас трудности? Если вам нужна подсказка для начала работы, ваш код должен будет хранить состояние реле (вкл./выкл.), измерять время каждого нажатия кнопки и сравнивать время с продолжительностью короткого или длительного нажатия , в зависимости от текущего состояния., @JRobert

Привет, Джей Роберт, проведя большую часть двух дней в Интернете. Читаю посты, смотрю видео на ютубе. Я не могу найти пример, чтобы сделать это. Arduino IDE как кнопка включения, выключения, пример в ней. Но мне нужно долгое нажатие, чтобы выключить. Для предотвращения случайного отключения питания. По сути, я хочу, чтобы контакт поднимался вверх при коротком нажатии. и опускаться только в том случае, если он видит долгое нажатие, скажем, 5 секунд. Поэтому, если кнопка нажата случайно, она ничего не сделает, если не будет долгого нажатия., @David Boswell


2 ответа


Лучший ответ:

0

Вот тестовый скетч, который я написал для другого вопроса. Требование другого вопроса заключалось в том, чтобы короткое нажатие (минимум 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


0

Чтобы прояснить проблему, хотите ли вы управлять ON OFF с помощью Arduino? Это очень просто. Прочтите этот простой учебник и измените его в соответствии со своими потребностями.

,

Это не то, что пытается сделать @David Boswell. Короткое нажатие кнопки включает реле, и пользователь должен нажать и удерживать кнопку в течение 5 секунд, чтобы выключить реле. Кнопка в ссылке на учебник включает реле, а затем автоматически выключает реле по истечении 5 секунд., @VE7JRO

@VE7JRO да, конечно, с небольшой модификацией. джис., @juliussin

Вы попали в самую точку... VE7JRO. это то, что мне нужно сделать. Нажмите и удерживайте, чтобы выключить, @David Boswell