Ciao ragazzi, sono giorni su giorni che non ne vengo a capo. sto usando un DFminiplayer (per chi non sa cosa è, sarebbe un modulino contenente una schedina in cui puoi mettere file audio che cosi arduino potrà comandarle e farle riprodure) ovvero il progetto è semplice: sto creando una statuina e ci ho messo 5 pulsanti, ogni pulsante semplicemente, quando viene premuto, dovrà far riprodurre ESATTAMENTE e PRECISAMENTE un file audio, ogni pulsante è assocciato ad un preciso file audio, cosa che quando lo premi, la prima volta lo farà senza problemi (cosa che con altri pulsanti no, ovvero alcuni si e altri no alla prima prova), ma poi quando lo ripremi, riproduce un altro file audio che sarebbe dedicato ad un altro pulsante. oggi ho testato un nuovo sketch con la sola aggiunta del fatto che ad ogni pulsante ho messo il fatto che dovra inviare il segnale SOLO quando esso sarà premuto per piu di 200ms per evitare fali segnali dovuti al pulsante. allego lo sketch
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
long t = 0;
long debounce_delay = 200;
int pulsante1 = 13;
int pulsante2 = 12;
int pulsante3 = 11;
int pulsante4 = 10;
int pulsante5 = 9;
int nfiles;
SoftwareSerial gg(0, 1); //nome player ed i
DFRobotDFPlayerMini mp3;
void setup() {
Serial.begin(9600); //velocità di comunicazione
gg.begin(9600); //velocità di comunicazione
nfiles = mp3.readFileCounts(); // legge/conta quanti mp3 ci sono
mp3.volume(20); // volume del audio
mp3.play(5); // riproduci il primo file
if (!mp3.begin(gg)) { //controllo se ci sono errori
Serial.println("errore mp3");
for (;;);
}
pinMode(pulsante1, INPUT);
pinMode(pulsante2, INPUT);
pinMode(pulsante3, INPUT);
pinMode(pulsante4, INPUT);
pinMode(pulsante5, INPUT);
Serial.println(nfiles);
delay(200);
}
void loop() {
if (digitalRead(pulsante1) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(0); // riproduci il primo file
}
}
if (digitalRead(pulsante2) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(1); // riproduci il primo file
}
}
if (digitalRead(pulsante3) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(2); // riproduci il primo file
}
}
if (digitalRead(pulsante4) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(3); // riproduci il primo file
}
}
if (digitalRead(pulsante5) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(4); // riproduci il primo file
}
}
}
arduino uno, all'inizio andava con lo sketch in cui non c'era il discorso dei 200ms per pulsante, ma anche se ritorno a quello o creo un semplice sketch dove dico solo, appena ti accendi avvia mp3 Nr°1 non fa nulla, ho provato sia con arduino Uno che Nano ma nulla, ho testato anche con resistenza da 10k, 1k, 2k, e 100ohm ma nulla di nulla, se è tanto, becco ogni tanto un piccolo bzzz venire dalla cassa
, i collegamnti ho usato il vcc per lui i 3,3v di arduino, il gnd va bhe gnd, il rx e tx e i 2 fili gia amplificati per la cassa
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
long t = 0;
long debounce_delay = 200;
int pulsante1 = 13;
int pulsante2 = 12;
int pulsante3 = 11;
int pulsante4 = 10;
int pulsante5 = 9;
int nfiles;
SoftwareSerial gg(6, 5); //nome player ed i
DFRobotDFPlayerMini mp3;
void setup() {
Serial.begin(9600); //velocità di comunicazione
gg.begin(9600); //velocità di comunicazione
nfiles = mp3.readFileCounts(); // legge/conta quanti mp3 ci sono
mp3.volume(20); // volume del audio
mp3.play(5); // riproduci il primo file
if (!mp3.begin(gg)) { //controllo se ci sono errori
Serial.println("errore mp3");
for (;;);
}
pinMode(pulsante1, INPUT);
pinMode(pulsante2, INPUT);
pinMode(pulsante3, INPUT);
pinMode(pulsante4, INPUT);
pinMode(pulsante5, INPUT);
Serial.println(nfiles);
delay(200);
}
void loop() {
if (digitalRead(pulsante1) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(0); // riproduci il primo file
}
}
if (digitalRead(pulsante2) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(1); // riproduci il primo file
}
}
if (digitalRead(pulsante3) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(2); // riproduci il primo file
}
}
if (digitalRead(pulsante4) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(3); // riproduci il primo file
}
}
if (digitalRead(pulsante5) == HIGH) {
if ( (millis() - t) > debounce_delay) {
t = millis();
mp3.play(4); // riproduci il primo file
}
}
}
Adesso starei usando questo sketch che sarebbe poi quello che dovrei usare per il progetto, con uqesto sketch all'inizio si sente un continuo bzzz per 4 o 5 volte poi silenzio, scheda arduino alimentata non vedo errori, modulo DF sempre spento (sempre alimentato esternamente)
L'alimentazione esterna è obbligatoria ... hai idea che c'è attaccato un altoparlante da 3W ... quell'affare, al massimo del volume, arriva ad assorbire anche 1A !
... di idiozie è piena la rete!
dai retta, fai una piccola applicazione di prova in cui lo alimenti, lo colleghi, e provi semplicemente a dirgli di riprodurre un brano.
SOLO DOPO che ti fuziona, prendi la stessa applicazione e cominci ad aggiungerci prima la lettura dei pulsati con il debounce (e fai scrivere su porta seriale il pulsante premuto, così vedi che funziona).
Una volta che tutto è a posto aggiungi la parte che, identificato il pulsate fa partire il brano voluto.
200ms, comunque sto provando anche senza questo impkemento del debounce e non cambia nulla il semplice sketch dove gli dico nel void loop *.play(); non funziona, continua a darmi l'errore di inserire la scheda sd cosa che c'è gia, provato anche a formattarla, a cambiare il nome svariate volt dei file audio ma nulla
In stand-by ... sai cosa vuol dire? SENZA fare nulla ... appena comincia a riprodurre l'assorbimento sale e di parecchio.
Comuqne, come ti ho detto, comincia a vedere una cosa per volta e POI metti tutto assieme ... perché così non capisci dove è il problema!
Guglielmo
P.S.: Con quei moduli (versione flash e non SD) ci ho fatto un prodotto che è stato pubblicato si Elettronica In e ... t'assicuro che quando riproduceva i files mp3, se il volume era poco poco alto, NON ce la faceva ad alimentarlo neanche la USB che da 500 mA!
ho capito, lo so cosa vuol dire in stand by, e ripeto, lo sto alimentando esternamente e non vedo piu di 100mA ma comunque passando oltre questo punto, tutto il resto che ho provato non sta migliorando il funzionamento, continua a non fare nulla
I have not yet fully studied your code but after building several quite complex projects using this module I'm confident the issue is not related to current consumption of your (presumably small, say <= 3W) speaker.
Take a look at a couple of the demo sketches I wrote recently to see if they help. Not sure if there will be a language difficulty, but I suggest you study the whole thread for context before trying the code.
Possible translation of above:
Non ho ancora studiato a fondo il tuo codice, ma dopo aver realizzato diversi progetti piuttosto complessi utilizzando questo modulo, sono sicuro che il problema non sia correlato al consumo attuale del tuo altoparlante (presumibilmente piccolo, diciamo <= 3W).
Dai un'occhiata ad un paio di schizzi dimostrativi che ho scritto di recente per vedere se sono d'aiuto. Non sono sicuro se ci saranno difficoltà linguistiche, ma ti suggerisco di studiare l'intero thread per contestualizzarlo prima di provare il codice.