Close

Arduino základy – 4. Digital Read Serial

Na tomto příkladu si ukážeme, jak lze pomocí navázání sériové komunikace mezi Arduinem a vaším počítačem přes USB sledovat stav spínače.

Potřebný hardware

  • Arduino deska
  • mikrospínač, tlačítko nebo přepínač
  • Rezistor s odporem 10k Ω
  • nepájivé kontaktní pole
  • Propojovací vodiče

Obvod

Arduino a tlačítko
Arduino a tlačítko

Na začátek vše zapojíme. Budeme potřebovat tři vodiče. První dvojici, červený a černý, připojte do dvou vertikálních řad po straně nepájivého pole, čímž si zpřístupníte GND a +5V napájení. Třetí vodič na jednom konci zapojte do digitálního pinu 2, druhý konec patří do jednoho z pinů tlačítka. Stejný pin tlačítka bude propojen přes pull-down rezistor (10k ohmů) ke GND. Zbývající pin je připojen k +5V.

Existují dva typy spínačů. První typ při zmáčknutí obvod rozpojí, druhý typ ho spojí. V tomto příkladu (a snad i ve všech ostatních) budeme pracovat se spínačem, který je v nezmáčknutém stavu rozpojen. Když se podíváte na obrázek, tak u tohoto typu tlačítka jsou vždy spojeny piny tlačítka, které jsou nad sebou. Pokud je naše tlačítko nestlačené, mezi +5V a zbytkem obvodu neteče žádný proud. Digitální pin 2 je však přes 10k ohm rezistor připojen ke GND. V tomto stavu vrátí funkce digitalRead(2); hodnotu LOW (nebo také 0). KDyž tlačítko stiskneme, propojí se obvod mezi +5V a pinem 2. Na GND teď skoro žádný proud neteče, protože se chová stejně jako voda – hledá si cestu nejmenšího odporu. V tomto případě bychom na pinu 2 přečetli hodnotu HIGH.

Pokud odpojíte digitální I/O pin od všech komponentů a čtete na něm digitální hodnotu, může se stát, že bude výstup vracet náhodně LOW nebo HIGH. Může za to citlivost tohoto vstupu, který při měření detekuje i magnetický šum v jeho okolí. Této vlastnosti se občas využívá při generování náhodných hodnot, ale v našem případě je nežádoucí. Kvůli tomu zde máme pull-down rezistor, který zajistí „uzemnění“ digitálního vstupu.

Schéma

button_sch
Schéma zapojení tlačítka

Kód

Na začátku programu ve funkci setup() zahájíme sériovou komunikaci mezi Arduinem a PC na 9600 bitech dat za sekundu.

Serial.begin(9600);

Dalším krokem bude inicializace digitálního pinu 2 jako vstupu. Tento pin bude číst výstup z vašeho tlačítka:

pinMode(2, INPUT);

Teď, když jsme dokončili nastavení, přesuneme se do funkce loop(). Když tlačítko stlačíte, obvodem volně proběhne 5 voltů, v případě nestlačeného tlačítka bude vstup připojen k zemi pomocí 10 kΩ rezistoru. Jedná se o digitální vstup, z čehož vyplývá, že přepínač může nabývat buďto stavu „zapnuto“ (v Arduinu zobrazeno jako 1 nebo HIGH), nebo „vypnuto“ (v Arduinu zobrazeno jako 0 nebo LOW).

První věc, kterou je třeba ve funkci loop() udělat je deklarace proměnné, jež bude obsahovat informace přicházející z vašeho přepínače. Informace z přepínače budou buď „1“ nebo „0“, můžete tedy použít datový typ int (je to sice plýtvání pamětí, ale o tom si povíme časem) . Tuto proměnnou nazveme sensorValue a nastavíme hodnotu rovnou té z digitálního pinu 2. Tohoto lze docílit jedním řádkem kódu:

int sensorValue = digitalRead(2);

Funkce digitalRead(pin) vrátí hodnotu naměřenou na vybraném pinu. My tuto hodnotu uložíme do proměnné sensorValue. Jakmile Arduino přečte vstup, nařídíme mu, aby tyto informace poslal počítači zpět po sériové lince jako hodnotu v desítkové soustavě . Toto provedeme příkazem Serial.printIn() v posledním řádku kódu:

Serial.println(sensorValue);

Když teď otevřete v prostředí Arduino váš Serial Monitor, uvidíte proud „0“ (nul), když je přepínač otevřený. V případě zavřeného přepínače se zobrazuje proud „1“ (jedniček).

/*
    DigitalReadSerial
    Čte digitalní vstup pinu 2, posílá výsledek do sériového monitoru

    Tento příklad je veřejnou doménou.
*/

// digitální pin 2 má k sobě připojené tlačítko. Pojmenujte ho:
int pushButton = 2;

// Jakmile zmáčknete reset, spustí se proces setup:
void setup() {
    // Inicializujte sériovou komunikaci na 9600 bitech za sekundu:
    Serial.begin(9600);
    // Nastaví pin tlačítka jako vstup:
    pinMode(pushButton, INPUT);
}

// Proces smyčky se bude neustále opakovat:
void loop() {
    // přečtěte vstupní pin:</em>
    int buttonState = digitalRead(pushButton);
    // vytiskněte stav tlačítka:</em>
    Serial.println(buttonState);
    delay(1);  // Pro dosažení stability dělejte během čtení pauzy
}

Tento text je licencován licencí CreativeCommons a je přeložen ze stránky: https://arduino.cc/en/Tutorial/HomePage

Kamila Ježková

Napsat komentář