Programování Arduino 4x4x4 LED kostky, aby udělalo ještě více úžasné věci

  • Michael Cain
  • 0
  • 2187
  • 607
reklama

Minulý týden jsem postavil LED kostku Jak vyrobit pulzující Arduino LED kostku, která vypadá, jako by přišla z budoucnosti Jak vyrobit pulzující Arduino LED kostku, která vypadá, jako by přišla z budoucnosti Pokud jste dabbledovali některé začátečníky Arduino projektů , ale hledají něco trochu trvalého a na zcela jiné úrovni úžasné, pak pokorná LED kostka 4 x 4 x 4 je… - 64 LED že můžete naprogramovat fantastické futuristické světelné show - a doufám, že jste to udělali také, protože je to skvělý projekt, který vás motivuje a rozšiřuje vaši Arduino sadu dovedností. Nechal jsem vás s několika základními aplikacemi, abych vás přemýšlel, ale dnes vám představím několik kousků softwaru, které jsem pro krychli vyrobil, spolu s vysvětlením kódu. Účelem tohoto je jak dát vám několik hezkých světelných show ke spuštění, ale také se dozvědět o některých omezeních programování krychle a naučit se některé nové programovací koncepty v procesu.

Toto je nějaké docela pokročilé kódování; musíte si před přizpůsobením poskytnutého kódu přečíst všechny mé předchozí návody Arduino a průvodce Arduino našeho začátečníka..

Aplikace 1: Mini Snake

Spíše než spouštět posloupnost vzorů podobných hadům, chtěl jsem naprogramovat hada - umělecký, který by z něj udělal vlastní náhodná rozhodnutí a byl zcela nepředvídatelný. Je omezen pouze na 2 segmenty, což vysvětlím později a níže si můžete prohlédnout ukázku. Stáhněte si celý kód zde.

Při řešení 3D prostoru potřebujete 3 souřadnice na jeden bod: X, Y, a Z.

V naší krychli jsou však roviny X a Z reprezentovány LED kolíky, zatímco Y je přímo mapováno na katodové roviny. Pro usnadnění práce s těmito souřadnicemi a vymýšlení pohybu kolem krychle jsem proto vytvořil nový datový typ (pomocí struct) představovat jediný bod na krychli - který jsem volal “xyz”. Skládá se pouze ze dvou celých čísel: “xz”, a “y”. S touto strukturou bych pak mohl také představovat směr, uvedený níže v našem speciálním (xz, y) souřadnicovém systému:

Y pohyb (nahoru, dolů): (xz, y + 1), (xz, y-1)
Z hnutí (vpřed, vzad): (xz-1, y), (xz + 1, y)
X pohyb (levý pravý): (xz + 4, y), (xz-4, y)

Například pro přesunutí LED na místo (0,0) jeden vlevo, použijeme (xz + 4, y) a skončit s (0,4).

Existují určitá omezení, která se mají pohybovat - konkrétně to, že souřadnice Y mohou být možné 0 až 3 (0 je spodní vrstva, 3 je horní) a XZ souřadnice mohou být pouze 0 až 15. Aby se zabránilo, je na pohyb Z umístěn další limit “skákání” zezadu do přední části krychle a naopak. V tomto případě použijeme funkci modulu k testování násobků 4 a tomuto pokusu o pohyb odmítneme. Toto je logika zastoupená v platný() funkce, která vrací true, pokud je navržený směr přijatelným tahem, a falešně jinak. Přidal jsem další funkci pro kontrolu obrácený směr - to znamená, že pokud had míří jedním směrem, nechceme, aby šel zpět na sebe, i když je jinak platným místem, kam se přesunout - a hýbat se() funkce, která vezme souřadnici, směr a vrátí novou souřadnici.

XYZ datový typ, platný(), hýbat se() a inverzní() funkce lze nalézt v xyz.h soubor ke stažení. Pokud vás zajímá, proč to bylo vloženo do samostatného souboru namísto hlavního programového souboru, je to kvůli některým složitým pravidlům kompilátoru Arduino, které brání funkcím vrácení vlastních datových typů; musí být umístěny do vlastního souboru a poté importovány na začátek hlavního souboru.

Zpět v hlavním runtime souboru obsahuje řada směrů všechny možné pohyby, které může had provést; můžeme jednoduše vybrat náhodného člena pole a získat nový směr. Proměnné jsou také vytvořeny pro uložení aktuálního umístění (nyní), předchozího směr a předchozí umístění. Zbytek kódu by vám měl být zcela zřejmý; jen fÓr smyčky a zapnutí a vypnutí LED diod. V hlavní smyčce zkontrolujeme, zda je navrhovaný směr platný, a pokud ano, jdeme tímto směrem. Pokud ne, zvolíme nový směr.

Jedinou věcí, na kterou poukazovat v hlavní smyčce, jsou některé kontroly, jak opravit chybu, kterou jsem našel, zahrnující multiplexování: pokud by nové umístění bylo na stejné rovině katody nebo na stejném anodovém kolíku, vypnutí předchozí LED by mělo za následek zhasnutí obou. To je také v tomto bodě, že jsem si uvědomil, že překročení 2 segmentového hada bude při mé současné implementaci nemožné: pokuste se rozsvítit 3 LED diody v rohovém uspořádání. Nemůžete, protože se aktivovanými 2 vrstvami a 2 LED diodami by se rozsvítily 4 LED diody, ne 3. Toto je vlastní problém s naším omezeným designem multiplexované krychle, ale nemějte obavy: prostě musíme využít sílu vytrvalost vidění přepsat metodu kreslení.

