Created
June 9, 2019 10:16
-
-
Save colesnicov/6e1ac3ea58accd9b438013865da8d8c4 to your computer and use it in GitHub Desktop.
Arduino debounce example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Debounce Pokaždé, když se vstupní pin změní z LOW na HIGH (například kvůli stlačení tlačítka), výstupní pin je přepnut z LOW na HIGH nebo naopak. Mezi přepnutími je minimální prodleva, která slouží pro ošetření zákmitů (debouncing) obvodu. Obvod: | |
* LED připojena od pinu 13 k zemi * tlačítko připojené od pinu 2 k +5V | |
* 10 kΩ rezistor připojen od pinu 2 k zemi | |
* Poznámka: Na většině Arduin je LED k pinu 13 již připojena, takže k tomuto příkladu už další komponenty nebudete potřebovat. vytvořeno 21. listopadu 2006 autorem David A. Mellis upraveno 30. srpna 2011 Limor Fried upraveno 28. prosince 2012 Mike Walters Příklad tohoto kódu je veřejnou doménou. http://www.arduino.cc/en/Tutorial/Debounce | |
*/ | |
// konstanty použité k nastavení čísel pinů se nezmění: | |
const int buttonPin = 2; // číslo pinu tlačítka | |
const int ledPin = 13; // číslo pinu LED | |
// Proměnné se změní: | |
int ledState = HIGH; | |
// současný stav výstupního pinu | |
int buttonState; | |
//nejnovější hodnota načtená ze vstupního pinu | |
int lastButtonState = LOW; | |
// předchozí hodnota načtení ze vstupního pinu | |
// Následné proměnné jsou typu long, jelikož čas měřený v milisekundách se | |
//rychle změní na větší číslo, jež nemůže být uloženo v | |
int long lastDebounceTime = 0; | |
// čas posledního změny výstupního pinu | |
long debounceDelay = 50; | |
// čas debounce prodlevy; pokud výstup bliká, | |
//je potřeba čas „zvětšit“ | |
void setup() { | |
pinMode(buttonPin, INPUT); | |
pinMode(ledPin, OUTPUT); | |
// nastavte počáteční stav LED | |
digitalWrite(ledPin, ledState); | |
} | |
void loop() { | |
// Stav spínače přiřaďte do místní proměnné: | |
int reading = digitalRead(buttonPin); | |
// Zkontroluje, zda-li jste stlačili tlačítko | |
// (tj. že vstup se z LOW změnil na HIGH), a od posledního zmáčknutí jste čekali | |
// dostatečně dlouho na to, aby byl veškerý šum ignorován: | |
// Pokud se spínač změnil kvůli šumu nebo stlačení: | |
if (reading != lastButtonState) { | |
// upravte proměnou lastDebounceTime | |
lastDebounceTime = millis(); | |
} | |
if ((millis() - lastDebounceTime) > debounceDelay) { // Ať už je načtená hodnota jakákoliv, byla tam déle než debounce prodleva, | |
// berme ji tedy jako aktuální stav: | |
// Pokud se stav tlačítka změnil: | |
if (reading != buttonState) { | |
buttonState = reading; | |
// LED přepněte pouze když je nový stav tlačítka označen jako HIGH | |
if (buttonState == HIGH) { | |
ledState = !ledState; | |
} | |
} | |
} | |
// nastavte LED: | |
digitalWrite(ledPin, ledState); | |
// načtené hodnoty uložte. V příští smyčce bude označeno jako lastButtonState: | |
lastButtonState = reading; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment