Programiranje vaše Arduino 4x4x4 LED kocke za napraviti neke strašnije stvari

  • Michael Fisher
  • 0
  • 3379
  • 21
Oglas

Prošli tjedan sagradio sam LED kocku Kako napraviti pulsirajuću Arduino LED kocku koja izgleda kao da dolazi iz budućnosti Kako napraviti pulsirajuću Arduino LED kocku koja izgleda kao da je došla iz budućnosti Ako ste se pozabavili nekim početničkim Arduino projektima , ali tražite nešto malo trajno i na nekoj drugoj razini fenomenalne, tada je skromna LED kocka 4 x 4 x 4 ... - 64 LED da možete programirati za fantastične futurističke svjetlosne emisije - a nadam se da ste i vi to uspjeli, jer je to sjajan projekt koji će vas motivirati i proširiti Arduino set vještina. Ostavio sam vam nekoliko osnovnih aplikacija da vas malo razmislim, ali danas ću vam predstaviti još nekoliko bita softvera koji sam napravio za kocku, zajedno s objašnjenjima koda. Svrha je oboje dati vam još nekoliko lijepih svjetala za trčanje, ali i naučiti o nekim ograničenjima programiranja kocke, te naučiti neke nove programske koncepte u procesu.

Ovo je prilično napredno kodiranje; stvarno morate pročitati sve moje prethodne Arduino vodiče i naš Arduino vodič za početnike prije nego što prilagodite navedeni kod.

App 1: Mini zmija

Umjesto da vodim postavljeni slikovni slikovni slijed, želio sam programirati zmiju - umjetnu koja bi omogućila vlastiti slučajni odabir, i bila potpuno nepredvidiva. Ograničeno je samo na 2 segmenta, što ću objasniti kasnije, a demo možete vidjeti u nastavku. Cijeli kod preuzmite ovdje.

Kad se bavite 3D prostorom, potrebna su vam 3 koordinate za jednu točku: x, Y, i Z.

Međutim, u našoj kocki ravnine X i Z predstavljene su LED pinovima, dok je Y izravno preslikana na katodne ravnine. Kako bih olakšao rad s ovim koordinatama i utvrdio kretanje oko kocke, stvorio sam novi tip podataka (koristeći strukturu) da predstavlja jednu točku na kocki - koju sam nazvao “xyz”. Sastoji se od samo dva cijela broja: “xz”, i “y”. Pomoću ove strukture mogao bih tada predstavljati pravac, naznačen dolje u našem posebnom (xz, y) koordinatnom sustavu:

Y pokret (gore dolje): (xz, y + 1), (xz, y-1)
Z pokret (prema naprijed, natrag): (xz-1, y), (xz + 1, y)
X pokret (lijevo desno): (xz + 4, y), (xz-4, y)

Na primjer, za pomicanje LED-a u položaju (0,0) jedan lijevo, primjenjujemo (xz + 4, y) i završiti sa (0,4).

Postoje određena ograničenja kretanja - naime, da Y koordinate mogu biti samo moguće 0 do 3 (0 je donji sloj, 3 je vrh), a XZ koordinate mogu biti samo 0 do 15. Nadalje se postavlja Z ograničenje radi sprječavanja “skakanje” od leđa do prednje strane kocke i obrnuto. U ovom slučaju, koristimo modul funkciju za testiranje višestrukih 4 i odbijamo taj pokušaj pokreta. To je logika predstavljena u vrijedi () funkcija koja vraća vrijednost true ako je predloženi smjer prihvatljiv pomak, a false false. Dodao sam dodatnu funkciju da provjerim ima li obrnuti smjer - to jest, ako se zmija kreće u jednom smjeru, ne želimo da se krene unatrag, čak i ako se na drugo mjesto vrijedi preseliti - i pomicati() funkcija koja uzima koordinatu, smjer i vraća novu koordinatu.

XYZ tip podataka, vrijedi (), pomicati() i inverzan() sve se funkcije mogu pronaći u xyz.h datoteka u preuzimanjima. Ako se pitate zašto je to stavljeno u zasebnu datoteku umjesto u glavnu programsku datoteku, to je zbog nekih kompliciranih pravila prevoditelja Arduino koja onemogućuju funkcije vraćanje prilagođenih tipova podataka; moraju se smjestiti u vlastitu datoteku i zatim uvesti na početku glavne datoteke.

Natrag u glavnu runtime datoteku, niz uputa pohranjuje sve moguće pokrete koje zmija može učiniti; jednostavno možemo odabrati slučajnog člana niza da bismo dobili novi smjer. Varijable su također stvorene za spremanje trenutne lokacije (sada), prethodne smjer i prethodni mjesto. Ostatak koda trebao bi vam biti prilično očit; samo for petlje i uključivanje i isključivanje LED dioda. U glavnoj petlji provjeravamo je li predloženi smjer važeći, a ako jeste, idemo tim putem. Ako ne, odabiremo novi smjer.

Jedino što treba istaknuti u glavnoj petlji su neke provjere ispravke greške koju sam pronašao u vezi s multipleksiranjem: ako bi se novo mjesto nalazilo na istoj katodnoj ravnini ili istom anodnom iglu, isključivanje prethodnog LED-a rezultiralo bi u oba slučaja. Također sam u ovom trenutku shvatio da će s trenutnom primjenom izvan zmije biti nemoguće: pokušajte upaliti 3 LED-a u kutnom rasporedu. Ne možete, jer s uključenim 2 sloja i 2 LED pinova, uključile bi se 4 LED, a ne 3. To je inherentno pitanje s ograničenim dizajnom kockastih kockica, ali ne brinite: jednostavno moramo koristiti snagu postojanost vida prepisati metodu crtanja.

