dfplayer

ciao a tutti. aiutatemi guardate questo schema.( giù vi posto il codice ) vorrei che il tasto play funzionasse solo se rimane premuto. intendo che mi riproduce il suono che ho messo dentro il dfpalyer quando premo il tasto e se lo mollo smette di riprodurre il suono. mi date qualche dritta??

#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]

# define ACTIVATED LOW

int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
boolean isPlaying = false;



void setup () {

pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);

mySerial.begin (9600);
delay(1000);
playFirst();
isPlaying = true;


}



void loop () { 

if (digitalRead(buttonPause) == ACTIVATED)
{
if(isPlaying)
{
 pause();
 isPlaying = false;
}else
{
 isPlaying = true;
 play();
}
}


if (digitalRead(buttonNext) == ACTIVATED)
{
if(isPlaying)
{
 playNext();
}
}

if (digitalRead(buttonPrevious) == ACTIVATED)
{
if(isPlaying)
{
 playPrevious();
}
}
}

void playFirst()
{
execute_CMD(0x3F, 0, 0);
delay(500);
setVolume(20);
delay(500);
execute_CMD(0x11,0,1); 
delay(500);
}

void pause()
{
execute_CMD(0x0E,0,0);
delay(500);
}

void play()
{
execute_CMD(0x0D,0,1); 
delay(500);
}

void playNext()
{
execute_CMD(0x01,0,1);
delay(500);
}

void playPrevious()
{
execute_CMD(0x02,0,1);
delay(500);
}

void setVolume(int volume)
{
execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)
delay(2000);
}

void execute_CMD(byte CMD, byte Par1, byte Par2)
// Excecute the command and parameters
{
// Calculate the checksum (2 bytes)
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Build the command line
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
//Send the command line to the module
for (byte k=0; k<10; k++)
{
mySerial.write( Command_line[k]);
}
}

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione, poi, essendo questo il tuo primo post, ti chiedo cortesemente di presentarti QUI (spiegando bene quali conoscenze hai di elettronica e di programmazione) e di leggere con attenzione il REGOLAMENTO ...

... infine ... in conformità al suddetto regolamento, punto 7, edita (in basso a destra del post, bottone More -> Modify) il tuo post e racchiudi il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone fatto così: </>, tutto a sinistra). Grazie.

Guglielmo

ciao si scusami, ora ho corretto,non avevo capito. puoi darmi qualche dritta?

Ma non ti funziona il pause 0x0E oppure ripete il 0x11 sempre il pezzo?
Nel secondo caso puoi disattivare il Repeat play col arfomento: [1:start repeat play][0:stop play]

Ciao Uwe

grazie mille per la risposta. ti spiego, in pratica il pulsante switch lo attacco alla porta di un ascensore.appena si chiudono le porte preme il tasto e lo tiene premuto sinché le porte non si riaprono. invece in questo sketch lo premi e fa play lo ripresi e fa stop, a me servirebbe che fa il suono tenendolo premuto e quando lo molli smette

risolto, grazie per il tempo. ciao!