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.
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.
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.