This shows you the differences between two versions of the page.
pm:prj2021:amocanu:lcd_piano [2021/05/30 00:29] liviu.dragulin [Concluzii] |
pm:prj2021:amocanu:lcd_piano [2021/05/31 21:17] (current) liviu.dragulin [Autor] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== LCD Piano====== | ====== LCD Piano====== | ||
- | <note>[[mailto:liviu.dragulin@stud.acs.upb.ro|Drăgulin Liviu-Mihai]]</note> | + | ===== Autor ===== |
+ | <note> | ||
+ | [[mailto:liviu.dragulin@stud.acs.upb.ro|Drăgulin Liviu-Mihai]]\\ | ||
+ | 334CC | ||
+ | </note> | ||
===== Introducere ===== | ===== Introducere ===== | ||
Proiectul constă în împlementarea unui pian cu 8 clape și 2 butoane de schimbare a modului. Pianul va avea trei moduri: NORMAL, RECORD și LISTEN. | Proiectul constă în împlementarea unui pian cu 8 clape și 2 butoane de schimbare a modului. Pianul va avea trei moduri: NORMAL, RECORD și LISTEN. | ||
===== Descriere generală ===== | ===== Descriere generală ===== | ||
- | La placa Arduino vor fi conectate 10 butoane(8 reprezentând clapele pianului și 2 reprezentând butoanele ce schimbă modul în care se află pianul), la un buzzer pasiv ce va reda sunetele clapelor și la un display lcd 1602 cu modul I2C. De asemenea, melodia înregistrată va fi salvată în EEPROM, lucru care face ca melodia să rămână salvată chiar și după întreruperea alimentării. | + | La placa Arduino vor fi conectate 10 butoane (8 reprezentând clapele pianului și 2 reprezentând butoanele ce schimbă modul în care se află pianul), un buzzer pasiv ce va reda sunetele clapelor și un display lcd 1602 cu modul I2C. De asemenea, melodia înregistrată va fi salvată în EEPROM, lucru care face ca melodia să rămână salvată chiar și după întreruperea alimentării. |
==Schema bloc== | ==Schema bloc== | ||
Line 30: | Line 34: | ||
Buzzer-ul cred că are mici probleme. I-am dat să repete aceeași notă încontinuu, iar cateodată sunetul diferă. | Buzzer-ul cred că are mici probleme. I-am dat să repete aceeași notă încontinuu, iar cateodată sunetul diferă. | ||
</note> | </note> | ||
- | Cele 8 clape ale pianului sunt reprezentate de 8 butoane care sunt conectate la pinii 3-10 în modul INPUT_PULLUP. Datorită modului INPUT_PULLUP, butoanele nu au nevoie de rezistențe. Cele două butoane cu care se schimbă modurile pianului sunt conecate la pinii 11, respectiv 12 tot în modul INPUT_PULLUP. Buzzer-ul este conectat la pin-ul 2; redarea sunetului se face cu ajutorul funcției **tone**. Comunicarea cu display-ul LCD 1602 se face cu ajutorul modului I2C prin intermediul bibliotecii LiquidCrystal_I2C.h care are la rândul ei nevoie de biblioteca Wire.h. Utilizarea EEPROM-ului se realizează cu ajutorul bibliotecii EEPROM.h. | + | Cele 8 clape ale pianului sunt reprezentate de 8 butoane care sunt conectate la pinii 3-10 în modul INPUT_PULLUP. Datorită modului INPUT_PULLUP, butoanele nu au nevoie de rezistențe. Butoanele cu care se schimbă modurile pianului sunt conecate la pinii 11, respectiv 12 tot în modul INPUT_PULLUP. Buzzer-ul este conectat la pin-ul 2; redarea sunetului se face cu ajutorul funcției **tone**.\\ |
+ | Comunicarea cu display-ul LCD 1602 se face cu ajutorul modului I2C (SDA se conectează la pinul A4, iar SCL la pinul A5) prin intermediul bibliotecii LiquidCrystal_I2C.h care are la rândul ei nevoie de biblioteca Wire.h. Utilizarea EEPROM-ului se realizează cu ajutorul bibliotecii EEPROM.h. Pe prima linie a display-ului este afișat modul în care se află pianul (NORMAL, RECORD, LISTEN), iar pe a doua linie este afișat: | ||
+ | * ultima clapă apăsată | ||
+ | SAU | ||
+ | * ## - atunci când nu există tastă precedentă apăsată sau când pianul se află în modul LISTEN | ||
+ | SAU | ||
+ | * oo - atunci când înregistrarea melodiei a început în modul RECORD | ||
+ | |||
+ | Când pianul este în modul RECORD, melodia înregistrată precedent nu este ștearsă imediat, trebuie apăsată oricare clapă pentru a începe înregistrarea și ștergerea melodiei memorate înainte.\\ | ||
+ | În modul LISTEN, clapele pianului sunt dezactivate. Singurele butoane ce pot fi apăsate sunt cele de schimbare a modului în care se află pianul. | ||
+ | |||
==== Funcții implementate ==== | ==== Funcții implementate ==== | ||
- | * **lcd_change_line** - schimbă o linie a buffer-ului intern programului, în care este memorat conținutul celor două linii ale lcd-ului, în funcție de ce buton este apăsat și marcheză că liniile display-ului trebuie actualizate | + | * **lcd_change_line** - funcție ce schimbă o linie a buffer-ului intern programului, în care este memorat conținutul celor două linii ale lcd-ului, în funcție de ce buton este apăsat și marcheză că liniile display-ului trebuie actualizate |
* **play_note** - funcție ce redă sunetul clapei apăsate | * **play_note** - funcție ce redă sunetul clapei apăsate | ||
* **start_recording** - funcție ce începe memorarea secvenței de clape apăsate | * **start_recording** - funcție ce începe memorarea secvenței de clape apăsate | ||
Line 46: | Line 60: | ||
[[https://github.com/liviumdragulin/lcd_piano|GitHub]]\\ | [[https://github.com/liviumdragulin/lcd_piano|GitHub]]\\ | ||
\\ | \\ | ||
- | YouTube: **TODO** | + | [[https://drive.google.com/file/d/1JBiFXFTjniZ8-KLuL_Kb1RiKoZthYCIC/view|Video]]\\ |
</note> | </note> | ||
+ | {{:pm:prj2021:amocanu:lcd_piano_demo.jpg?600|}} | ||
===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
Line 58: | Line 73: | ||
https://github.com/arduino/ArduinoCore-avr/blob/master/libraries/EEPROM/src/EEPROM.h\\ | https://github.com/arduino/ArduinoCore-avr/blob/master/libraries/EEPROM/src/EEPROM.h\\ | ||
https://www.tinkercad.com/\\ | https://www.tinkercad.com/\\ | ||
- | {{:pm:prj2021:amocanu:lcd_piano.pdf|}} | + | {{:pm:prj2021:amocanu:lcd_piano2.pdf|}} |