questo fa quello che chiedi tu... conviene mettere molto meno come delay...
int led = 13;
int i;
bool acceso;
long oldMillis =0;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
i = digitalRead(8);
if ((i == HIGH) && (millis() - oldMillis > 3000) ){
oldMillis = millis();
//qui scambia lo stato del led: tu hai start mp3 e stop mp3
if (acceso) { //start mp3
digitalWrite(led, LOW);
acceso =false;
} else
{ //stop mp3
digitalWrite(led, HIGH);
acceso =true;
}
}
}
io invece mi trovo piuttosto bene con questa soluzione:
int led = 13;
int i;
bool acceso;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
i = digitalRead(8);
if ((i == HIGH) ){
while (i==HIGH) i = digitalRead(8);
//qui scambia lo stato del led: tu hai start mp3 e stop mp3
if (acceso) { //start mp3
digitalWrite(led, LOW);
acceso =false;
} else
{ //stop mp3
digitalWrite(led, HIGH);
acceso =true;
}
}
}
che in pratica consiste nel prendere il comando del tasto solo quando rilasci il tasto (fronte di discesa)... basta aggiungere un loop... unica cosa è che questo programma blocca tutto fintanto che non rilasci il tasto ma di solito non è un problema....provalo: dipende dal tasto che hai ma io mi ci sono sempre trovato molto bene.