Postojanost vida znači da kad svjetlost dopre do naših očiju sekvencijalno - brže nego što ga možemo obraditi, čini se da je to jedna slika. U našem slučaju, umjesto da crtamo sva četiri sloja istovremeno, trebali bismo nacrtati prvi, deaktivirati ga, nacrtati drugi i deaktivirati: brže nego što možemo reći da se bilo kakva promjena čak događa. To je princip po kojem pisci poruka rade, poput ovog:

Nova metoda crtanja pomoću postojanosti vizije

Prvo prvo, nova rutina izvlačenja. Ja sam stvorio Dvodimenzionalni niz 4 x 16 bita (istinito ili lažno) koji su doslovni prikaz stanja LED kocke. Crtež za izvlačenje će implementirati postojanost vizije jednostavnim iteracijom preko ovoga i ispiranjem svakog sloja na kocku nakratko. Crtaće se u trenutnom stanju sve dok ne prođe vrijeme osvježavanja, a zatim ćemo kontrolu vratiti na glavnu petlju (). Spremio sam ovaj odjeljak koda u ovu datoteku LED_cube_POV, pa ako želite samo skočiti u programiranje vlastitih igara, a onda slobodno upotrijebite ovo kao bazu.

Aplikacija 2: Igra života

Za sada, razvijmo to u osnovnu verziju Conwayeve igre života. Za one od vas koji nisu upoznati (pokušajte Googling to pronaći fantastične uskršnje animacije jaja), Igra života je primjer staničnih automata koji stvaraju fascinantan uzorak ponašanja u hitnim situacijama s obzirom na samo nekoliko jednostavnih pravila.

To je, na primjer, kako se čini da se mravi kreću s inteligencijom i košnicom, unatoč biološkoj činjenici da zapravo samo slijede vrlo osnovna hormonska pravila. Evo punog koda za preuzimanje: pritisnite reset gumb za ponovno pokretanje. Ako vam se uvijek iznova pojavljuje isti uzorak, pokušajte dulje pritisnuti gumb za odmor.

Evo pravila igre života:

  • Svaka živa stanica s manje od dva živa susjeda umire, kao da je uzrokovana nedovoljnom populacijom.
  • Bilo koja živa stanica s dva ili tri živa susjeda živi na sljedeće generacije.
  • Svaka živa stanica s više od tri živa susjeda umire, kao da je pretrpana.
  • Bilo koja mrtva stanica s točno tri živa susjeda postaje živa stanica, kao da se reproducira.

Pokrenite kod. Primijetit ćete u roku od 5 do 10 “generacije”, automati su se vjerojatno odmorili, stabilizirajući se na određenom položaju; ponekad će ovaj stabilni obrazac promijeniti lokaciju i pomaknuti se oko ploče. U rijetkim slučajevima mogu čak i potpuno izumrijeti. Ovo je ograničenje rada samo s LED-ima 4x4x4, ali svejedno je dobra vježba.

Da biste objasnili kod:

  • Možda vam nije poznat memcpy () funkcija. Koristila sam to za spremanje prethodnog stanja igre, jer se nizovi ne mogu jednostavno dodijeliti jedni drugima kao normalne varijable - zapravo morate kopirati preko memorijskog prostora (u ovom slučaju 64 bita).
  • howManyNeighbours () funkcija bi trebala biti razumljiva, ali u slučaju da nije - ova metoda uzima jednu koordinatu i prolazi kroz svaki mogući susjed (isti niz smjerova koji smo prethodno koristili u aplikaciji zmija) da provjeri jesu li valjani. Potom provjerava jesu li ti susjedni LED-ovi bili "upaljeni" u prethodnom stanju igre, te broji koliko ih ima.
  • Glavna funkcija ove igre života je progressGame (), koji primjenjuje pravila automata na trenutno stanje igre.

poboljšanja: Predugo sam potrošio na ovo, ali možda biste željeli pokušati dodati ček koji automatski resetira ploču nakon pet ili više generacija istog uzorka. onda me molim da me obavijestite! Također bih predložio da pokušate dodati metodologiju POV u igru ​​zmija kako bi se nadala da je moguća i duža zmija.

To je danas od mene. Kasnije ću možda ponovno pregledati još nekoliko Arduino LED kockastih aplikacija, ali nadam se da biste trebali biti u mogućnosti modificirati moj kôd i stvoriti svoja pravila igre: javite nam što ćete naći u komentarima, kako bismo sve mogli preuzeti vaše kreacije! Kao i uvijek, bit ću ovdje da odgovorim na vaša pitanja i obranim svoje grozne sposobnosti kodiranja.

Kreditna slika: kartezijanske koordinate - Korisnik Wikimedije Sakurambo




Još ne komentari

O modernoj tehnologiji, jednostavnoj i pristupačnoj.
Vaš vodič u svijetu moderne tehnologije. Naučite kako koristiti tehnologije i uređaje koji nas okružuju svaki dan i naučite kako otkriti zanimljivosti na Internetu.