Buongiorno a tutti, sto sviluppando un piccolo progetto con il df mini player e ho un problema che non riesco a risolvere, dopo vari tentativi, con grande amarezza (perché avrei voluto riuscirci da solo) vi chiedo aiuto a voi.
Vi allego la sceda dei collegamenti
e a seguire il codice che ho scritto
#include <Arduino.h>
//link codice encoder https://www.lombardoandrea.com/utilizzare-un-encoder-rotativo-con-arduino/
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
#include <LiquidCrystal_I2C.h>// dichiarazione libreria lcd
LiquidCrystal_I2C lcd(0x27, 20, 4);
//bottoni
#define comandi_play 7
#define comandi_pause 9
#define comandi_fadein 6
#define comandi_fadeout 5
//encoder
//Encoder traccia
const unsigned int Enc_trak_cont_varia = 3;//clk
const unsigned int Enc_trak_dir = 4;//dt
int Enc_trak_vari_stato;
int Enc_trak_prec_dir;
int trak;
//Encoder fadein
const unsigned int Enc_tempo_fade_cont_varia = 2;//clk
const unsigned int Enc_tempo_fade_dir = 11;//dt
int Enc_tempo_fade_vari_stato;
int Enc_tempo_fade_prec_dir;
int tempo_fade;
///////////////////////////////
//variabili
int volume = 0; //indica il volume
boolean play_on = false;//Falso
////////////////////////////////////////////////
SoftwareSerial mySoftwareSerial(12,13); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
void setup(){
//display
lcd.init();
lcd.backlight();
//bottoni
pinMode(comandi_play, INPUT);
pinMode(comandi_pause, INPUT);
pinMode(comandi_fadein, INPUT);
pinMode(comandi_fadeout, INPUT);
//////////////////////////////////////////
//encoder per selezionare traccia
pinMode(Enc_trak_cont_varia, INPUT);
pinMode(Enc_trak_dir, INPUT);
//encoder per fade in
pinMode(Enc_tempo_fade_cont_varia, INPUT);
pinMode(Enc_tempo_fade_dir, INPUT);
//////////////////////////////////////////
// Esegui prima lettura dei valori sui pin
//traccia
Enc_trak_vari_stato = digitalRead(Enc_trak_cont_varia);
Enc_trak_prec_dir = digitalRead(Enc_trak_dir);
//fade in
Enc_tempo_fade_vari_stato = digitalRead(Enc_tempo_fade_cont_varia);
Enc_tempo_fade_prec_dir = digitalRead(Enc_tempo_fade_dir);
//////////////////////////////////
//Inizializzo variabile trak
trak = 0;
tempo_fade = 0;
//--------------------------------------------
mySoftwareSerial.begin(9600);
Serial.begin(115200);
delay(2000);
if (!myDFPlayer.begin(mySoftwareSerial)) { //Usa softwareSerial per comunicare con mp3.
lcd.setCursor(0,0);
lcd.print(F("ATTENZIONE"));
lcd.setCursor(0,1);
lcd.print(F("1.Controllare la connessione"));
lcd.setCursor(0,2);
lcd.print(F("2.Inserire la SD"));
while(true);
}
lcd.print(("DFPlayer Mini online."));//se il df si è inizializzato
delay(1000);lcd.clear();
myDFPlayer.setTimeOut(500); //Impostare il timeout della comunicazione seriale a 500 ms
myDFPlayer.volume(30); //Imposta il valore del volume (0~30).
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL); //imposta il tipo di suono
myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);//Imposta il dispositivo che usiamo SD come predefinito
// ---- Leggi informazioni ----
lcd.print(myDFPlayer.readState()); //leggere lo stato mp3
delay(1000);lcd.clear();
lcd.print(myDFPlayer.readVolume()); //leggere il volume corrente
delay(1000);lcd.clear();
lcd.print(myDFPlayer.readEQ()); //leggere l'impostazione EQ
delay(1000);lcd.clear();
lcd.print(myDFPlayer.readFileCounts()); //leggere tutti i conteggi dei file nella scheda SD
delay(1000);lcd.clear();
lcd.print(myDFPlayer.readCurrentFileNumber()); //legge il numero del file in riproduzione
delay(1000);lcd.clear();
lcd.print(myDFPlayer.readFileCountsInFolder(3)); //leggere i conteggi dei file nella cartella SD: / 03
delay(1000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("N traccia= ");
lcd.print(trak);
lcd.setCursor(0,1);
lcd.print("T fade= ");
lcd.print(tempo_fade);
}
void loop(){
// Leggi valori dai pin dell'encoder
//traccia
int Enc_trak_stato_corrente = digitalRead(Enc_trak_cont_varia);
int Enc_trak_dir_corrente = digitalRead(Enc_trak_dir);
//fadein
int Enc_tempo_fade_stato_corrente = digitalRead(Enc_tempo_fade_cont_varia);
int Enc_tempo_fade_dir_corrente = digitalRead(Enc_tempo_fade_dir);
// Se la lettura corrente è diversa dall'ultima memorizzata
//traccia
if (Enc_trak_stato_corrente != Enc_trak_vari_stato) {
//Se il valore di dt è uguale al valore corrente di clk
if (Enc_trak_dir_corrente == Enc_trak_stato_corrente) {
trak --;
}
else {
trak ++;
}
//Aggiorna valori
Enc_trak_vari_stato = Enc_trak_stato_corrente;
Enc_trak_prec_dir = Enc_trak_dir_corrente;
}
//fade in
if (Enc_tempo_fade_stato_corrente != Enc_tempo_fade_vari_stato) {
//Se il valore di dt è uguale al valore corrente di clk
if (Enc_tempo_fade_dir_corrente == Enc_tempo_fade_stato_corrente) {
tempo_fade --;
if (tempo_fade < 10){lcd.setCursor(9,1);lcd.print(" ");}
lcd.setCursor(8,1);
lcd.print(tempo_fade);
}
else {
tempo_fade ++;
if (tempo_fade < 10){lcd.setCursor(9,1);lcd.print(" ");}
lcd.setCursor(8,1);
lcd.print(tempo_fade);
}
//Aggiorna valori
Enc_tempo_fade_vari_stato = Enc_tempo_fade_stato_corrente;
Enc_tempo_fade_prec_dir = Enc_tempo_fade_dir_corrente;
}
////////////////////////////////////////////
//se premo il tasto play
if (digitalRead(comandi_play) == HIGH) {
myDFPlayer.volume(30); //Imposta il valore del volume (0~30).
myDFPlayer.play(trak);//metti in play tra parentesi il numero della tyraccia
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print("Play");
}
//se premo il tasto pause
if (digitalRead(comandi_pause) == HIGH) {
if (play_on == false){;
play_on =true;
myDFPlayer.pause();//metti in pausa
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print("Pause");
}
else {
play_on=false;
myDFPlayer.volume(30); //Imposta il valore del volume (0~30).
myDFPlayer.start();//riprendi la riproduzione
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print("Play");
}
}
delay(500);
//se premo il testo fade in
if (digitalRead(comandi_fadein) == HIGH) {
int fade = (30/tempo_fade);
myDFPlayer.volume(0);
myDFPlayer.play(trak);
for (int i = 0; i < 30; i++){
myDFPlayer.volume(i);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print("Fadein in corso ");
lcd.print(i);
delay (fade);
}
lcd.setCursor(0,2);
lcd.print(" ");
}
delay(500);
//se premo il testo fade out
if (digitalRead(comandi_fadeout) == HIGH) {
int fade = (30/tempo_fade);
myDFPlayer.volume(30);
myDFPlayer.play(trak);
for (int i = 30; i < 0; i--){
myDFPlayer.volume(i);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print("Fadeout in corso ");
lcd.print(i);
delay (fade);
if (i == 0) {
myDFPlayer.stop();
lcd.setCursor(0,2);
lcd.print(" ");
lcd.setCursor(0,2);
lcd.print("Arresto traccia");
delay(2000);
}
}
}
lcd.setCursor(0,2);
lcd.print(" ");
delay(500);
}
Il risultato finale è che sembra che il df mini player non si inizializza, e sul display appare la scritta di controllare la connessione e inserire la SD( che ovviamente è inserita) o controllato sul web i possibili collegamenti, ho provato a fare alcune modifiche, ma niente il risultato non cambia.
Dove sbaglio?
Grazie a tutti quelli che mi aiuteranno ... saluti