Dnes si povíme o připojení tlačítek k Arduinu. Existují 3 typy připojení tlačítek.
Plán.
• Rychlý úvod do připojení tlačítek.
• Blikáme LED diodami pomocí jednoho tlačítka.
• Napišme náčrt plynule se rozsvěcující LED stisknutím tlačítka.
• Pojďme si propojit knihovnu Bounce2 a naučit se s ní pracovat.
• Pojďme napsat náčrt, který bude ovládat různá zařízení pouze jedním tlačítkem.
• Pojďme si prostudovat ovládání tlačítka s dobou stisku jednoho, dvou, tří a tlačítka.
Místo LED diody můžete připojit jakoukoli jinou zátěž.
Například plynule zapínat a vypínat elektromotor, lampu atd.
V tomto tutoriálu bude spousta příkladů, takže buďte připraveni.
Co je tedy tlačítko?
Tlačítko – nejjednodušší elektromechanické zařízení, které uzavírá a otevírá elektrický obvod.
Existují dva typy tlačítek.
Tlačítka – spínače, s pevnou polohou.

a ne v pevné poloze. Jmenují se – taktová tlačítka.

Po propuštění se vrátí do původní polohy.
Kontakty jsou umístěny na obou stranách.
O tom si dnes povíme.
Při naší práci se neustále setkáváme s tlačítky.
Typické tlačítko hodin používané v zařízeních Arduino vypadá takto.
Existuje mnoho různých způsobů připojení tlačítek.
Pokud je tlačítko bez přídavného odporu, pak se v okamžiku, kdy není stisknuto, ukáže, že jeden kontakt visí ve vzduchu a působí na něj různé vnější faktory. Například elektrické rušení. I pouhé zatřesení drátu může změnit stav tlačítka.
Proto používají tzv. rovnátka.
Horní (vytáhnout) Jeden pin tlačítka je připojen k mínusu a druhý přes odpor 10 kOhm je připojen ke plusu napájecího zdroje.
Dolní (strhnout) Jeden pin tlačítka je připojen k napájecímu zdroji plus. a druhý je připojen k zemi přes odpor 10 kOhm.



