Autorul poate fi contactat la adresa: Login pentru adresa
Jocul Classic Simon constă în aprinderea ledurilor într-o ordine random după care jucătorul trebuie să apese pe butoanele corespunzătoare ledurilor în aceeași ordine. Aprinderea unui led este însotită de către un sunet specific produs de buzzer pentru a facilita memorarea secvenței. În momentul în care s-a reprodus secvența corect se pornește o secvență nouă, de lungime mai mare, iar acest lucru se repetă până când jucătorul greșește. Dacă secvența este greșită ledurile se aprind intermitent, iar buzzerul va anunța greșeala.
Este un joc, deci sper ca lumea să se distreze când se joacă :)
Mereu mi s-a părut amuzant jocul ăsta și cum scopul proiectului era să facem ceva ce ne place și ni se pare interesant am ales Simon.
Pentru că este relaxant și mă determină să învăț cum să proiectez un circuit și cum să leg leduri și butoane de un microprocesor. Mai mult de atât nu prea face.
Butonul de start porneste jocul. Prima secventa are lungimea 1 si este generata de catre functia next_button care apeleaza la randul ei o functie ce genereaza random un numar intre 0 si 3, deci dupa aprinderea unui LED se asteapta ca utilizatorul sa apese butonul corespunzator. La fiecare aprindere a unui LED buzzer-ul scoate un anumit sunet (fiecare LED are sunetul lui propriu), si implicit la fiecare apasare de buton care aprinde corect un LED se aude sunetul bun, altfel se va auzi un sunet care anunta ca s-a gresit secventa si se reia de la secventa de lungime 1. Daca se aprinde corect o secventa, lungimea ei se incrementeaza cu 1, pastrandu-se intr-un vector primele valori si generandu-se cu functia de random implementata urmatoarea valoare.
Piesele cumpărate sunt următoarele:
Am folosit AVR Studio. A fost destul pentru ce aveam :)
Nu a fost nevoie de librarii sau surse 3rd-party si nici nu aveam nevoie de vreun algoritm special. Singurul algoritm deosebit pe care l-am folosit a fost cel de generare numere random pentru aprinderea secventelor de led-uri (nu se poate folosi rand) - linear feedback shift register for pseudo random number generation.
In afara de acest lucru mai am ca functii:
Am reusit sa termin proiectul dupa ce a fost nevoie sa rescriu bootloader-ul de cateva ori. Acum merge, singura chestie este ca am pus un mic delay inainte sa las utilizatorul sa apese pe butoane pentru a reface secventa, ceea ce poate duce uneori la o interpretare a unui raspuns corect drept gresit. In afara de acest lucru proiectul merge, permite apasare oricat de lunga pe butoane, buzzer-ul scoate si el un sunet individual pentru fiecare led (desi nu chiar cel mai placut).
Pana la urma a fost destul de dragut sa realizez acest proiect. Nu ma asteptam sa il termin in momentul in care am inceput materia, dar ma bucur ca am cumparat componentele si ca am lipit. A fost chiar tare sa vad ca imi iese ceva si mai ales ca si merge si pot sa ma joc!
Mi se pare foarte tare ca avem aceasta tema. Desi este extrem de evervant cand ceva nu merge (mai ales pentru ca nu prea stiam ce sa fac), in momentul in care totul iese si face ce trebuie esti mii de fericit.
Placa rezultată în urma etapei 1:
Până acum am cumpărat componentele. Urmează lipitul și programarea.
Plăcuța după prima oară când am început să lipesc. Mai am să o conectez la placa de la prima etapă. Sper să meargă.
Am terminat de lipit și am urcat și primul program pe placă. Am avut probleme cu bootloader-ul (a trebuit să mi-l rescrie de câteva ori).
Piesele au fost cumpărate de la Syscom și Conex.
Piesă | Cantitate | Preț total |
Placă | 1 | 10 lei |
Buzzer | 1 | 4 lei |
Rezistențe | 10 | 1 lei |
Led roșu/galben/verde | 2 | 0.6 lei |
Led albastru | 1 | 2 lei |
Fire legătură | 1m | 0.5 lei |
Buton | 6 | 3 lei |
De asemenea m-am mai uitat in proiectele din anii trecuti (nu doar cele care erau joc de memorie, chiar si pian sau orice avea butoane si difuzor).