Podczas pracy z projektami Arduino, które obejmują fizyczne przyciski lub przełączniki, jednym z powszechnych wyzwań, przed którymi stoi programiści, jest podskakiwanie. Odbijanie przełączników może prowadzić do wielu niezamierzonych czynników wyzwalających, powodując nieregularne zachowanie w twoich projektach. W tym poście na blogu zagłębimy się w odrzucanie przełączników, dlaczego jest to problematyczne, i badamy skuteczne metody przełączników, zapewniając niezawodne i dokładne odczyty wejściowe w aplikacjach Arduino.
Zrozumienie podskakującego przełącznika
Przełączniki mechaniczne, takie jak przyciski, są szeroko stosowane w projektach Arduino do wejść użytkowników. Jednak te przełączniki nie zawsze wytwarzają i przełamują kontakt po naciśnięciu lub zwolnieniu. Zamiast tego mają tendencję do „podskakiwania”, szybko wykonując i łamiąc połączenie kilka razy przed osiedleniem się. Zjawisko to znane jest jako podskakiwanie przełączników.
Gdy przełącznik odbija się, Arduino może interpretować go jako wiele szybkich pras lub uwolnień, co prowadzi do niezamierzonych zachowań, takich jak wiele błysków LED, nieregularne ruchy motoryczne lub nieregularne odczyty z czujników. Debunowanie to proces filtrowania tych szybkich, niezamierzonych sygnałów, aby zapewnić, że każde działanie fizyczne odpowiada pojedynczemu, czystemu sygnałowi wejściowe.
Metody przełączników do debukowania
Istnieją dwie podstawowe metody przełączników debukowania: debunowanie sprzętowe i debunowanie oprogramowania. Każda metoda ma swoje zalety i przypadki użycia, a czasem są one nawet łączone dla optymalnych wyników.
1. Debuinacja sprzętu
Debunowanie sprzętowe polega na użyciu fizycznych komponentów do stabilizacji sygnału przełącznika. Najczęstsze podejścia sprzętowe wykorzystują rezystory, kondensatory lub wyspecjalizowane ICS.
RC (rezystor-kapacitor) debunowanie
Obwód RC może wygładzić szybkie przejścia spowodowane podskakowaniem przełączania. Oto jak możesz to skonfigurować:
/* RC Debounce Circuit */
const int buttonPin = 2; // Button connected to digital pin 2
const int ledPin = 13; // LED connected to digital pin 13
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
W tej konfiguracji rezystor i kondensator są połączone szeregowo z przyciskiem. Po naciśnięciu przycisku kondensator ładuje się, wygładzając napięcie i zapobiegając szybkim wahaniom, które mogą powodować fałszywe wyzwalacze.
2. Debuinacja oprogramowania
Debunowanie oprogramowania jest obsługiwane w twoim kodzie Arduino poprzez wdrożenie logiki, która filtruje szybkie zmiany sygnału spowodowane podskakowaniem przełączania. Ta metoda jest elastyczna i nie wymaga dodatkowych komponentów sprzętowych.
Przykład debunowania oprogramowania
Oto prosty przykład wdrożenia oprogramowania do debuzy w Arduino:
const int buttonPin = 2; // Button connected to digital pin 2
const int ledPin = 13; // LED connected to digital pin 13
int buttonState; // Current state of the button
int lastButtonState = LOW; // Previous state of the button
unsigned long lastDebounceTime = 0; // Last time the button state changed
unsigned long debounceDelay = 50; // Debounce time in milliseconds
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
}
void loop() {
int reading = digitalRead(buttonPin);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
digitalWrite(ledPin, !digitalRead(ledPin));
}
}
}
lastButtonState = reading;
}
W tym kodzie:
- Program odczytuje bieżący stan przycisku.
- Jeśli państwo zmieniło się od ostatniego czytania, resetuje licznik czasu debunacji.
- Tylko wtedy, gdy państwo pozostaje spójne na dłużej niż opóźnienie debuna (50 milisekund w tym przypadku), program akceptuje nowy państwo jako ważne i działają w jego sprawie.
3. Korzystanie z bibliotek do debunowania
Aby uzyskać bardziej złożone projekty lub uprościć debun, możesz użyć dedykowanych bibliotek, takich jak Odbić się biblioteka. Biblioteki zajmują się logiką debuunkową, umożliwiając skupienie się na innych aspektach projektu.
Przykład za pomocą biblioteki odbicia
Najpierw zainstaluj bibliotekę odbicia za pośrednictwem Arduino Library Manager. Następnie użyj następującego kodu:
#include
const int buttonPin = 2;
const int ledPin = 13;
Bounce debouncer = Bounce();
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
debouncer.attach(buttonPin);
debouncer.interval(25); // Debounce interval in milliseconds
}
void loop() {
debouncer.update();
if (debouncer.fell()) { // When button is pressed
digitalWrite(ledPin, !digitalRead(ledPin)); // Toggle LED
}
}
Takie podejście upraszcza logikę debukowania, dzięki czemu Twój kod czyszczenie i łatwiejszy do utrzymania.
Wybór odpowiedniej metody debunowania
Wybór między sprzętem a debunowaniem oprogramowania zależy od twoich konkretnych potrzeb i ograniczeń:
- Debunowanie sprzętowe: Idealny do projektów, w których chcesz zminimalizować koszty ogólne lub podczas pracy z wieloma przełącznikami. Zapewnia, że sygnały są czyste, zanim dotrą do mikrokontrolera.
- Debunowanie oprogramowania: Bardziej elastyczne i opłacalne, szczególnie w przypadku prostych projektów z kilkoma przyciskami. Umożliwia łatwe dostosowanie czasu debuncia za pomocą kodu.
- Debunowanie oparte na bibliotece: Najlepiej na złożone projekty lub gdy chcesz zaoszczędzić czas i uniknąć ponownego na nowo kółku. Biblioteki oferują solidne i przetestowane rozwiązania debukowe.
Najlepsze praktyki dotyczące przełączników debunowania
- Użyj rezystorów podciągania lub rozciągnięcia: Upewnij się, że wejścia przycisków są w znanym stanie, używając rezystorów podciągania lub rozciągnięcia. Zapobiega to pływaniu wejściowym, zmniejszającym hałas i fałszywych wyzwalaczy.
- Konsekwentny czas debuncji: Niezależnie od tego, czy korzystanie z sprzętu lub oprogramowania, zachowaj spójne odstępy od debucji, aby zapewnić niezawodną wydajność w różnych przyciskach i warunkach.
- W razie potrzeby łączą metody: W przypadku wysoce wrażliwych aplikacji rozważ połączenie zarówno sprzętu, jak i oprogramowania, aby osiągnąć najwyższą niezawodność.
Wniosek
Przełączniki debologiczne jest kluczowym krokiem w opracowywaniu wiarygodnych projektów Arduino, które obejmują dane wejściowe użytkowników. Niezależnie od tego, czy wybierzesz rozwiązania sprzętowe, algorytmy oprogramowania, czy wykorzystujesz istniejące biblioteki, wdrażanie skutecznych mechanizmów obalenia pozwoli ci uratować frustrację z radzeniem sobie z fałszywymi wyzwalaczami i nieoblicznymi zachowaniami. Rozumiejąc zasady podskakiwania przełączania i stosując odpowiednie techniki debunowania, możesz zwiększyć wydajność i niezawodność twoich dzieł Arduino.