const int buttonPin = 2; // Пин, к которому подключена кнопка (должен быть пин прерывания: 2 или 3)
const int ledPin = 13; // Пин светодиода (встроенный светодиод на большинстве плат)
volatile boolean buttonPressed = false; // Флаг, устанавливаемый в ISR
// Функция-обработчик прерывания
void handleButtonPress() {
buttonPressed = true; // Устанавливаем флаг, что кнопка была нажата
}
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Используем внутренний подтягивающий резистор
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Serial.println("Нажмите кнопку!");
// Прикрепляем прерывание:
// FALLING - срабатывает при переходе от HIGH к LOW (кнопка нажата, если pullup)
attachInterrupt(digitalPinToInterrupt(buttonPin), handleButtonPress, FALLING);
}
void loop() {
if (buttonPressed) { // Проверяем флаг
Serial.println("Кнопка нажата! Мигаю светодиодом...");
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
buttonPressed = false; // Сбрасываем флаг, чтобы не срабатывало много раз подряд
}
// Здесь может быть другой код, который выполняется постоянно
//, не мешая прерыванию
// Serial.println("Основной цикл работает...");
// delay(100);
}