Нужен простой скетч

roman126

✩✩✩✩✩✩✩
6 Мар 2026
1
0
Здравствуйте уважаемые форумчане, мне нужен простой скетч для управления 1 светодиодом двумя кнопками.
1 кнопка имеет нормально разомкнутый контакт(но) 2-я нормально замкнутый(нз)
Логика работы такая.
При первом нажатии на 1-ю кнопку(контакт но) светодиод должен загореться и не тухнуть при отпускании
Если при зажженом светодиоде нажать вторую кнопку ( контакт нз) то светодиод должен потухнуть и не загораться при отпускании кнопки.
При втором нажатии на 1-ю кнопку (контакт но) светодиод должен потухнуть, и так по кругу
 

SlavaZagaynov

★✩✩✩✩✩✩
27 Ноя 2019
232
42
www.youtube.com
мне нужен простой скетч для управления 1 светодиодом двумя кнопками. 1 кнопка имеет нормально разомкнутый контакт(но) 2-я нормально замкнутый(нз) Логика работы такая. При первом нажатии на 1-ю кнопку(контакт но) светодиод должен загореться и не тухнуть при отпускании Если при зажженом светодиоде нажать вторую кнопку ( контакт нз) то светодиод должен потухнуть и не загораться при отпускании кнопки. При втором нажатии на 1-ю кнопку (контакт но) светодиод должен потухнуть, и так по кругу

Алиса
Разберу задачу пошагово и предоставлю готовый скетч для Arduino.
Логика работы
  1. Кнопка 1 (НО — нормально разомкнутая): при нажатии включает светодиод, который остаётся включённым после отпускания кнопки.
  2. Кнопка 2 (НЗ — нормально замкнутая): при нажатии выключает светодиод, который остаётся выключенным после отпускания.
  3. Второе нажатие кнопки 1 выключает светодиод — и так по кругу.
Схема подключения
  • Светодиод: анод через резистор 220 Ом к пину 13, катод к GND.
  • Кнопка 1 (НО): один контакт к GND, второй к пину 2, также подключить подтягивающий резистор 10 кОм от пина 2 к 5 В.
  • Кнопка 2 (НЗ): один контакт к 5 В, второй к пину 3, также подключить стягивающий резистор 10 кОм от пина 3 к GND.
Скетч для Arduino
cpp


// Пины подключения
const int ledPin = 13; // Пин светодиода
const int button1Pin = 2; // Пин кнопки 1 (НО)
const int button2Pin = 3; // Пин кнопки 2 (НЗ)

// Переменные состояния
int ledState = LOW; // Текущее состояние светодиода
int button1State; // Текущее состояние кнопки 1
int lastButton1State = HIGH; // Предыдущее состояние кнопки 1 (для антидребезга)
int button2State; // Текущее состояние кнопки 2
int lastButton2State = LOW; // Предыдущее состояние кнопки 2 (для антидребезга)

// Для антидребезга
unsigned long lastDebounceTime1 = 0;
unsigned long lastDebounceTime2 = 0;
const unsigned long debounceDelay = 50; // Задержка антидребезга в мс

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
digitalWrite(ledPin, ledState);
}

void loop() {
// Читаем состояние кнопок
int reading1 = digitalRead(button1Pin);
int reading2 = digitalRead(button2Pin);

// Обработка антидребезга для кнопки 1
if (reading1 != lastButton1State) {
lastDebounceTime1 = millis();
}
if ((millis() - lastDebounceTime1) > debounceDelay) {
if (reading1 != button1State) {
button1State = reading1;
if (button1State == LOW) { // Кнопка 1 нажата (НО контакт замыкается на GND)
ledState = !ledState; // Инвертируем состояние светодиода
}
}
}

// Обработка антидребезга для кнопки 2
if (reading2 != lastButton2State) {
lastDebounceTime2 = millis();
}
if ((millis() - lastDebounceTime2) > debounceDelay) {
if (reading2 != button2State) {
button2State = reading2;
if (button2State == HIGH) { // Кнопка 2 нажата (НЗ контакт размыкается от 5 В)
ledState = LOW; // Выключаем светодиод
}
}
}

// Обновляем состояние светодиода
digitalWrite(ledPin, ledState);

// Сохраняем текущие состояния для следующего цикла
lastButton1State = reading1;
lastButton2State = reading2;
}

Пояснения к коду
  1. Антидребезг (debouncing): кнопки могут давать ложные срабатывания при нажатии из‑за дребезга контактов. Код использует задержку 50 мс для фильтрации ложных сигналов.
  2. Логика кнопок:
    • Кнопка 1 (НО): в покое — 5 В (HIGH), при нажатии — GND (LOW).
    • Кнопка 2 (НЗ): в покое — 5 В (HIGH), при нажатии — разрыв цепи (может быть LOW).
  3. Состояние светодиода хранится в переменной ledState и меняется только при подтверждённом нажатии кнопки.
Проверка работы
  1. Загрузите скетч в Arduino.
  2. Нажмите кнопку 1 — светодиод должен загореться.
  3. Нажмите кнопку 2 — светодиод должен погаснуть.
  4. Нажмите кнопку 1 снова — светодиод погаснет (или загорится, если был выключен).