Perzistence vidění znamená, že když světlo dopadne postupně na naše oči - rychleji, než jak můžeme zpracovat - vypadá to jako jediný obraz. V našem případě bychom namísto kreslení všech čtyř vrstev současně měli nakreslit první, deaktivovat, nakreslit druhou a deaktivovat: rychleji, než dokážeme říci, že k jakékoli změně dochází. Na tomto principu pracují autoři zpráv, jako je tento:

Nová metoda kreslení pomocí perzistence vidění

Nejprve pak nová rutina losování. Vytvořil jsem 4 x 16 dvourozměrné pole bitů (true nebo false), které mají být doslovným znázorněním stavu LED kostky. Rutina losování implementuje vytrvalost vidění jednoduše iterací přes toto a vypláchnutím každé vrstvy do krychle na krátký okamžik. Bude se i nadále kreslit v aktuálním stavu, dokud neuplyne čas aktualizace, kdy předáme řízení zpět hlavní smyčce (). Tuto část kódu jsem uložil do tohoto souboru LED_cube_POV, takže pokud chcete jen skočit do programování svých vlastních her a pak to bez obav použít jako základnu.

Aplikace 2: Game of Life

Prozatím si to vytvořme v základní verzi hry Conway's Game Of Life. Pro ty z vás, kteří nejsou obeznámeni (zkuste Googling najít úžasnou animaci velikonoční vajíčko), Hra života je příklad celulárních automatů, které vytvářejí fascinující vzorec naléhavého chování, který je dán jen několika jednoduchými pravidly.

Takto se například zdá, že se mravenci pohybují inteligencí a úlovou myslí, a to navzdory biologické skutečnosti, že skutečně dodržují velmi základní hormonální pravidla. Zde je plný kód ke stažení: stiskněte reset tlačítko pro restartování. Pokud zjistíte, že stále znovu a znovu získáváte stejný vzorec, zkuste stisknout tlačítko odpočinku déle.

Zde jsou pravidla hry života:

  • Jakákoli živá buňka s méně než dvěma živými sousedy zemře, jako by byla způsobena nedostatečnou populací.
  • Každá živá buňka se dvěma nebo třemi živými sousedy žije na další generaci.
  • Jakákoli živá buňka s více než třemi živými sousedy zemře, jako by přeplněním.
  • Každá mrtvá buňka s přesně třemi živými sousedy se stane živou buňkou, jako by reprodukcí.

Spusťte kód. Všimnete si do 5 až 10 “generace”, automaty se pravděpodobně zastavily a stabilizovaly se v určité poloze; někdy tento stabilní vzor změní umístění a posun kolem hrací plochy. Ve vzácných případech mohou dokonce úplně vymřít. Jedná se o omezení pouze pro práci s LED diodami 4x4x4, ale přesto je to dobré učební cvičení.

Vysvětlení kódu:

  • Můžete být obeznámeni s memcpy () funkce. Použil jsem to k uložení předchozího stavu hry, protože pole nelze navzájem přiřadit jen jako normální proměnné - musíte skutečně kopírovat přes paměťový prostor (v tomto případě 64 bitů).
  • howManyNeighbours () funkce by měla být samovysvětlující, ale v případě, že tomu tak není - tato metoda vezme jednu souřadnici a proběhne skrz každého možného souseda (stejné pole směrů, jaké jsme dříve použili v hadové aplikaci), aby zkontrolovala, zda jsou platné. Poté zkontroluje, zda tyto sousední LED diody byly „zapnuté“ v předchozím stavu hry, a spočítá, kolik jich je.
  • Hlavní funkcí této aplikace Game of Life je progressGame (), který aplikuje automatická pravidla na aktuální stav hry.

Vylepšení: Strávil jsem příliš dlouho na tom tak daleko, ale možná budete chtít zkusit přidat šek, který automaticky resetuje desku po přibližně 5 generacích stejného vzoru. pak prosím dejte mi vědět! Navrhoval bych také pokus o přidání metodiky POV do hadí hry, aby se dalo snad dosáhnout toho, aby byl delší had možný.

To je ode mě dnes. Mohu se později vrátit k dalším aplikacím Arduino LED pro datové krychle, ale doufejme, že byste měli být v pozici, abyste mohli upravit můj kód a vytvořit si vlastní pravidla hry: dejte nám vědět, s čím v komentářích přijdete, takže můžeme všechny stáhnout vaše výtvory! Jako vždy, budu tady, abych odpověděl na vaše otázky a bránil své strašné kódovací schopnosti.

Obrázek Kredit: kartézské souřadnice - uživatel Wikimedia Sakurambo




Bisher hat noch niemand einen Kommentar zu diesem Artikel abgegeben.

O moderní technologii, jednoduché a cenově dostupné.
Váš průvodce ve světě moderních technologií. Naučte se, jak používat technologie a pomůcky, které nás každý den obklopují, a naučte se, jak objevovat na internetu zajímavé věci.