Один светодиод и 2 кнопки
Мне нужно включить светодиод нажатием кнопки № 1, и в течение 3 секунд он должен гореть, а если я нажму кнопку № 2 в течение этих 3 секунд, светодиод должен погаснуть. В противном случае через 3 секунды светодиод должен погаснуть сам по себе. Помогите пожалуйста!!!
@Guccifer2_1, 👍-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
- Остановить мигание светодиодов
- Интеграция 2 кнопок для включения и выключения светодиода.
- Код Arduino для управления 4 светодиодами с 4 кнопок
- Нужен ли подтягивающий/понижающий резистор для цепи светодиода кнопки?
- Светодиод с кнопочным управлением Arduino со сборкой AVR
- Как повторить другое действие внутри цикла?
- Изменение состояния светодиода с помощью кнопки приводит к нестабильному результату
- Кнопка переключения переключает между операторами обращения с разблокированием кнопки
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