const int LED_PIN = 9;
const int BUTTON_PIN = 2; // Пин, к которому подключена кнопка
bool ledState = false; // Текущее состояние светодиода (включен/выключен)
bool lastButtonState = HIGH; // Предыдущее состояние кнопки
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Подтягивающий резистор включен
Serial.begin(9600);
// При старте выводим меню в Монитор порта
Serial.println("Управление LED. Введите: ON, OFF или PWM (0-255), либо нажмите кнопку.");
}
void loop() {
// --- ОБРАБОТКА НАЖАТИЯ КНОПКИ ---
bool currentButtonState = digitalRead(BUTTON_PIN);
// Проверяем факт клика (кнопка была отжата HIGH, а стала нажата LOW)
if (lastButtonState == HIGH && currentButtonState == LOW) {
ledState = !ledState; // Инвертируем состояние светодиода
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
if (ledState) {
Serial.println("OK: LED turned ON by button.");
} else {
Serial.println("OK: LED turned OFF by button.");
}
delay(50); // Небольшая задержка от дребезга контактов (дебаунс)
}
lastButtonState = currentButtonState;
// --- ОБРАБОТКА КОМАНД ИЗ SERIAL ---
if (Serial.available() > 0) {
String inputCommand = Serial.readStringUntil('\n');
inputCommand.trim();
String upperCmd = inputCommand;
upperCmd.toUpperCase();
if (upperCmd == "ON") {
ledState = true;
digitalWrite(LED_PIN, HIGH);
Serial.println("OK: LED is ON.");
}
else if (upperCmd == "OFF") {
ledState = false;
digitalWrite(LED_PIN, LOW);
Serial.println("OK: LED is OFF.");
}
else if (upperCmd.startsWith("PWM ")) {
int val = inputCommand.substring(4).toInt();
if (val >= 0 && val <= 255) {
analogWrite(LED_PIN, val);
ledState = (val > 0);
Serial.print("OK: PWM value set to ");
Serial.println(val);
} else {
Serial.println("ERROR: PWM value must be 0-255.");
}
}
else {
Serial.println("ERROR: Unknown command.");
}
}
}