Joc Lights Out 6x6

Introducere

Pentru cei care doresc să-și antreneze mintea există acest joc numit Lights Out. Regulile lui sunt simple: când dai flip la una din lumini, și cele vecine vor fi schimbate – aprinse dacă au fost stinse sau viceversa. Iar scopul final este ca toate luminile să fie stinse (out).

Acest proiect oferă ocazia de a juca acest joc într-un mod diferit față de cum se joacă de obicei (calculator cu mouse sau touchscreen-ul unui telefon). Aici intrarea se face prin utilizarea unor butoane și feedback-ul vizual va fi prin LED-uri.

Descriere

Jocul în sine va avea toată logica lui implementată în firmware-ul microcontrollerului, hardware-ul fiind responsabil doar pentru interacțiunea efectivă cu utilizatorul.

Jocul este 6×6, ceea ce înseamnă 36 de butoane și 36 de LED-uri pe panoul principal. Am implementat un grid de butoane, similar cu cel de pe acest site și apoi, în software, am implementat jocul în sine și un sistem de hinturi. Pentru gridul de butoane și cel de LED-uri am scris un driver special, pentru ca jocul în sine să îl poată folosi prin 2 zone de memorie de 6 octeți: buttons și leds. În fiecare zonă am păstrat un rând de LED-uri sau de butoane care sunt tratate de driver. Pentru implementarea sistemului de hinturi, am făcut un brute force prin toate rezolvările posibile (cu o reducere semnificativă la a încerca doar 64 de rezolvări, restul până la 2^36 fiind sigur incorecte). Am folosit timerul 0 pentru driver și timerul 1 pentru RNG-ul jocului.

Listă componente

  • 38 butoane (36 pe panou, 1 hint, 1 reset)
  • 36 LED-uri SMD (pe panou)
  • 2 LED-uri THT (pe placa de bază – unul va fi folosit pentru a indica dacă se poate face o mutare în acel moment)
  • 1 microcontroller ATMEGA328p (toată logica jocului se va petrece în aceasta)
  • 1 PCB suplimentar (panoul care conține butoanele și multiplexoarele cu care interacționează utilizatorul)
  • Placa de bază și componentele necesare pentru a programa și susține funcționarea microcontrollerului.

Schemă bloc

Schemă electrică (Eagle)

Microcontrollerul și componentele de pe placa de bază nu au fost incluse pentru că nu am făcut modificări față de placa de bază. Headerele sunt pe fix aceeași poziție; pinii PA*, PB*, PC* și PD* duc către pinii corespunzători pe placa de bază și implicit la microcontroller.

Dificultăți

Pe partea de hardware, am avut o lipitură aiurea la butoane care a dus la contactul dintre coloana a 5-a și GND (datorată unei lipituri careless și a unui soldermask necorespunzător). Am rezolvat-o în ziua PM Fair, urmând a descoperi că aveam probleme și pe partea de software la butoane.

Tot pe partea de hardware, unul din traseele de pe PCB a fost incorect (foloseam același pin de pe header și pentru primul rând de LED-uri și pentru prima coloană de butoane). Am fost nevoit să tai traseul și să pun un fir „random” de la un pin liber către coloana de butoane. Problema a fost descoperită miercuri, 22 mai (săptămâna cu PM Fair).

Pe partea de software, inițial driverul de LED-uri era aproape corespunzător, dar am avut mici probleme. La cel de butoane în schimb, niște simple typo-uri duceau la un comportament nedorit (la un program de test care prelua starea butoanelor apăsate de la driver și o punea la LED-uri mi-a relevat că un handling incorect îmi făcea rândul 4 să îmi activeze toate butoanele de pe coloana respectivă, iar rândul 6 nu era deloc detectat; mi-a luat mai mult decât trebuia să descopăr typo-ul respectiv).

Tot la software, la implementarea efectivă a jocului, sistemul de hinturi a fost complex, iar la handlingul de butoane aveam probleme (butoanele de user [PB2] și de hint [PC4, pe placa secundară] – nu setasem corect tipul pinului de intrare la fiecare (input cu pull-up).

Concluzii

De la acest proiect am învățat să fac lipituri, inclusiv unele mai hackish când este nevoie, să organizez un proiect întreg cap-coadă după propria idee și să fac debugging pe problemele simple de hardware.

Acest proiect a fost una din puținele ocazii de când sunt la facultate în care m-am simțit mândru de propria creație.

Bibliografie, resurse

pm/prj2019/abirlica/statham_flip.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0