Arduino Mp3 Player / Timer: 3 pasos

Arduino Mp3 Player / Timer: 3 pasos

Tabla de contenido:

Anonim

Es un reproductor de MP3 Arduino estándar con una función de temporizador, porque ¿por qué no? Aquí hay un video de mí demoing el producto terminado:

Suministros:

Paso 1: Materiales

- Un Arduino Uno - Un módulo reproductor de MP3 DF

- Un protector de teclado LCD - Muchos cables (también utilicé algunos encabezados de hombre a mujer) - Una placa para empotrar o dos (según cómo se acerque al cableado - Un potenciómetro - Resistencia de 10k (para mejorar la calidad de audio) - Altavoces que pueden ser conectado al módulo a través de la placa de pruebas (utilicé algunos altavoces viejos, es por eso que usé una segunda resistencia) - Una tarjeta micro SD con archivos mp3 en ellaVista previa completa

Paso 2: Cableado

Los pines digitales 4 - 10 se conectan a la pantalla LCD junto con todos los conectores GND, analógicos, de alimentación, etc. en el otro extremo de la pantalla.

Pines digitales 3 (en el video es 10, pero ese pin está siendo usado por la pantalla LCD, por lo tanto, use 3 en su lugar) y 11 vaya al módulo Mp3.

Utilicé los pines Analog 5, Power y GND en la pantalla LCD para el potenciómetro.

Mire el siguiente video para ver cómo conectar el módulo Mp3:

Paso 3: Código

// código mp3:

// comandos del módulo mp3:

// código lcd:
// código del potenciómetro:
#include #include "SoftwareSerial.h" SoftwareSerial mySerial (11, 3); // pines que está utilizando arduino para hablar con el módulo mp3 # define Start_Byte 0x7E # define Version_Byte 0xFF # define Command_Length 0x06 # define End_Byte 0xEF # define Acknowledge 0x00 // Error Checking
# definir ACTIVADO BAJO
boolean isPlaying = false; // usado para la pegue y reanudar int x = 0; // lcd buttons int volume = 0; // usado para ajustar el volumen int sensorValue; // almacena potenciómetro leyendo int num = 0; int pausado = 0; // usado para detener el curriculum vitae visuals int count = 0; int count2 = 0; // timer char high = '-'; // defualt visuals char low = '_'; // defualt visuals int visual = 0; // configuración visual (puntos = 1 o guiones = 0) int minutos = -1; int segundos = 0; temporizador int = 0; // el temporizador no está activado int setting = 0;
// inicialice la biblioteca con los números de los pines de interfaz LiquidCrystal lcd (8, 9, 4, 5, 6, 7);
int sensorPin = 1; // El potenciómetro está conectado a // pin analógico 1
configuración vacía () {
// configurar el número de columnas y filas de la pantalla LCD: lcd.begin (16, 2); // Imprimir un mensaje en la pantalla LCD. lcd.print ("reproductor de mp3");
mySerial.begin (9600); // comienza la comunicación en serie con el módulo de retardo (1000); playFirst (); // reproduce la primera canción en la tarjeta sdPlaying = true;
}
bucle de vacío () {
sensorValue = analogRead (sensorPin); // toma el valor del sensor // coloca el cursor en la columna 0, línea 1 // (nota: la línea 1 es la segunda fila, ya que el conteo comienza con 0): lcd.setCursor (0, 1); x = analogRead (0); // visualizador de botones lcd (); // visualizador de lauches
if (timer == 0) {if (setting = 0) {minutes = -1; segundos = 0; cuenta2 = 0; }}
si no (temporizador == 1) {si (minutos> -1) {si (cuenta2 == 2) {segundos - = 1; cuenta2 = 0; } count2 + = 1;
lcd.clear (); lcd.print ("Time:"); lcd.print (minutos); lcd.print ("min"); lcd.print (segundos); lcd.print ("sec");
if (minutes == 0) {if (seconds == 0) {timer = 0; execute_CMD (0x0E, 0, 1); // pausa la reproducción isPlaying = false; pausado = 1; lcd.clear (); lcd.print ("Time's up"); retraso (1000); lcd.clear (); lcd.print ("Hit resume, to.."); retraso (1200); lcd.clear (); lcd.print ("reanudar reproducción!");
} }
si (segundos == 0) {minutos - = 1; segundos = 59; }}
}
interruptor (sensorValue / 100) {// caso de control de volumen del potientiómetro (1): volumen = 3; setVolume (); descanso; caso (2): volumen = 6; setVolume (); descanso; caso (3): volumen = 9; setVolume (); descanso; caso (4): volumen = 12; setVolume (); descanso; caso (5): volumen = 15; setVolume (); descanso; caso (6): volumen = 18; setVolume (); descanso; caso (7): volumen = 21; setVolume (); descanso; caso (8): volumen = 24; setVolume (); descanso; caso (9): volumen = 27; setVolume (); descanso; caso (10): volumen = 30; setVolume (); descanso; }
if (x <60) {// botón derecho del lcd
if (isPlaying) // reproduce la siguiente canción {playNext (); }
if (visual == 0) {// cambia la configuración visual high = ':'; // cambia de guiones a puntos bajos = '.'; visual = 1; }
else {alto = '-'; // cambia de nuevo a guiones bajos = '_'; visual = 0; }
if (isPlaying == true) {lcd.clear (); lcd.print ("playing next"); }
else if (isPlaying == false) {lcd.clear (); lcd.print ("Hit Resume"); }}
de lo contrario, si (x <200) {// hasta el botón lcd
lcd.clear (); lcd.print ("Time:"); lcd.print (minutos + 1); minutos + = 1; ajuste = 1;
}
otra cosa si (x <400) {// abajo temporizador del botón lcd = 1; }
de lo contrario si (x <600) {// botón izquierdo del lcd
if (isPlaying) // pause / resume {pause (); isPlaying = false; // cambia de ture a false si está en pausa lcd.clear (); lcd.print ("paused"); si (segundos> 0) {segundos - = 1; retraso (1000); }
si no (minutos> 0) {minutos - = 1; segundos = 59; retraso (1000); }} else else {isPlaying = true; // vuelve a true si se reanuda play (); lcd.clear (); lcd.print ("jugando"); si (segundos> 0) {segundos - = 1; retraso (1000); }
si no (minutos> 0) {minutos - = 1; segundos = 59; retraso (1000); }}}
de lo contrario, si (x <800) {// selecciona el botón lcd
if (isPlaying) // reproduce la canción anterior {playPrevious (); }
if (visual == 0) {// cambia la configuración visual high = ':'; // cambia de guiones a puntos bajos = '.'; visual = 1; }
else {alto = '-'; // cambia de nuevo a guiones bajos = '_'; visual = 0; }
if (isPlaying == true) {lcd.clear (); lcd.print ("jugando anterior"); si (segundos> 0) {segundos - = 1; retraso (1000); }
si no (minutos> 0) {minutos - = 1; segundos = 59; retraso (1000); }}
else if (isPlaying == false) {lcd.clear (); lcd.print ("Hit Resume"); si (segundos> 0) {retardo (1000); segundos - = 1; }
else if (minutes> 0) {delay (1000); minutos - = 1; segundos = 59; }}}
retraso (200); }
void playFirst () // reproduce la primera canción en la tarjeta sd {execute_CMD (0x3F, 0, 0); // envía parámetros de inicialización al módulo de retardo (250); setVolume (); // establece el retraso de volumen (250); execute_CMD (0x0f, 0, 1); // selecciona la carpeta execute_CMD (0x08, 0, 1); // comienza la reproducción (repetir lista de reproducción)}
pausa de vacío () {pausado = 1; // detiene los elementos visuales execute_CMD (0x0E, 0, 0); // pausa la demora musical (250); }
void play () {paused = 0; // reanudar visuales execute_CMD (0x0D, 0, 1); // reanuda el retraso de la música (250); }
void playNext () {execute_CMD (0x01, 0, 1); // reproduce el siguiente retraso de la canción (250); }
void playPrevious () {execute_CMD (0x02, 0, 1); // reproduce el retraso de la canción anterior (250); }
void setVolume () {execute_CMD (0x06, 0, volume); // Establecer el retardo del volumen (0x00 ~ 0x30) (250); }
visualizador de huecos () {// imágenes para (int i = 0; i <17; i ++) {// muestra el símbolo de caracteres de 16 caracteres; nivel int = aleatorio (1, 6); // escoge un número entre 1 y 6
si (en pausa == 1) {// detiene los elementos visuales si el símbolo en pausa = bajo; }
de lo contrario, si (nivel <4) {// imprime un alto o bajo según el número elegido símbolo = bajo; }
else {symbol = high; }
lcd.print (símbolo); // imprime en pantalla el retraso (i / 3 + 5); // retrasos basados ​​en el valor de i}}
void execute_CMD (byte CMD, byte Par1, byte Par2) // Ejecute el comando y los parámetros {// Calcule la suma de verificación (2 bytes) palabra checksum = - (Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2); // Construye el byte de línea de comando Línea de comando 10 = {Start_Byte, Version_Byte, Command_Length, CMD, Reconocimiento, Par1, Par2, highByte (checksum), lowByte (checksum), End_Byte}; // Enviar la línea de comando al módulo para (byte k = 0; k <10; k ++) {mySerial.write (Command_line k); }}