W dzisiejszym wpisie pokażę, jak za pomocą przycisku sterować wbudowaną diodą LED na płytce Arduino Uno. Każde wciśnięcie przycisku zmienia stan diody – włącza ją lub wyłącza. Dodatkowo wprowadzimy obsługę eliminacji drgań styków (debouncing) oraz wykorzystamy Serial Monitor do wyświetlania stanu diody tylko wtedy, gdy wciśniemy przycisk.
1. Co będzie potrzebne:
- Arduino Uno
- Przycisk (push-button)
- Przewody połączeniowe
2. Jak to działa?
Po wciśnięciu przycisku, stan diody LED zmienia się – jeśli jest wyłączona, to zostanie włączona, a jeśli jest włączona, to wyłączona. Warto zauważyć, że przycisk nie jest idealny i może generować zakłócenia, tzw. drgania styków, które powodują wielokrotne odczytanie wciśnięcia. Dlatego wprowadzimy debouncing, aby program nie reagował na niechciane sygnały.
Dodatkowo chcemy, aby Serial Monitor wyświetlał informacje o stanie diody LED tylko wtedy, gdy przycisk jest wciśnięty, czyli gdy faktycznie coś się zmienia.
3. Schemat podłączenia:
- Przycisk: Jeden pin podłączony do pinu 7 Arduino, drugi do GND (masa).
- Ważne: przycisk z 4 wyprowadzeniami jest wewnętrznie połączony w 2 pary styków. Przycisk typu push-button powinien być normalnie otwarty (NO), co oznacza, że w stanie spoczynku nie będzie zwierał do GND. Jeśli podłączysz przewody do niewłaściwych wyprowadzeń przycisku, Arduino będzie stale widziało stan wciśniętego przycisku, co spowoduje nieprawidłowe działanie programu.
- Dioda LED: Wbudowana w Arduino, podłączona do pinu 13, więc nie musimy jej dodatkowo podłączać.
4. Kod programu:
Oto kod, który wgrany do Arduino, umożliwi sterowanie diodą LED za pomocą przycisku:
5. Wyjaśnienie kodu:
int buttonPin = 7;: Deklaracja zmiennejbuttonPin, która przechowuje numer pinu, do którego podłączony jest przycisk. W tym przypadku to pin 7.
int ledPin = 13;: Deklaracja zmiennejledPin, która przechowuje numer pinu, do którego podłączona jest wbudowana dioda LED. Pin 13 to domyślny pin dla diody LED na płytce Arduino Uno.
int ledState = LOW;: ZmiennaledStateprzechowuje aktualny stan diody LED. Początkowo dioda jest wyłączona, dlatego przypisujemy jej wartośćLOW.
int buttonState;: Zmienna do przechowywania aktualnego stanu przycisku (czy jest wciśnięty, czy nie). Ta zmienna będzie aktualizowana w pętli.
int lastButtonState = HIGH;: Zmienna do przechowywania poprzedniego stanu przycisku. Ustawiona naHIGH, ponieważ przycisk używa rezystora pull-up, co oznacza, że w stanie spoczynku (nie wciśnięty) przycisk ma stan wysoki.
unsigned long lastDebounceTime = 0;: ZmiennalastDebounceTimeprzechowuje czas ostatniej zmiany stanu przycisku. Używana jest do eliminacji drgań styków (debouncing).
unsigned long debounceDelay = 50;: ZmiennadebounceDelayprzechowuje wartość opóźnienia (w milisekundach) do eliminacji drgań styków. W tym przypadku opóźnienie wynosi 50 ms.
Serial.begin(9600);: Rozpoczyna komunikację szeregową z komputerem z prędkością 9600 baud. Umożliwia wysyłanie danych do Serial Monitora w Arduino IDE.
pinMode(buttonPin, INPUT_PULLUP);: Ustawienie pinu przycisku (pin 7) jako wejście z aktywacją wewnętrznego rezystora pull-up. Dzięki temu pin przycisku w stanie spoczynku (nie wciśnięty) ma wartość HIGH, a po wciśnięciu przycisku będzie miał wartość LOW.
pinMode(ledPin, OUTPUT);: Ustawienie pinu diody LED (pin 13) jako wyjście, co oznacza, że będzie on sterować stanem diody (włączona/wyłączona).
digitalWrite(ledPin, ledState);: Ustawienie początkowego stanu diody LED zgodnie z wartościąledState. PoczątkowoledStatema wartośćLOW, co oznacza, że dioda jest wyłączona.
int reading = digitalRead(buttonPin);: Odczytuje aktualny stan przycisku (pin 7). Jeśli przycisk jest wciśnięty, odczytany stan będzie LOW (ponieważ używamy rezystora pull-up), a jeśli przycisk nie jest wciśnięty, odczytany stan będzie HIGH.
if (reading != lastButtonState): Sprawdza, czy stan przycisku się zmienił w stosunku do poprzedniego stanu. Jeśli tak, aktualizuje zmiennąlastDebounceTimena aktualny czas w milisekundach (z funkcjimillis()), aby odliczać czas potrzebny do eliminacji drgań styków.
if ((millis() - lastDebounceTime) > debounceDelay): Sprawdza, czy od momentu ostatniej zmiany stanu przycisku minęło więcej niż 50 ms (wartośćdebounceDelay). Jeśli tak, oznacza to, że drgania styków zostały wyeliminowane i można bezpiecznie odczytać stan przycisku.
if (reading != buttonState): Sprawdza, czy stan przycisku rzeczywiście się zmienił od poprzedniego odczytu. Jeśli tak, aktualizuje zmiennąbuttonStatena nowy odczytany stan.
if (buttonState == LOW): Sprawdza, czy przycisk został wciśnięty (czyli stan jest LOW). Jeśli tak, zmienia stan diody LED na przeciwny (z HIGH na LOW lub odwrotnie). Stan diody LED jest ustawiany za pomocądigitalWrite(ledPin, ledState);.
if (ledState == HIGH): Jeśli dioda LED jest włączona, wyświetla komunikat "Dioda LED włączona" w Serial Monitorze. Jeśli dioda LED jest wyłączona, wyświetla komunikat "Dioda LED wyłączona".
lastButtonState = reading;: Na końcu pętli zapisuje aktualny stan przycisku jakolastButtonState, aby w następnym cyklu porównać go z nowym odczytem.
6. Testowanie:
- Wgraj kod na Arduino.
- Otwórz Serial Monitor i upewnij się, że prędkość komunikacji ustawiona jest na 9600 baud.
- Naciśnij przycisk – dioda LED powinna włączyć się, a w Serial Monitorze pojawi się komunikat „Dioda LED włączona”.
- Ponowne wciśnięcie przycisku spowoduje wyłączenie diody, a w monitorze pojawi się informacja „Dioda LED wyłączona”.


Brak komentarzy:
Prześlij komentarz