Загрузка данных


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.");
    }
  }
}