Один светодиод и 2 кнопки

Мне нужно включить светодиод нажатием кнопки № 1, и в течение 3 секунд он должен гореть, а если я нажму кнопку № 2 в течение этих 3 секунд, светодиод должен погаснуть. В противном случае через 3 секунды светодиод должен погаснуть сам по себе. Помогите пожалуйста!!!

, 👍-1

Обсуждение

https://arduino.stackexchange.com/tour, @MichaelT

что ты уже испробовал?, @GMc

Это должно вам помочь: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay, @Michel Keijzers

Перепробовал много способов и в инете ничего не нашел(((, @Guccifer2_1

Есть много руководств по управлению светодиодом. Также многие объясняют, как делать временные вещи (см. комментарий Мишеля Кейзерса). Также много туториалов, как читать кнопку. Прочтите и поймите их. Затем объедините их с тем, что вы хотите, чтобы ваш эскиз делал., @chrisl

Я думаю, что перепробовал все и ничего не смог получить из комментария Майкла Кейзера... (я только изучаю arduino))), @Guccifer2_1

Если вы уже пробовали что-то, почему бы вам не показать нам, что вы пробовали и как это не сработало для вас. Мы с радостью отладим ваш код, но не напишем его за вас., @chrisl

Привет и добро пожаловать. Ваш вопрос требует более подробной информации и может быть закрыт. Пожалуйста, прочитайте [спросите] и [Как задать хороший вопрос для Arduino Stack Exchange](https://arduino.meta.stackexchange.com/q/2523/19409)., @sa_leinad

вы слишком много думаете о том, как должна вести себя система .... из вашего описания кнопка 1 включает светодиод и запускает 3-секундный таймер .... кнопка 2 выключает светодиод независимо от состояния таймера ... когда таймер истекает, он выключает светодиод, @jsotola


1 ответ


1

Давайте начнем с блок-схемы:

схема

Чтобы реализовать это, я предлагаю объединить пример кнопки с Пример мигания без задержки. Для этой программы вы не хотите мигать, а вместо этого включаете светодиод на заданное время без использования функции delay().

Если задача кажется вам слишком сложной, уберите одно или несколько требований. Например, уберите кнопку 2 и просто включите светодиод на 3 секунды при нажатии кнопки 1. После этого попробуйте добавить кнопку 2 в программу.


Пример кнопки Arduino

/*
Кнопка

Включает и выключает светодиод (LED), подключенный к цифровому контакту 13,
при нажатии кнопки, прикрепленной к контакту 2.

Схема:
- Светодиод подключен от контакта 13 к земле
- кнопка подключена к контакту 2 от +5В
- Резистор 10K подключен к контакту 2 от земли

- Примечание: на большинстве плат Arduino уже есть светодиод.
подключен к пину 13.

создан в 2005 г.
Автор: ДодзёДэйв <http://www.0j0.org>
изменено 30 августа 2011 г.
Том Айгоу

Этот пример кода находится в общественном достоянии.

http://www.arduino.cc/en/Tutorial/Кнопка
*/

// константы не изменятся. Они используются здесь для установки номеров контактов:
const int buttonPin = 2;     // номер вывода кнопки
const int ledPin =  13;      // номер вывода светодиода

// переменные изменятся:
int buttonState = 0;         // переменная для чтения статуса кнопки

void setup() {
  // инициализируем вывод светодиода как выход:
  pinMode(ledPin, OUTPUT);
  // инициализируем контакт кнопки как вход:
  pinMode(buttonPin, INPUT);
}

void loop() {
  // прочитать состояние значения кнопки:
  buttonState = digitalRead(buttonPin);

  // проверяем, нажата ли кнопка. Если да, то состояние кнопки ВЫСОКОЕ:
  if (buttonState == HIGH) {
    // включить светодиод:
    digitalWrite(ledPin, HIGH);
  } else {
    // выключаем светодиод:
    digitalWrite(ledPin, LOW);
  }
}

Мигать без задержки, пример Arduino

/*
Мигать без задержки

Включает и выключает светоизлучающий диод (LED), подключенный к цифровому контакту,
без использования функции delay(). Это означает, что другой код может выполняться одновременно с
в то же время, не прерываясь кодом светодиода.

Схема:
- Используйте встроенный светодиод.
- Примечание. Большинство плат Arduino имеют встроенный светодиод, которым вы можете управлять. На УНО, МЕГА
и ZERO подключается к цифровому пину 13, на MKR1000 к пину 6. LED_BUILTIN
устанавливается на правильный вывод светодиода, независимо от того, какая плата используется.
Если вы хотите узнать, к какому контакту подключен встроенный светодиод на вашем
Модель Arduino, проверьте технические характеристики вашей платы по адресу:
https://www.arduino.cc/en/Main/Продукты

создан в 2005 г.
Дэвид А. Меллис
изменено 8 февраля 2010 г.
Пол Штоффреген
изменено 11 ноября 2013 г.
Скотт Фицджеральд
изменено 9 января 2017 г.
Артуро Гуадалупи

Этот пример кода находится в общественном достоянии.

http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
*/

// константы не изменятся. Используется здесь для установки контакта:
const int ledPin =  LED_BUILTIN;// номер вывода светодиода

// Переменные изменятся:
int ledState = LOW;             // ledState используется для установки светодиода

// Как правило, вы должны использовать "unsigned long" для переменных, которые содержат время
// Значение быстро станет слишком большим для хранения в int
unsigned long previousMillis = 0;        // запомним время последнего обновления светодиода

// константы не изменятся:
const long interval = 1000;           // интервал мигания (миллисекунды)

void setup() {
  // устанавливаем цифровой вывод в качестве выхода:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // здесь вы бы разместили код, который должен выполняться все время.

  // проверяем, не пора ли мигнуть светодиодом; то есть если разница
  // между текущим временем и последним временем, когда вы моргнули, светодиод больше, чем
  // интервал, с которым вы хотите мигать светодиодом.
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // сохранить время последнего мигания светодиодом
    previousMillis = currentMillis;

    // если светодиод выключен, включить его и наоборот:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // устанавливаем светодиод с помощью переменной ledState:
    digitalWrite(ledPin, ledState);
  }
}
,

Я понял эту схему, но я не знаю, как написать ее код. Это моя домашняя работа, и если я ее не сделаю, меня выгонят. Не могли бы вы написать его код?, @Guccifer2_1

Мы не являемся бесплатной службой написания кода. sa_leinad показал вам задачи, которые важны для этого проекта. Экплен, в чем конкретно у тебя проблема. Включение и выключение светодиода с помощью digitalWrite()? Чтение кнопки с помощью digitalRead()? Ждать определенное количество времени, прежде чем что-то сделать? Если вы прочитали учебник и не поняли его, вы можете спросить об этом здесь и объяснить, что именно вы не понимаете. Мы не будем писать код, который вы просто скопируете., @chrisl

Спасибо ребята! Я сделал это!!!!!!!, @Guccifer2_1