Proiectul consta in implementarea unui joc ce exerseaza agilitatea si atentia utilizatorului folosindu-se, in principal, de un set de leduri.
Ledurile se aprind intr-o anumita configuratie, raman aprinse un interval de 5 secunde, dupa care se sting. Jucatorul incearca sa recreeze configuratia, aprinzand aceleasi led-uri prin actionarea unor butoane.
Un set de leduri este dublat de un set de butoane cu amplasare simetrica astfel incat sa fie intuitiva interactiunea intre butoane si leduri.
Jocul va fi completat de un fundal muzical, un buzzer va genera sunete specifice pentru configuratie introdusa corect sau gresit, iar pe un LCD se vor afisa informatii legate de nivelul de dificultate si progresul jucatorului.
Lista de componente:
Schema electrica:
Mediul de dezvoltare utilizat:
Am folosit biblioteca pusa la dispozitie in Laboratorul 1 pentru a realiza interfatarea cu LCD-ul text (lab1). A fost necesara modificarea pinilor din header-ul bibliotecii, placuta de baza fiind diferita de cea din laborator.
Am simulat redarea unei note muzicale, folosindu-ma de frecventa si durata sunetului generat de buzzer.
/* Genereaza o nota folosind buzzer-ul. */ static void buzzer_reda(int nota, int durata) { int perioada_nota = 1000000 / nota; int i, j; /* * Nu putem folosi variable ca argument pentru functia * _delay_us(), asa ca folosim acest "workaround". */ for (j = 0; j < durata; j++) { PORTC |= (1 << PC0); for (i = 0; i < perioada_nota / 2; ++i) _delay_us(1); PORTC &= ~(1 << PC0); for (i = 0; i < perioada_nota / 2; ++i) _delay_us(1); } }
Pornind de la redarea unei note, am extras fragmente din melodii cunoscute pentru a genera un sunet potrivit pentru configuratie introdusa corect, respectiv configuratie introdusa gresit.
Ledurile se aprind intr-o configuratie determinata de nivelul de dificutate, se realizeaza un delay de 5 secunde, dupa care ledurile se sting si se asteapta inputul utilizatorului. La apasarea butonului de verificare, se analizeaza starea fiecarui led si se compara cu starea pe care ar trebui sa o aiba (aprins/stins) conform configuratiei nivelului. Daca toate ledurile sunt in starea corespunzatoare se va trece la nivelul urmator, altfel se va repeta afisarea configuratiei nivelului curent.
Demo: sGm79M5CoJY
Proiectul s-a dovedit interesant, desi nu am ales un proiect de dificultate ridicata. Sunt fericita ca am reusit sa realizez lipiturile pentru circuitul in care am integrat ledurile si butoanele, iar cea mai interesanta parte a fost cea in care am recreat parti din melodii utilizand buzzer-ul.
Arhiva contine fisierele de cod, schema electrica si un demo sub forma unui filmulet.
ledmemorygame_maricaandreea336ca.zip