Cu ajutorul unui ecran LCD I2C, interfața este elegantă și informativă, oferind utilizatorului informații esențiale despre melodia care rulează în prezent, stadiul de redare/pauză și nivelul volumului. Astfel, fiecare melodie devine o experiență vizuală și auditivă de neuitat.
Modulul SD card servește ca un depozit eficient pentru playlist-uri și melodii, oferind astfel o gamă vastă de opțiuni muzicale la îndemână. Cu ajutorul unui potențiometru, utilizatorul poate ajusta volumul melodiilor pentru a obține exact nivelul dorit de imersiune și calitate sonoră.
Controlul melodiilor este intuitiv și ușor de utilizat, datorită celor patru butoane dedicate: “previous” pentru melodia anterioară, “pause” pentru a întrerupe temporar redarea, “start” pentru a relua redarea și “next” pentru a trece la următoarea melodie. Această interfață simplă și ergonomică adaugă un plus de confort și eficiență în experiența de auditie.
Prin această implementare minuțioasă și profesională, am creat nu doar un simplu MP3 player, ci o piesă de artă tehnologică care îmbină perfect utilitatea și inovația într-un dispozitiv compact și elegant. Este o demonstrație a abilităților noastre tehnice și a dedicării noastre pentru a aduce inovația în lumea muzicii digitale.
LISTA DE PIESE:
In prima faza am construit ceva de testare, din cauza ca am avut si o problema cu LCD-ul si imi doream mult sa fac ceva cat mai rapid si functional asa ca am facut un simplu AudioPlayer, pana am ajuns la forma finala:
Motivarea alegerii bibliotecilor folosite in cadrul proiectului:
Explicatii legate de scheletul proiectului si interactiunea dintre functionalitati:
Scheletul proiectului: 1.Setup:
2.Loop:
Interactiunea dintre functionalitati:
Codul final:
#include <SoftwareSerial.h> #include <DFRobotDFPlayerMini.h> #include <LiquidCrystal_I2C.h>
#define TX 2 #define RX 3 SoftwareSerial mySoftwareSerial(RX, TX);
DFRobotDFPlayerMini myMp3;
LiquidCrystal_I2C myLcd(0x27, 16, 2);
const int previousButtonPin = 2; const int pauseButtonPin = 3; const int startButtonPin = 4; const int nextButtonPin = 5;
volatile bool previousButtonPressed = false; volatile bool pauseButtonPressed = false; volatile bool startButtonPressed = false; volatile bool nextButtonPressed = false;
void setup() {
Serial.begin(9600); mySoftwareSerial.begin(9600);
myLcd.init(); myLcd.backlight();
pinMode(previousButtonPin, INPUT_PULLUP); pinMode(pauseButtonPin, INPUT_PULLUP); pinMode(startButtonPin, INPUT_PULLUP); pinMode(nextButtonPin, INPUT_PULLUP);
EICRA |= (1 << ISC01) | (1 << ISC00); EICRA |= (1 << ISC11) | (1 << ISC10); EIMSK |= (1 << INT0); EIMSK |= (1 << INT1);
PCICR |= (1 << PCIE2); PCMSK2 |= (1 << PCINT20); PCMSK2 |= (1 << PCINT21);
myLcd.setCursor(0, 0); myLcd.print("TRACK"); myLcd.setCursor(10, 0); myLcd.print("PLAY "); myLcd.setCursor(0, 1); myLcd.print("VOLUME"); if (myMp3.begin(mySoftwareSerial)) { myMp3.play(); myMp3.enableLoopAll(); } else { Serial.println("Connecting to DFPlayer Mini failed!"); } sei();
}
void loop() {
if (previousButtonPressed) { previousButtonPressed = false; myMp3.previous(); TrackNumberClear(); } if (pauseButtonPressed) { pauseButtonPressed = false; myMp3.pause(); myLcd.setCursor(10, 0); myLcd.print("PAUSE"); } if (startButtonPressed) { startButtonPressed = false; myMp3.start(); myLcd.setCursor(10, 0); myLcd.print("PLAY "); } if (nextButtonPressed) { nextButtonPressed = false; myMp3.next(); TrackNumberClear(); }
myMp3.volume(map(analogRead(A0), 0, 1023, 0, 30));
myLcd.setCursor(6, 0); myLcd.print(myMp3.readCurrentFileNumber()); myLcd.setCursor(7, 1); if (myMp3.readVolume() < 10) myLcd.print(String("0") + myMp3.readVolume()); else myLcd.print(myMp3.readVolume());
}
void TrackNumberClear() {
delay(500); myLcd.setCursor(6, 0); myLcd.print(" ");
}
ISR(INT0_vect) {
previousButtonPressed = true;
}
ISR(INT1_vect) {
pauseButtonPressed = true;
}
ISR(PCINT2_vect) {
if (digitalRead(startButtonPin) == LOW) { startButtonPressed = true; } if (digitalRead(nextButtonPin) == LOW) { nextButtonPressed = true; }
}