Amikor az Arduino projektekkel, amelyek fizikai gombokkal vagy kapcsolókkal foglalkoznak, az egyik közös kihívás fejlesztője a Switch Pouncing kezelésével foglalkozik. A kapcsoló pattogó több nem szándékos triggerhez vezethet, ami szokatlan viselkedést okozhat a projektekben. Ebben a blogbejegyzésben belemerülünk arra, hogy mi a pattogó, miért problematikus, és felfedezzük a kapcsolók elszámolásának hatékony módszereit, biztosítva a megbízható és pontos bemeneti leolvasásokat az Arduino alkalmazásokban.
A kapcsoló visszapattanásának megértése
A mechanikus kapcsolókat, például a nyomógombokat széles körben használják az Arduino projektekben a felhasználói bemenetekhez. Ezek a kapcsolók azonban nem mindig készítik és törik a kapcsolatot, amikor megnyomják vagy elengedik. Ehelyett hajlamosak "ugrálni", a csatlakozás gyorsan elkészítésére és megszakítására, mielőtt letelepedtek. Ezt a jelenséget Switch pattogónak nevezik.
Amikor egy kapcsoló visszapattan, az Arduino több gyors sajtó vagy felszabadulásként értelmezheti azt, ami nem kívánt viselkedéshez vezet, mint például több LED -es villanás, szokatlan motoros mozgások vagy érzékelők szokatlan leolvasása. A debouning a gyors, nem szándékos jelek kiszűrésének folyamata annak biztosítása érdekében, hogy minden fizikai művelet megfeleljen egyetlen, tiszta bemeneti jelnek.
A kapcsolók elszámolásának módszerei
Két elsődleges módszer létezik a kapcsolók elszámolására: a hardver -debouning és a szoftverek debouningja. Minden módszernek megvannak az előnyei és a felhasználási esetek, és néha még az optimális eredmények elérése érdekében is kombinálják őket.
1.
A hardver kioldása magában foglalja a fizikai összetevők használatát a kapcsoló jel stabilizálására. A leggyakoribb hardveres megközelítések ellenállókat, kondenzátorokat vagy speciális elszámolási IC -ket használnak.
RC (ellenállás-kondenzátor)
Az RC áramkör ki tudja simítani a kapcsoló visszapattanása által okozott gyors átmeneteket. Így állíthatja be:
/* 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);
}
}
Ebben a beállításban az ellenállás és a kondenzátor sorozatban van csatlakoztatva a gombbal. A gomb megnyomásakor a kondenzátor tölti a feszültséget és megakadályozva a gyors ingadozásokat, amelyek hamis kiváltókat okozhatnak.
2.
A szoftver -debouncing -t az Arduino -kódban kezeli azáltal, hogy olyan logikát hajt végre, amely kiszűri a Switch Pouncing által okozott gyors változásokat. Ez a módszer rugalmas, és nem igényel további hardver összetevőket.
Példa a szoftverek kioldására
Íme egy egyszerű példa arra, hogyan lehet végrehajtani az Arduino -ban a szoftver -leírást:
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;
}
Ebben a kódban:
- A program elolvassa a gomb aktuális állapotát.
- Ha az állam megváltozott az utolsó olvasathoz képest, akkor visszaállítja a debound időzítőt.
- Csak akkor, ha az állam hosszabb ideig marad konzisztens, mint a debound késleltetés (ebben az esetben 50 milliszekundum) elfogadja az új államot érvényesnek, és hatnak rajta.
3. Könyvtárak használata a kifogásoláshoz
A bonyolultabb projektekhez vagy a debouning egyszerűsítéséhez használhat dedikált könyvtárakat, mint például a Ugrál könyvtár. A könyvtárak kezelik a debound logikát, lehetővé téve a projekt más aspektusaira összpontosítást.
Példa a Bounce Library használatával
Először telepítse a Bounce könyvtárat az Arduino Könyvtárkezelőn keresztül. Ezután használja a következő kódot:
#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
}
}
Ez a megközelítés leegyszerűsíti a debound logikát, így a kód tisztább és karbantarthatóbbá válik.
A megfelelő leírási módszer kiválasztása
A hardver és a szoftver -debouning közötti választás az Ön egyedi igényeitől és korlátaitól függ:
- HARDVER KEZELÉS: Ideális olyan projektekhez, ahol minimalizálni szeretné a szoftvert, vagy ha több kapcsolóval dolgozik. Ez biztosítja, hogy a jelek tisztaak legyenek, mielőtt elérik a mikrovezérlőt.
- Szoftver -debouning: Rugalmasabb és költséghatékonyabb, különösen az egyszerű projektek esetében, amelyek néhány gombbal vannak. Ez lehetővé teszi, hogy a debound időzítését a kódon keresztül könnyen beállítsa.
- Könyvtár-alapú elszámolás: A legjobb a komplex projektekhez, vagy ha időt takaríthat meg, és kerülje a kerék feltalálását. A könyvtárak robusztus és tesztelt elszámolási megoldásokat kínálnak.
A kapcsolók kifogásának legjobb gyakorlatai
- Használjon húzó- vagy legördülő ellenállást: Győződjön meg arról, hogy a gomb bemenetei ismert állapotban vannak-e a pull-up vagy a legördülő ellenállások használatával. Ez megakadályozza a lebegő bemeneteket, a zajcsökkentő zajt és a hamis kiváltókat.
- Konzisztens elszámolási időzítés: Akár hardver, akár szoftver -leírást használ, tartson fenn következetes elszámolási intervallumokat, hogy biztosítsa a megbízható teljesítményt a különböző gombok és feltételek között.
- Ha szükséges, kombináljon módszereket: A nagyon érzékeny alkalmazások esetén fontolja meg a hardver és a szoftver kioldásának kombinálását a legnagyobb megbízhatóság elérése érdekében.
Következtetés
A debouncing kapcsolók döntő lépés a megbízható Arduino projektek kidolgozásában, amelyek magukban foglalják a felhasználói bemeneteket. Függetlenül attól, hogy hardvermegoldásokat, szoftver algoritmusokat választ, vagy kihasználja a meglévő könyvtárakat, a hatékony decound mechanizmusok bevezetése megmenti Önt a hamis kiváltókkal és a szokatlan viselkedéssel való kapcsolattartás frusztrációjától. Ha megérti a kapcsoló visszapattanásának elveit és a megfelelő leírási technikák alkalmazását, javíthatja az Arduino alkotásainak teljesítményét és megbízhatóságát.