K dispozici je také vnitřní výtah – Vnitřní PULL-UP pull-up rezistor 20 kOhm.
To je to, co použijeme, čímž zjednodušíme obvod a snížíme počet použitých dílů.
Pravda, po stisknutí tlačítka budeme mít signál LOW nebo 0 a po stisknutí bude VYSOKÝ nebo 1. Jako by to bylo naopak.
V mých příkladech použijeme vnitřní utažení.
Za prvé, je to správné – vývojáři na to nepřišli zbytečně a za druhé není třeba připojovat další odpor, čímž se šetří místo na desce.
Hlavním problémem tlačítek je odskakování kontaktu, a čím starší tlačítko, tím horší kontakt.
Mechanické kontakty v tlačítkách se nikdy nezavírají ani neotevírají okamžitě.
Během několika milisekund se kontakty několikrát sepnou a otevřou – výsledkem je, že do mikrokontroléru není odeslán jeden signál, ale série impulsů. Nejjednodušší způsob, jak se toho zbavit, je použít zpoždění několika milisekund, například pomocí delay().
Můžete také použít kondenzátor paralelně s kontakty tlačítka.
Chcete-li zjistit, zda bylo stisknuto tlačítko, stačí zaznamenat skutečnost, že bylo stisknuto, a uložit atribut do speciální proměnné.
Podívejme se na nejjednodušší příklad.
Rozsvítíme LED při stisku tlačítka a zhasneme při stisku.
Nejprve definujeme konstanty pro uložení čísel Arduino pinů, ke kterým připojíme tlačítko a LED.
Naše tlačítko bude připojeno ke kolíku 2 a LED ke kolíku 3.
Označujeme, že pin, ke kterému je LED připojena, by měl fungovat jako výstup a tlačítko by mělo fungovat v interním režimu Vnitřní PULL-UP.
Načteme hodnotu tlačítka s funkcí digitalRead().
Vzhledem k tomu, že naše tlačítko je spojeno se zemí, po stisknutí se dostaneme nula a potřebujeme jednotka. Hodnotu tedy převrátíme, tedy otočíme.
Pokud to bylo 0, bude to 1 a naopak.
A uděláme krátké zpoždění, abychom eliminovali klábosení.
Druhý příklad. LED plynule rozsvítíme stiskem tlačítka.
Všechny tyto příklady mají 1 nevýhodu.
Všichni používají funkci zpoždění(). Jednoduše zpomalí Arduino a nedovolí mu pokračovat v provádění programu až do doby uvedené v zpoždění()
Chcete-li se toho zbavit, musíte použít funkci millis ()
Jedná se o funkci, která vrací počet milisekund od spuštění programu na desce Arduino.
Pojďme napsat kód, který bude plynule svítit LED.
K tomu potřebujeme výstup na mikrokontroléru Arduino, který podporuje PWM (PWM).
Také jsem o tom měl lekce.
Vytvořte globální proměnnou i.
Vše ostatní necháme beze změny oproti předchozímu příkladu.
Načteme hodnotu z tlačítka a pokud je stisknuto, začneme proměnnou zvyšovat i za jednotku.
A tak dále, dokud se nerovná 255, a pak hodnotu resetujeme na 0.
Toto je maximální hodnota.
0 znamená, že LED je zcela vypnutá a 255 je nejjasnější světlo.
Tento příklad lze použít pro otáčení motoru nebo pro noční světlo.
Nyní přidáme pár řádků, které resetují proměnnou i po uvolnění tlačítka na nulu; pokud tlačítko stisknete znovu, cyklus začne znovu.
V elektronice se velmi často používají tlačítka. Práce s nimi není na první pohled plná překvapení, ale i zde existují úskalí.
Přestože má tlačítko čtyři nohy, lze jej ve skutečnosti považovat za dvě části okruhu, které se uzavírají nahoře. Ujistěte se, že zapojení je správné, takže obvod je správný.
Pojďme připojit tlačítko bez použití ovladače, procházejícího proudem z 5V. Když stisknete tlačítko, obvod se uzavře a LED se rozsvítí. Nic neočekávaného.
Ve skutečnosti musíme číst signál z tlačítka a reagovat na něj. Proto zkusme změnit schéma. Propojíme jeden pin tlačítka na napájení a pin 3 na desce. Z pinu 3 načteme informaci: logickou nulu nebo logickou jedničku. Po stisknutí tlačítka se obvod uzavře, pin 3 bude mít logickou jedničku a rozsvítíme LED.
Kód funguje dobře, když se klikne na tlačítko. A když uvolníme tlačítko a vytvoříme přerušení obvodu, nastává problém. Pin 12 se uvolní a v režimu visí v neurčitém stavu VSTUP (vzpomeňte si na lekci o digitálních výstupech). V důsledku toho získáme náhodné hodnoty a LED se rozsvítí a zhasne kvůli rušení.
Chcete-li se tomuto problému vyhnout, můžete přidat odpor 10 až 100 kOhm a stisknout tlačítko k uzemnění. V tomto případě bude okruh uzavřen i po uvolnění tlačítka. V tomto případě se odpor nazývá pull down. Toto je pracovní schéma, které lze použít v učebních osnovách.
I přes pracovní obvod se stahovacím rezistorem se při práci se složitým projektem dostáváme do problému. Faktem je, že je možné, že mnoho zařízení v obvodu používá různé hodnoty výkonu. A pak budete muset každé tlačítko zařízení napájet vlastním samostatným pull-down rezistorem. V praxi je zvykem nepřipojovat se k napájení, ale k zemi, která je vždy stejná a rovná se 0. V tomto případě by měl být samotný rezistor připojen ke zdroji – vytažen nahoru. Rezistor je v tomto případě pull up. Vyvstává však další problém – chování LED se změnilo opačně – po stisknutí LED zhasne, po uvolnění se rozsvítí. Problém lze vyřešit jednoduše změnou jednoho řádku kódu.
Jednoduše změníme hodnotu proměnné na opačnou. Toto je standardní přístup při práci s tlačítkem. Nyní pro vás bude snazší pochopit příklady z Arduino IDE.
Za zmínku stojí, že piny desky Arduino již mají vestavěné pull-up odpory (kromě pinu 13) a externí rezistor můžeme odstranit. Ale pak musíte také výslovně uvést použití tohoto odporu pomocí kódu s parametrem INPUT_PULLUP.
01.Základy: DigitalReadSerial
Pojďme si prostudovat příklad DigitalReadSerial z Soubor | Příklady | 01.Základy.
Naučili jsme se správně zapojit tlačítko a můžeme si prostudovat vestavěné příklady. Načteme signál přicházející z digitálního výstupu po stisku tlačítka.
Hrubě sestavený diagram může vypadat takto:
Stručně popíšu toto schéma slovy. Do středu prkénka vložíme knoflík tak, aby drážka na prkénko probíhala mezi spárovanými nohami. Dále připojte napájecí zdroj pomocí propojek 5V a zemi GND na Arduinu s kolejnicemi na prkénku. Poté připojíme digitální pin číslo 2 na Arduinu pomocí propojky k jedné noze tlačítka na prkénku. Připojíme stejnou nohu tlačítka, ale na druhé straně s rezistorem, který hraje roli stahovací odpor. Poté připojíme samotný odpor k zemi. Třetí nohu tlačítka připojíme ke kladné kolejnici na prkénku. Zbývá pouze spojit boční kolejnice na prkénku a jsme připraveni studovat nový příklad.
Tlačítko plní velmi důležitou funkci – při stisku uzavírá okruh. Při nestisknutém tlačítku neprochází proud mezi nožičkami tlačítka a nemůžeme zachytit signál z digitálního pinu číslo 2. Stav pinu je tedy systémem určen jako LOW nebo 0. Když je tlačítko stisknuto, jeho dvě nohy jsou spojeny, což umožňuje proudění proudu z napájecího zdroje na digitální pin 2 a systém čte procházející signál jako VYSOKÝ nebo 1.
Pojďme si kód rozebrat kousek po kousku
Ve funkci založit() navážeme komunikaci s portem pro čtení dat rychlostí 9600 bps z Arduina do vašeho počítače: Serial.begin(9600).
Druhý řádek je nám již známý, ale parametr je nyní použit zde VSTUP – nastavíme druhý digitální pin pro čtení dat přicházejících z tlačítka: pinMode(tlačítko, INPUT);
Ve smyčce čteme příchozí informace. Nejprve potřebujeme novou proměnnou buttonState, který bude obsahovat hodnoty 0 nebo 1 pocházející z funkce digitalRead().
Abychom mohli vidět příchozí informace, musíme pomocí příkazu zobrazit získané výsledky v okně Serial Monitor println().
Pro větší stabilitu při čtení dat nastavíme minimální zpoždění.
Pokud nyní spustíte program a také otevřete okno Sériový monitor (Jídelní lístek Nástroje | Sériový monitor), pak na obrazovce uvidíte nekonečné nuly. Program neustále zjišťuje stav naší struktury a zobrazuje výsledek – žádný proud. Pokud tlačítko stisknete a podržíte, uvidíte, že se čísla změní z 0 na 1. To znamená, že se v našem obvodu objevil proud a informace se změnily.
02.Digital: Tlačítko
V příkladu je probrána i práce s tlačítkem Soubor | Příklady | 02.Digitální | Knoflík. Tlačítko je připojeno ke kolíku 2 a LED ke kolíku 13. Tlačítko by také mělo být připojeno k napájení a zemi přes odpor 10K. Samotný princip fungování zůstává nezměněn. Pouze tentokrát nebudeme na obrazovce zobrazovat informace o stavu tlačítka, ale rozsvítíme LED. Tato možnost je více vizuální. Po stisknutí a uvolnění tlačítka by se měla vestavěná LED rozsvítit nebo zhasnout.
Řekněme, že chceme změnit chování – pokud není tlačítko stisknuto, LED dioda svítí a po stisknutí LED dioda nesvítí. Stačí změnit jeden řádek kódu.
A teď ta hádanka! Nahráli jste na tabuli první verzi náčrtu a najednou se vám zhroutil počítač. Nemůžete upravit skicu pro použití druhé možnosti. Jak se z této situace můžete dostat?
Musíte změnit polaritu obvodu! Vodič z rezistoru, který jde k zemi, musí být zapojen do 5V a vodič, který šel z 5V do tlačítka, musí být připojen k zemi. Po zapnutí poteče proud z napájecího zdroje na pin 2 bez jakéhokoli rušení a hodnota bude získána VYSOKÝ. Když stisknete tlačítko, vytvoří se další obvod a pin 2 zůstane bez napájení.
02.Digital: StateChangeDetection
V příkladu Soubor | Příklady | 02.Digitální | StateChangeDetection K dispozici je počet kliknutí na tlačítko a stav tlačítka (zapnuto nebo vypnuto). Schéma zůstává stejné. Tlačítko je připojeno na kolík 2 a LED na kolík 13 (můžete použít vestavěný). Tlačítko by mělo být také připojeno k napájení a 10K stahovací odpor k zemi.
02.Digital: Debounce
Tlačítka mají efekt zvaný „blikání“. Při zavírání a otevírání mezi destičkami tlačítka se objevují mikrojiskry, které během několika milisekund vyvolají až tucet sepnutí. Tento jev se nazývá bounce. To je třeba vzít v úvahu, pokud je nutné zaznamenat „kliknutí“. Primárnímu svědectví proto nelze věřit. Z tohoto důvodu často dochází k mírnému zpoždění náčrtů a teprve poté se odečítají hodnoty. V normálním stavu, kdy tlačítko nestiskneme nebo tlačítko držíme stisknuté, nedochází k poskakování. Někdy se pro tyto účely ve výukových příkladech používá funkce zpoždění(), ale v praxi byste měli funkci používat millis (), jako v příkladu Soubor | Příklady | 02.Digitální | Odskok. Schéma zapojení zůstává nezměněno.
02.Digital: DigitalInputPullup (vestavěný pull-up rezistor)
Digitální piny již mají 20 kOhm rezistory, které lze použít jako pull-up při práci s tlačítky. Podívejme se na příklad Soubor | Příklady | 02.Digitální | DigitalInputPullup.
Schéma zapojení – připojte první kolík tlačítka ke kolíku 2 na desce a druhý kolík tlačítka ke kolíku GND. Zatímco skica běží, budeme číst hodnoty druhého pinu.
Pokud spustíme skicu, uvidíme, že na monitoru se zobrazí čísla 1 (VYSOKÝ). Když stisknete tlačítko, hodnoty se změní na 0 (LOW).
















