// Projeto: Caixa de música
// Autor: André Luis Silveira
// Data: 05/11/2021
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
int MUSICA = 0;
int VOLUME = 20;
int PINO_VEL = A0; // Pinos controle velocidade do motor
int PINO_BOTAO1 = 2; // Pino Botão toca musica
int PINO_BOTAO2 = 3; // Pino Botão aumenta volume
int PINO_BOTAO3 = 4; // Pino Botão diminui volume
int LED_RED = 7; // Pino Led vermelho
int LED_GREEN = 8; // Pino Led Verde
int LED_BLUE = 9; // Pino Led Azul
// ------ Declara objetos para DFPlayerMini
SoftwareSerial mySoftwareSerial(10, 11); // Pinos RX, TX de comunicação serial
DFRobotDFPlayerMini myDFPlayer;
void setup() {
mySoftwareSerial.begin(9600); // Comunicação serial com o modulo DFPlayer
Serial.begin(115200); // Inicializa o display serial do IDE Arduino
pinMode(PINO_BOTAO1,INPUT_PULLUP);
pinMode(PINO_BOTAO2,INPUT_PULLUP); pinMode(PINO_BOTAO3,INPUT_PULLUP); pinMode(PINO_VEL,OUTPUT); pinMode(LED_RED, OUTPUT); pinMode(LED_BLUE, OUTPUT); pinMode(LED_GREEN, OUTPUT);
// ------ Testa se DFPlayer foi inicializado corretamente
Serial.println(F("DFRobot DFPlayer Mini"));
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println("==>> Nao inicializado!");
while(true){
delay(0);
Serial.print(".");
}
}
Serial.println("==>> Inicializado");
myDFPlayer.setTimeOut(500); // Timeout serial 500ms
myDFPlayer.volume(VOLUME); // Volume
myDFPlayer.EQ(2); // Equalizacao normal
}
void loop() {
if (digitalRead(PINO_BOTAO2) == LOW) {
VolumeAumenta();
} else {
if (digitalRead(PINO_BOTAO3) == LOW) {
VolumeDiminui();
}
}
// --- Controla botão que aciona música (Apertos)
if (digitalRead(PINO_BOTAO1) == LOW) {
MUSICA = MUSICA + 1;
Serial.print("Musica:");
Serial.println(MUSICA);
// ----- Testa sequencia de acionamento do botão (Apertos)
// 1 = Musica1, 2 = Musica2, 3 = Musica3 e 4 = Desliga
// 1 = Led RED, 2 = LED BLUE, 3 = LED GREEN e 4 = LED APAGADO
switch (MUSICA) { case 1: // Apertou 1 vez ligaled(255, 0, 0, MUSICA); analogWrite(PINO_VEL,255); // 100% ciclo de trabalho break; case 2: // Apertou 2 vez ligaled(0, 255, 0, MUSICA); analogWrite(PINO_VEL,178); // 75% ciclo de trabalho break; case 3: // Apertou 3 vez ligaled(0, 0, 255, MUSICA); analogWrite(PINO_VEL,140); // 50% ciclo de trabalho break; default: // Apertou 4 vez MUSICA = 0; ligaled(0, 0, 0, MUSICA); analogWrite(PINO_VEL,0); // desliga Motor break; }
}
delay(200);
}
// ------ Rotina controla cores do Led RGB, Velocidade do motor e Música
int ligaled(int r, int g, int b, int mus) {
analogWrite(LED_RED, r);
analogWrite(LED_GREEN, g);
analogWrite(LED_BLUE, b);
if (mus > 0) {
myDFPlayer.play(mus);
Serial.println("PLAYER");
} else{
myDFPlayer.stop();
Serial.println("STOP");
}
delay(200);
}
// ------ Rotina aumenta volume
void VolumeAumenta() {
if (VOLUME < 30) {
VOLUME=VOLUME+2;
myDFPlayer.volume(VOLUME);
delay(200);
Serial.println(VOLUME);
}
}
// ------ Rotina diminui volume
void VolumeDiminui() {
if (VOLUME > 0){
VOLUME=VOLUME-2;
myDFPlayer.volume(VOLUME);
delay(200);
Serial.println(VOLUME);
}
} |