Proiectul reprezintă versiunea electronică a jocului cu avioane, jucat de regulă cu hârtia și pixul. (o variație a jocului Battleship)
Nu știu cât de util este pentru alții acest proiect, dar noi am căutat ca prin intermediul lui să dobândim cunoștiințe noi intr-o manieră care sa ne distreze și care să ne trezească interesul pentru această latură a științei calculatoarelor.
Proiectul conține:
Module hardware
Plăcuța de bază
Plăcuța de extensie
Module software
project.hex - conține toate instrucțiunile necesare pentru joc
2xLista de piese | |
---|---|
Componentă | Număr |
Rezistență 3K3 | 10 |
Rezistență 300 | 10 |
Tranzistor | 10 |
Convertor BCD CD4028BE | 1 |
Push button | 5 |
Baretă | 4 |
Led | 100 |
Placuța de test | 1 |
Cablu | ∞ |
Pentru plăcuța de extensie:
Am considerat 1 convertor BCD și 10 tranzistoare în loc de 2 convertoare BCD pentru că ne-am gândit că vrem să aprindem mai multe led-uri deodată dar ne-am dat seama că mai bine aprindem câte un led pe rând deoarece n-am fi avut destulă intensitate pentru led-uri.
Inițial am vrut să facem cu interfață ethernet, ne-am cumparat tot ce ne trebuia mai puțin mufa magnetică mamă RJ45, mufă pe care nu am găsit-o nicăieri (la momentul respectiv) de aceea am decis că facem partea de rețea prin interfața serială RS232 dar nu știm de ce aceasta nu a mers cum ne așteptam să meargă (ca la etapa 1 a proiectului când a fost testată) și drept urmare am scos circuitul integrat MAX232 și am șuntat curentul electric prin cabluri în pinii respectivi.
Se poate vedea conectarea componentelor electrice și în galeria de poze de la “rezultate obținute” de mai jos.
Ne așteptam ca partea de programare să ne ia mai puțin timp decât partea în care a trebuit să conectăm componentele electrice însă se pare că a programa și a ține cont de constrângerile mediului pe care programezi înseamnă ceva mai mult decât a te gândi la niște algoritmi care să-ți rezolve problema.
Jocul a fost gândit în așa fel încât să fie cât mai compact în ceea ce privește folosirea resurselor prin utilizarea unor tipuri de date cât mai mici ca memory footprint, prin scrierea unui cod fără informație redundantă și prin eliminarea codului nefolosit care venea o dată cu header-ele incluse.
void clear_display() // stinge toate led-urile void my_delay() // stabilește cât ar trebui sa rămână aprinse led-urile void init_random() // initializeaza / suprascrie seed-ul din memoria EEPROM folosit la generarea unui număr random void refresh_display() // actualizează display-ul / matricea de led-uri la fiecare intrare în bucla principală conform schimbărilor uint8_t validate_dot_position(uint8_t x, uint8_t y) // validează poziția unui punct void draw_dot(uint8_t x, uint8_t y, uint8_t led_value) // aprinde led-ul corespunzător coordonatelor void get_plane_dots(dot_t *vect, uint8_t x, uint8_t y, uint8_t dir) // întoarce punctele conținute de un avion dat prin coordonatele mijlocului acestuia uint8_t validate_plane_position(uint8_t x, uint8_t y, uint8_t dir, uint8_t validate) // validează poziția unui avion void draw_plane(uint8_t x, uint8_t y, uint8_t dir, uint8_t led_value) // aprinde led-urile corespunzătoare punctelor conținute de avion dot_t random_cursor_position() // generează un pct de coordonate x, y aleator dot_t random_plane_position(uint8_t *dir) // generază un pct valid de coordonate x, y aleator pentru un avion void init_game(uint8_t *start_x, uint8_t *start_y, uint8_t *dir, uint8_t *dot_type, uint8_t *saved_dot_type) // inițializează parametrii jocului void init_USART() // inițializeaza interfața serială uint8_t pack_bcd(uint8_t x, uint8_t y) // împachetarea informației transmise void unpack_bcd(uint8_t bcd, uint8_t *x, uint8_t *y) // despachetarea informației primite void usart_send(uint8_t data) // trimite date prin interfața serială
În urma muncii depuse am realizat ce ne-am propus, un joc cu avioane pe matrice de leduri; însă placuța cu leduri poate fi folosită și pentru alte jocuri.
Galerie de poze cu plăcuțele realizate |
---|
27 Mai 2010 Am cumpărat componentele electrice. Nu am găsit tot ce ne trebuia.
28 Mai 2010 Ne-am apucat de implementat circuitul electric.
1 Iunie 2010 Am fost să căutam restul componentelor. Tot nu am găsit ce trebuie pentru interfața Ethernet. Am terminat de implementat circuitul electric.
2 Iunie 2010 Ne-am apucat de programare.
4 Iunie 2010 Am terminat cu programarea și am făcut documentația proiectului.