jak w arduino zrobić przycisk po którego przyciśnięciu przez 2 sekundy gaśnie dioda
Aby w Arduino stworzyć funkcję, w której przycisk po przytrzymaniu przez 2 sekundy wyłącza diodę, należy wykorzystać funkcję millis()
do pomiaru czasu oraz odpowiednio skonfigurować piny przycisku i diody. Poniżej przedstawiam szczegółowy kod i wyjaśnienia.
const int buttonPin = 2; // Pin, do którego podłączony jest przycisk
const int ledPin = 13; // Pin, do którego podłączona jest dioda LED
int buttonState = HIGH; // Aktualny stan przycisku
int lastButtonState = HIGH; // Poprzedni stan przycisku
unsigned long pressStartTime = 0; // Czas rozpoczęcia wciśnięcia przycisku
const int holdDuration = 2000; // Czas przytrzymania przycisku w milisekundach (2 sekundy)
bool ledState = true; // Początkowy stan diody (włączona)
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Konfiguracja pinu przycisku z wewnętrznym rezystorem podciągającym
pinMode(ledPin, OUTPUT); // Konfiguracja pinu diody jako wyjście
digitalWrite(ledPin, HIGH); // Włącz diodę na początku
}
void loop() {
buttonState = digitalRead(buttonPin); // Odczytaj stan przycisku
if (buttonState == LOW && lastButtonState == HIGH) {
// Przycisk został wciśnięty
pressStartTime = millis(); // Zapisz czas rozpoczęcia wciśnięcia
} else if (buttonState == HIGH && lastButtonState == LOW) {
// Przycisk został zwolniony
if (millis() - pressStartTime >= holdDuration) {
// Jeśli przycisk był wciśnięty przez co najmniej 2 sekundy
ledState = false; // Wyłącz diodę
digitalWrite(ledPin, LOW);
}
}
lastButtonState = buttonState; // Zaktualizuj poprzedni stan przycisku
}
Konfiguracja pinów:
buttonPin
(pin 2) jest skonfigurowany jako wejście z włączonym wewnętrznym rezystorem podciągającym (INPUT_PULLUP
), co eliminuje potrzebę stosowania zewnętrznego rezystora.ledPin
(pin 13) jest skonfigurowany jako wyjście, a dioda LED jest początkowo włączona.Logika działania:
LOW
), zapisujemy czas rozpoczęcia wciśnięcia za pomocą funkcji millis()
.HIGH
), sprawdzamy, czy czas wciśnięcia przekroczył 2 sekundy (2000 ms). Jeśli tak, wyłączamy diodę LED.Zmienne:
pressStartTime
przechowuje czas rozpoczęcia wciśnięcia przycisku.ledState
przechowuje aktualny stan diody (włączona/wyłączona).Obsługa drgań styków:
millis()
jest preferowana w takich aplikacjach, ponieważ nie blokuje działania programu, w przeciwieństwie do funkcji delay()
.Schemat połączeń:
Dostosowanie czasu:
holdDuration
(np. na 3000 dla 3 sekund).loop()
.debounce
).interrupts
) do obsługi przycisków w celu zwiększenia responsywności.Przedstawiony kod umożliwia wyłączenie diody LED po przytrzymaniu przycisku przez 2 sekundy. Wykorzystuje funkcję millis()
do pomiaru czasu, co pozwala na płynne działanie programu. Układ jest prosty w implementacji i można go łatwo rozszerzyć o dodatkowe funkcje, takie jak ponowne włączanie diody lub sygnalizacja dźwiękowa.