Найти в Дзене
KNL Games

Листинг кода к видео Arduino № 6 Событие кнопки. Условный оператор if.

// --- Определения Пинов --- const int buttonPin = 2;      // Пин, к которому подключена кнопка const int ledPins[] = {13, 12, 11, 10}; // Массив пинов для 4 светодиодов const int numLeds = 4;        // Общее количество светодиодов // --- Переменные для обработки дребезга и счета --- int buttonState = 0;          // Текущее состояние пина int lastButtonState = 0;      // Предыдущее состояние пина unsigned long lastDebounceTime = 0; // Время последнего изменения состояния unsigned long debounceDelay = 50;  // Задержка для подавления дребезга (в миллисекундах) int clickCount = 0;           // Счетчик нажатий // --- Установка --- void setup() { // Инициализация пина кнопки с внутренней подтяжкой (Pull-up) // Кнопка замыкается на GND при нажатии (HIGH при отпускании, LOW при нажатии) pinMode(buttonPin, INPUT_PULLUP); // Инициализация пинов светодиодов как выходы for (int i = 0; i < numLeds; i++) { pinMode(ledPins[i], OUTPUT); digitalWrite(ledPins[i], LOW); // Все светодиоды выключены в нач
чтобы было вам проще
чтобы было вам проще

// --- Определения Пинов ---

const int buttonPin = 2;      // Пин, к которому подключена кнопка

const int ledPins[] = {13, 12, 11, 10}; // Массив пинов для 4 светодиодов

const int numLeds = 4;        // Общее количество светодиодов

// --- Переменные для обработки дребезга и счета ---

int buttonState = 0;          // Текущее состояние пина

int lastButtonState = 0;      // Предыдущее состояние пина

unsigned long lastDebounceTime = 0; // Время последнего изменения состояния

unsigned long debounceDelay = 50;  // Задержка для подавления дребезга (в миллисекундах)

int clickCount = 0;           // Счетчик нажатий

// --- Установка ---

void setup() {

// Инициализация пина кнопки с внутренней подтяжкой (Pull-up)

// Кнопка замыкается на GND при нажатии (HIGH при отпускании, LOW при нажатии)

pinMode(buttonPin, INPUT_PULLUP);

// Инициализация пинов светодиодов как выходы

for (int i = 0; i < numLeds; i++) {

pinMode(ledPins[i], OUTPUT);

digitalWrite(ledPins[i], LOW); // Все светодиоды выключены в начале

}

Serial.begin(9600);

Serial.println("Система счета нажатий запущена.");

}

// --- Основной цикл ---

void loop() {

// Читаем текущее состояние кнопки

int reading = digitalRead(buttonPin);

// Проверка дребезга: если состояние изменилось

if (reading != lastButtonState) {

// Сбрасываем таймер дребезга

lastDebounceTime = millis();

}

// Проверка, прошло ли достаточно времени с последнего изменения

if ((millis() - lastDebounceTime) > debounceDelay) {

// Если состояние стабилизировалось

if (reading != buttonState) {

buttonState = reading;

// Логика обработки нажатия (Кнопка замыкается на GND, поэтому LOW = Нажато)

if (buttonState == LOW) {

HandleClick();

}

}

}

// Сохраняем текущее значение для следующей итерации

lastButtonState = reading;

// Обновление светодиодов на основе текущего счетчика

UpdateLeds();

}

// --- Функция обработки нажатия ---

void HandleClick() {

clickCount++;

// Ограничиваем счетчик, чтобы не превысить 4 (максимум светодиодов)

if (clickCount > numLeds) {

clickCount = numLeds;

}

Serial.print("Кнопка нажата. Текущий счет: ");

Serial.println(clickCount);

}

// --- Функция обновления светодиодов ---

void UpdateLeds() {

// Проходим по всем 4 светодиодам

for (int i = 0; i < numLeds; i++) {

// Индекс светодиода (i) соответствует номеру светодиода (0, 1, 2, 3)

// Если текущий счетчик (clickCount) больше или равен номеру светодиода + 1,

// то этот светодиод должен быть включен.

if (clickCount > i) {

digitalWrite(ledPins[i], HIGH); // Включить

} else {

digitalWrite(ledPins[i], LOW);  // Выключить

}

}

}