LCD Piano
Autor
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.
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), 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
Hardware Design
Listă de piese
Arduino Uno
Breadboard
Cablu USB
Fire de legatura
LCD 1602 cu modul I2C
10 butoane
Buzzer
Schemă electrică
Software Design
Buzzer-ul cred că are mici probleme. I-am dat să repete aceeași notă încontinuu, iar cateodată sunetul diferă.
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:
SAU
SAU
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
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
start_recording - funcție ce începe memorarea secvenței de clape apăsate
save_song - funcție ce salvează în EEPROM lungimea melodiei și melodia în sine
save_note - funcție ce salvează în buffer-ul intern al programului ultima clapă apăsata, iar dacă s-a atins lungimea maximă a cântecului, melodia este salvată în EEPROM (cu ajutorul funcției anterioare), înregistrarea melodiei este oprită și modul pianului este schimbat
read_buttons_state - funcție ce citește starea butoanelor (LOW == buton apăsat)
compute_buttons_state - funcția ce se ocupă de acțiunile ce trebuie făcute atunci când se apasă un anumit buton
setup - funcția ce inițializează interfața serială, inițializează pin-urile aferente butoanelor, încarcă melodia din EEPROM în buffer-ul intern programului și inițializează lcd-ul
loop - funcția principală în care se citește starea butoanelor, se execută acțiunile aferente apăsării anumitor butoane și se actualizează display-ul în cazul unei modificări
Rezultate Obţinute
Bibliografie/Resurse