Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2023:drtranca:whack_a_mole [2023/05/07 14:44]
miruna.voinea [Descriere generală]
pm:prj2023:drtranca:whack_a_mole [2023/05/29 10:23] (current)
miruna.voinea [Software Design]
Line 6: Line 6:
 ===== Introducere ===== ===== Introducere =====
  
-Proiectul are la bază faimosul joc Whack a mole: există mai găuri pe unde cârtițele pot scote capul, iar scopul ​jucătorului este de a le împiedica să iasă din ascunzătoare prin lovituri cu un ciocănel.+Proiectul are la bază faimosul joc Whack a mole: există mai multe găuri pe unde cârtițele pot scoate ​capul, iar obiectivul ​jucătorului este de a le împiedica să iasă din ascunzătoare prin lovituri cu un ciocănel.
  
   *Scopul proiectului este de a realiza un joc distractiv prin care să îmi pun în aplicare cunoștințele dobândite la PM.   *Scopul proiectului este de a realiza un joc distractiv prin care să îmi pun în aplicare cunoștințele dobândite la PM.
Line 14: Line 14:
   *Consider că acest proiect este util deoarece le oferă jucătorilor șansa de a-și testa abilitățile în timp ce se distrează.   *Consider că acest proiect este util deoarece le oferă jucătorilor șansa de a-și testa abilitățile în timp ce se distrează.
  
-<note tip> 
-Prezentarea pe scurt a proiectului vostru: 
-  * ce face 
-  * care este scopul lui 
-  * care a fost ideea de la care aţi pornit 
-  * de ce credeţi că este util pentru alţii şi pentru voi 
-</​note>​ 
 ===== Descriere generală ===== ===== Descriere generală =====
  
   *Spre deosebire de jocul tradițional,​ în loc de cârtițe vom avea led-uri, iar în loc să folosim un ciocănel, vom apăsa pe butoane.   *Spre deosebire de jocul tradițional,​ în loc de cârtițe vom avea led-uri, iar în loc să folosim un ciocănel, vom apăsa pe butoane.
   *Apariția unei cârtițe va fi semnalată de aprinderea unui led, iar pentru a câștiga puncte, jucătorul trebuie să apese butonul din dreptul led-ului respectiv.   *Apariția unei cârtițe va fi semnalată de aprinderea unui led, iar pentru a câștiga puncte, jucătorul trebuie să apese butonul din dreptul led-ului respectiv.
 +  *Intervalele la care se aprind led-urile vor fi controlate cu ajutorul unui timer.
   *Pe măsură ce jocul avansează, scorul se va modifica și va fi afișat pe un LCD.   *Pe măsură ce jocul avansează, scorul se va modifica și va fi afișat pe un LCD.
  
Line 31: Line 25:
  
  
-<note tip> 
-O schemă bloc cu toate modulele proiectului vostru, atât software cât şi hardware însoţită de o descriere a acestora precum şi a modului în care interacţionează. 
- 
-Exemplu de schemă bloc: http://​www.robs-projects.com/​mp3proj/​newplayer.html 
-</​note>​ 
  
 ===== Hardware Design ===== ===== Hardware Design =====
 +
 +Listă de piese:
 +  *Arduino Uno + Cablu
 +  *Display LCD cu interfață I2C
 +  *Butoane
 +  *Led-uri
 +  *Rezistori
 +  *Breadboard
 +  *Fire de legătură
 +
 +{{ :​pm:​prj2023:​drtranca:​schema_electrica_pm_voinea_miruna.png?​600 }}
  
 <note tip> <note tip>
Line 49: Line 49:
 ===== Software Design ===== ===== Software Design =====
  
 +Mediul de dezvoltare folosit: Arduino IDE
 +
 +Schemă electrică realizată cu Tinkercad
 +
 +Bibliotecă externă: LiquidCrystal_I2C.h
 +
 +Flow joc:
 +  * La început, jucătorul are 3 vieți.
 +  * Se aprinde unul dintre cele 4 LED-uri reprezentând cârtițele.
 +  * Jucătorul poate lovi o cârtiță apăsând pe butonul din dreptul LED-ului.
 +  * Dacă LED-ul se stinge înainte ca jucătoul să apese pe buton sau se apasă un buton greșit, jucătorul pierde o viață.
 +  * Jocul se termină atunci când numărul de vieți ajunge să fie 0.
 +
 +Am folosit timer1 pentru a controla intervalul de timp în care un LED este aprins, astfel încât atunci când timpul expiră, jucătorul să piardă o viață.
 +
 +Atunci când se apasă un buton, se declanșează o întrerupere,​ butonul fiind identificat cu ajutorul funcției checkBit. Se verifică dacă butonul corespunde ultimului LED aprins: în caz afirmativ, scorul este incrementat,​ iar în caz contrar, jucătorul pierde o viață.
 +
 +Pentru a afișa scorul și numărul de vieți rămase, se folosește LCD-ul cu modul I2C.
  
 <note tip> <note tip>
Line 59: Line 77:
  
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
 +
 +Proiectul este complet funcțional.
 +
 +{{ :​pm:​prj2023:​drtranca:​hardware_whack_a_mole.jpg?​600 }}
 +
 +
 +
 +
 +{{ :​pm:​prj2023:​drtranca:​whack_a_mole_joc.png?​600 }}
 +
 +
 +
 +
 +Link demo: https://​youtu.be/​IChtsEEhekQ
  
 <note tip> <note tip>
Line 65: Line 97:
  
 ===== Concluzii ===== ===== Concluzii =====
 +
 +Sunt foarte mulțumită de rezultatele obținute deoarece am reușit să implementez exact ce mi-am propus.
 +
 +Întregul proiect a fost o experiență plăcută: m-a ajutat să înțeleg mai bine noțiunile explicate la laborator și chiar am descoperit că proiectele cu Arduino nu sunt atât de complicate pe cât credeam.
  
 ===== Download ===== ===== Download =====
 +
 +<note tip>
 +Codul sursă:
 +{{ :​pm:​prj2023:​drtranca:​code_whack_a_mole.zip }}
 +</​note>​
  
 <note warning> <note warning>
Line 81: Line 122:
  
 ===== Bibliografie/​Resurse ===== ===== Bibliografie/​Resurse =====
 +
 +Pentru interacțiunea cu display-ul lcd, am folosit biblioteca LiquidCrystal_I2C.h preluată de pe
 +https://​www.optimusdigital.ro/​ro/​optoelectronice-lcd-uri/​2894-lcd-cu-interfata-i2c-si-backlight-albastru.html?​search_query=lcd+i2c&​results=18
 +
 +Pentru utilizarea întreruperilor:​
 +https://​forum.arduino.cc/​t/​multiple-hardware-interrupts-for-arduino-uno/​571974/​14
 +
 +Datasheet: https://​ocw.cs.pub.ro/​courses/​_media/​pm/​atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf
  
 <​note>​ <​note>​
pm/prj2023/drtranca/whack_a_mole.1683459869.txt.gz · Last modified: 2023/05/07 14:44 by miruna.voinea
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