Reakčná hra pre dvoch hráčov – Arduino Uno
Reakčná hra pre dvoch hráčov na arduino UNO.
Zkusíme si ukázat, jak netradičně využít LED matrix, který je většinou používán jako posuvný displej. Na toto využití určitě naleznete na internetu spoustu tutoriálů, a proto si zkusíme udělat něco jiného.
Jako desku jsem zvolil Wemos D1 mini, a to z důvodů, že projekt budu chtít následně využívat trochu jinak a bude potřeba připojení do LAN sítě. Další důvod jsou rozměry desky, které jsou proti Arduino UNO znatelně menší. Poslední důvod byl, že těchto desek mám nadbytek.
Použil jsem červenou LED matici MAX7219 v rozměru 8x32. Vlastně jsou to za sebou zapojené 4 matice 8x8, ale hodilo se mi, že je to na jedné PCB desce.
Poslední komponenta je DHT 11. Jedná se snad o nejznámější čidlo na světě. Kromě teploty měří taky vlhkost v ovzduší. Zvolil jsem 11ku z důvodů, že teploměr hodlám využívat v domácím prostředí a tam mi teplotní DHT 11 rozsah stačí.
V první části si připojíme knihovny v mém případě DHT.h a LedControl.h. Následně zadeklaruji pár konstant:
Následně jsou zadeklarovány objekty:
V setupu toho moc není. Nastavení sériové komunikace a displeje (zde se musí každý nastavit zvlášť, proto byl použit cyklus.
Poslední část kódu je samotný loop. Princip je postaven na několika do sebe vložených cyklů. První, co se stane, že si zjistíme aktuální teplotu z čidla, poté se hodnota převede na celé číslo. Protože máme na displeji omezený prostor, nemůžeme zobrazit všechny hodnoty, ale pouze jen úsek (maximálně 32 řádků – 32 stupňů). Kvůli čitelnosti z dálky jsem si zvolil, že jeden stupeň jsou 2 řádky. Odečteme tedy z aktuální teploty minimální teplotu. Například 25- 17 = 8 -> budeme tedy zobrazovat na displeji 8 stupňů (16 řad). Na konci vymažeme všechny displeje.
Nyní máme hotovo. Je zde spoustu věcí, které by šly editovat/vylepšit. Například ukazovat desetinná čísla, adaptace na světlo venku, nebo zobrazení vločky/slunka při nedosažení či překročení hraničních teplot.
Celý použitý kód:
#include <DHT.h>
#include "LedControl.h"
const int teplota_min = 17;
const int teplota_max = 32;
const int numDevices = 4;
const int DHT_PIN = 4;
#define DHTTYPE DHT11 ; // DHT 11
DHT dht(DHT_PIN, DHT11);
/*D7,D5,D6,4*/
LedControl lc=LedControl(13,14,12,numDevices);
void setup() {
Serial.begin(115200);
for (int x=0; x<numDevices; x++)
{
lc.shutdown(x,false); // Zapnutí
lc.setIntensity(x,4); // Nastavení svítivosti
lc.clearDisplay(x); // pročistění displeje
}
}
void loop()
{
int i = 1;
float tx = dht.readTemperature(); //ziskaní teploty
Serial.print("Teplota: ");
int teplota =(int)tx; // převod floatu na Int
Serial.println(String(teplota)); //výpis do Seriové konzole.
int t = 0; // pomocná promenna
int pocet_rad = 0;
if (teplota > teplota_min && teplota< teplota_max)
{
t = teplota - teplota_min; // ziskaní rozdlů
pocet_rad = t *2; // aby byl teploměr čitelný i z dálky, zvolil jsem že jeden stupeň budou dva řádky
for (int d = 3; d>=0; d--)
{
for (int row=0; row<8; row++)
{
if (i<=pocet_rad)
{
for (int col=0; col<8; col++) //cyklus rada
{
lc.setLed(d,col,row,true); //zapnutí diody
}
}
i++;
}
}
}
delay(5000);
lc.clearDisplay(3);
lc.clearDisplay(2);
lc.clearDisplay(1);
lc.clearDisplay(0);
}
V budoucnu doplním o 3D model, aby nezůstal teploměr v šuplíku.
Reakčná hra pre dvoch hráčov na arduino UNO.
Po prvních pokusech s moduly CC1101 433.92Mhz jsem se po čase rozhodl si vyzkoušet napsat program na jednoduché ovládání led diody tak aby jeden modul pravidelně vysílal hodnoty které se na druhém modulu vyhodnotí a tento pak bude pravidelně blikat led diodou. Po tomto programu a jeho odzkoušení jsem se rozhodl si napsat další program na zjištění číselných hodnot tlačítek na dálkovém ovladači pro bezdrátové zásuvky 433Mhz, a tyto pak ovládat dalším napsaným programem na zapínání a vypínání zásuvky. Pro ovládání jsem použil Arduino Nano které jsem pro testování osadil do Arduino IO shieldu, pro komunikaci mezi Arduino a modulem CC1101 jsem použit 8 – kanálový obousměrný převodník logických úrovní (5V – 3.3V) a pro napájení celé sestavy jsem použil vyrobený napájecí zdroj s výstupním napětím 8V pro napájení Arduino Nano, 5V a 3.3V pro napájení převodníku a modulu CC1101. Uvedené přípravky rozšiřují zapojení uveřejněná v [1].