Skip to content

Instantly share code, notes, and snippets.

@colesnicov
Created June 9, 2019 10:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save colesnicov/6e1ac3ea58accd9b438013865da8d8c4 to your computer and use it in GitHub Desktop.
Save colesnicov/6e1ac3ea58accd9b438013865da8d8c4 to your computer and use it in GitHub Desktop.
Arduino debounce example
/* 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