IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 21 - Arduino - Elektronická hrací kostka

V předchozí lekci, Zapisovátko Morseovky s Arduinem, jsme sestavili a naprogramovali zapisovač Morseovy abecedy.

V následujícím tutoriálu Arduina si ukážeme, jak se dá jednoduše postavit elektronická hrací kostka. Kostka bude generovat náhodná čísla, která následně zobrazíme na LCD displeji. Našim cílem bude vypracovat úlohu tak, aby se po stisknutí tlačítka vypsalo náhodné číslo (využijeme funkci randomSeed()). V případě, že budeme tlačítko držet stisknuté, budou se čísla aktualizovat každých 500 ms.

Seznam součástek používaných v úloze

Co budeme potřebovat:

  • vývojovou desku (v našem případě to bude Arduino UNO),
  • nepájivé kontaktní pole,
  • tlačítko,
  • 2x odpor 1 kΩ,
  • LCD Displej (v našem případě má rozlišení 16x2),
  • propojovací kabely.

Součástky máme připraveny a můžeme se pustit do zapojení.

Arduino jako hrací kostka

Nejprve připravíme Arduino. Model Arduina v podstatě nehraje roli, my budeme používat Arduino UNO. Další věc, kterou budeme jednoznačně potřebovat, je nepájivé pole. Na nepájivé pole zapojíme náš LCD displej. Ten má celkem 16 pinů, nám jich ale postačí 12. Potom budeme potřebovat ještě zapojit tlačítko, abychom mohli dát Arduinu povel, že chceme vygenerovat nějaké nové číslo (v rozmezí 1-6). Generátor náhodných čísel se samozřejmě dá naprogramovat ke generování libovolných čísel, ale jelikož toto má být hrací kostka se šesti stěnami, použijeme jen dané rozmezí. Nic nám ovšem nebrání naši hračku naprogramovat tak, aby nám generovala čísla v rozmezí 1-10 (desetistěnná kostka). Všechny naše komponenty poté propojíme kabely. Doporučujeme rozlišovat barvy (GND - černá, +5 V - červená, dráty pro LCD - oranžová a pro tlačítko - růžová). Je to z důvodu lepší přehlednosti v zapojení. K naší hračce si můžeme připojit i LED diodu, abychom věděli, že tlačítko je stisknuté. Tímto budeme mít celé zapojení hotové:

Hrací kostka - Arduino - Hardware

Program generátoru čísel

Generování náhodných čísel nám zajistí funkce randomSeed(). Do této funkce pouze zadáme číslo pinu, na kterém se měří elektromagnetický šum. Ten funkci poslouží jako náhodná vstupní hodnota. Poté použijeme funkci random(min,max). V našem případě random(1,7).

Funkce random(min, max) generuje pseudonáhodné číslo v rozmezí min a max - 1. Proto v ní tedy máme 1 až 7.

Nyní si otevřeme Arduino IDE (nebo Tinkercad, pokud zapojení jen simulujeme) a můžeme se přesunout k programu:

#include <LiquidCrystal.h> // Nahraje knihovnu pro displej

// definujeme piny
#define RS_PIN 2
#define E_PIN 3
#define D4_PIN  4
#define D5_PIN  5
#define D6_PIN  6
#define D7_PIN  7
#define TLACITKO 8

LiquidCrystal LCD(RS_PIN , E_PIN , D4_PIN , D5_PIN , D6_PIN , D7_PIN); // Definujeme piny pro displej

void setup()
{
    pinMode(TLACITKO, INPUT);   // nastavení pinu pro tlačítko
    LCD.begin(16,2);            // zahájí nastavení displeje s dvěma řádky a šestnácti znaky
    randomSeed(digitalRead(9)); // čte náhodnou hodnotu na digitálním pinu č.9
}

void loop()
{
    if (digitalRead(TLACITKO) == HIGH)  // když je tlačítko stisknuté
    {
        LCD.setCursor(0,0);             // nastaví kurzor na 1. znak
        LCD.print("nahodne cislo:");    // vypíše "náhodné číslo:"
        LCD.setCursor(5,5);             // nastaví kurzor na 5. znak 2. řádky
        LCD.print("<");                 // vypíše "<" na 5. znaku
        LCD.setCursor(7,5);             // nastaví kurzor na 7. znak 2. řádky
        LCD.print(random(1,7));         // vypíše náhodné  číslo v rozmezí 1-6
        LCD.setCursor(9,5);             // nastaví kurzor na 9. pozici
        LCD.print(">");                 // vypíše ">" na 9. znaku
        delay(500);                     // uspí program na 500 ms)
    }
}

Popis funkce programu

První věc, kterou v kódu vidíme, je #include <LiquidCrystal.h>. Klíčové slovo #include používáme tehdy, když chceme využívat knihovny, které Arduino nabízí, případně ty, které jsme si vytvořili my sami. My používáme knihovnu <LiquidCrystal.h>. Knihovna se používá při práci s LCD displejem (bez ní by nám displej nemohl fungovat). Další věcí, kterou jsme museli udělat, bylo definování konkrétních pinů, které chceme pro displej a tlačítko využívat.

Přesuneme se do do void setup(). Zde vidíme již známé nastavení pinu pomocí funkce pinMode(). Pod ním se nachází metoda LCD.begin(16, 2). Tím definujeme náš displej s rozlišením 16 znaků na dvou řádcích. Poslední věc, kterou v setupu najdeme, je funkce randomSeed(), tato funkce dělá to, že čte náhodná čísla z pinu číslo 9.

Když se podíváme do void loop(), najdeme zde podmínku, která funguje pouze tehdy, je-li tlačítko zmáčknuto. Uvnitř podmínky poté na začátku nastavíme, kde chceme začít vypisovat náš text pomocí metody LCD.setCursor(). Metoda nám určuje, kam chceme začít vypisovat znaky. V argumentu přijímá dva parametry, a to pozici řádku a pozici sloupce. Obrazovku displeje si tedy ti kreativnější z nás mohou představit jako takové 2D pole. Poté pomocí LCD.print() vypíšeme text a dalším LCD.setCursor() odřádkujeme. Takto postupujeme až k výpisu náhodného čísla pomocí LCD.print(random(1,7)). Poté výpis stejným způsobem dokončíme. Na konci podmínky se potom nachází funkce delay(). Ta je zde proto, aby se čísla neměnila příliš rychle.

V příští lekci, MPU6050 akcelerometr a gyroskop pro Arduino, budeme pracovat s akcelerometrem a gyroskopem.


 

Předchozí článek
Zapisovátko Morseovky s Arduinem
Všechny články v sekci
Arduino - Hardware
Přeskočit článek
(nedoporučujeme)
MPU6050 akcelerometr a gyroskop pro Arduino
Článek pro vás napsal @PeWy@
Avatar
Uživatelské hodnocení:
8 hlasů
Autor programuje v C++, Javě a Batchi. Zajímá se o elektroniku a především pracuje s Arduinem.
Aktivity