Diana MINCU - Classic Simon

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Ce face?

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.

Care este scopul lui?

Este un joc, deci sper ca lumea să se distreze când se joacă :)

Care a fost ideea de la care am pornit?

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.

De ce este util?

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.

Descriere generală

Schema bloc

Module

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.

Hardware Design

Listă de piese

Piesele cumpărate sunt următoarele:

  • buzzer
  • 10 rezistențe de 330Ω (trebuie doar 4, dar nu se vând mai puțin de 10)
  • fire de legătură
  • 7 leduri - 2 roșii, 2 galbene, 1 albastru, 2 verzi (trebuie doar unul din fiecare culoare, restul sunt pentru siguranță)
  • 6 butoane (momentan folosesc doar 4)
  • placă

Componente

Scheme electrice

Schema electrica

Diagrame de semnal

Semnal

Software Design

Mediu de dezvoltare

Am folosit AVR Studio. A fost destul pentru ce aveam :)

Surse si functii implementate

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:

  • next_sequence - ia urmatorul numar random si apeleaza functia my_random
  • set_pwm
  • unset_pwm
  • set_note - scrie frecventa corespunzatoare pentru buzzer (am incercat multe frecvente si toate se aud destul de prost, asa ca am pus unele random pana la urma)
  • rutina de tratare a intreruperii in care verific ce buton a fost apasat, daca a fost apasat corect se apeleaza set_pwm si set_note (daca nu resetez tot si se seteaza flag-ul is_wrong pe 1), si daca nu a fost apasat apelez unset_pwm
  • main - bucla principala in care apelez next_sequence si redau secventa curenta; cat timp se reda secventa de led-uri sunt dezactivate intreruperile asa ca apasarea pe butoane nu va influenta redarea secventei

Rezultate Obţinute

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!

Concluzii

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.

Download

Jurnal

Etapa 1

Placa rezultată în urma etapei 1:

Componente

Etapa 2

Update 1

Până acum am cumpărat componentele. Urmează lipitul și programarea.

Update 2

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ă.

Lipit

Update 3

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).

Bibliografie/Resurse

Resurse Hardware

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

Resurse Software

Simon Game

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).

pm/prj2013/rdobre/classic-simon.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