ESP8266 Witty Cloud – przycisk i sterowanie diodą LED

Diodą LED lub innym urządzeniem podłączonym do mikrokontrolera można sterować za pomocą naciśnięcia przycisku podłączonego do tego mikrokontrolera i odpowiedniego programu. Odpowiednie przykłady wygenerował ChatGPT w trakcie tej rozmowy. Niewielkie poprawki dostosowały kody do modułu ESP8266 Witty Cloud WiFi.

Przykład 1.

Mikrokontroler sprawdza w pętli stan przycisku i reagując na jego zmianę (HIGH/LOW) przełącza diodę.

// Definicje pinów
const int ledPin = 15;   // Pin, do którego podłączona jest dioda LED
const int buttonPin = 4; // Pin, do którego podłączony jest przycisk

// Zmienna przechowująca stan przycisku
bool buttonState = false;
bool lastButtonState = false;

// Zmienna przechowująca stan diody LED
bool ledState = false;

void setup() {
  // Konfiguracja pinu dla diody LED jako wyjście
  pinMode(ledPin, OUTPUT);
  // Konfiguracja pinu dla przycisku jako wejście
  pinMode(buttonPin, INPUT);

  // Wyłącz diodę LED na początku
  digitalWrite(ledPin, LOW);
}

void loop() {
  // Odczyt aktualnego stanu przycisku
  buttonState = digitalRead(buttonPin);

  // Sprawdzenie, czy przycisk został naciśnięty (zbocze narastające)
  if (buttonState == HIGH && lastButtonState == LOW) {
    // Zmieniamy stan diody LED (włączamy/wyłączamy)
    ledState = !ledState;
    digitalWrite(ledPin, ledState ? HIGH : LOW);
    delay(50); // Opóźnienie na debounce
  }

  // Zapisujemy aktualny stan przycisku
  lastButtonState = buttonState;

  // Krótkie opóźnienie, aby uniknąć zakłóceń
  delay(10);
}

Opis kodu wygenerowany przez ChatGPT.

Przykład 2.

Przerwanie – sygnał z urządzenia peryferyjnego, który powoduje zatrzymanie programu głównego i uruchomienie funkcji obsługującej przerwanie.

W tym przykładzie wykorzystano przerwania. Zmiana stanu przycisku generuje przerwanie, a funkcja obsługująca to przerwanie zmienia stan diody LED.

// Definicje pinów
const int ledPin = 15;     // Pin, do którego podłączona jest dioda LED
const int buttonPin = 4;   // Pin, do którego podłączony jest przycisk

// Zmienna przechowująca stan diody LED
volatile bool ledState = false;

// Funkcja obsługi przerwania
void IRAM_ATTR handleButtonPress() {
  // Zmieniamy stan diody LED (włączamy/wyłączamy)
  ledState = !ledState;
  digitalWrite(ledPin, ledState ? HIGH : LOW);
}

void setup() {
  // Konfiguracja pinu dla diody LED jako wyjście
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW); // Wyłącz diodę LED na początku

  // Konfiguracja pinu dla przycisku jako wejście z wbudowanym rezystorem pull-up
  pinMode(buttonPin, INPUT_PULLUP);

  // Konfiguracja przerwania na zbocze opadające (naciśnięcie przycisku)
  attachInterrupt(digitalPinToInterrupt(buttonPin), handleButtonPress, FALLING);
}

void loop() {
  // Pętla główna jest pusta, gdyż sterowanie odbywa się w funkcji przerwania
}

Opis kodu wygenerowany przez ChatGPT.