Voy a intentar ser conciso... Estoy con un proyecto de mp3 que necesita cuatro botones, tres que al ser presionados realizan una funcion y el cuarto que cuente el tiempo que está presionado para realizar una funcion u otra... el problema es que al introducir el cuarto botón con pulse in, los demás botones no funcionan correctamente, quiero decir si a pulsein le añades el timeout 400000, el resto de los botones solo funcionan dejandoles presionados durante mas de ese tiempo...
Alguien sabe indicarme por donde van los tiros?
Hago copy paste de la parte importante del codigo por que pegarlo todo sería muy largo.
const int button4Pin = 4;
const int button5Pin = 5;
const int button14Pin = 14;
//int button3State = 0;
int button4State = 0;
int button5State = 0;
int button14State = 0;
int vol = 20;
//Declaramos valores tiempo para opcion de boton presionado bajar volumen a 0 pasar pista
int button3Pin = 3;
unsigned long time;
char count = 0;
void setup() {
//Inicializa el buttonpin como entrada
pinMode(button3Pin, INPUT);
pinMode(button4Pin, INPUT);
pinMode(button5Pin, INPUT);
pinMode(button14Pin, INPUT);
// button3State = digitalRead(button3Pin);
time = pulseIn(3,HIGH,500000); //entiendo que el numero que se indica al lado del high, es lo que espera la placa para responder... Se queda bloqueada, buscaremos solucion.
if (time >0)
{
Serial.println(time);
MP3player.stopTrack();
(count = count + 1);
MP3player.playTrack(count);
delay (50);
Serial.print(F("Pista siguiente"));
}
//si esta presionado mas de tres segundos entonces fade out al sonido, next y sube volumen
// else {
// while(vol>=150){
// MP3player.setVolume(vol = vol +2, vol = vol +2);
// }
// }
// (count = count + 1);
// MP3player.playTrack(count);
// MP3player.stopTrack();
// MP3player.setVolume(20);
//comprueba el estado del boton
button4State = digitalRead(button4Pin);
//pasar pista mediante boton
if (button4State == HIGH){
MP3player.stopTrack();
{
(count = count - 1);
MP3player.playTrack(count);
delay (500);
Serial.print(F("Pista anterior"));
}
}
//bajar volumen por boton
//comprueba el estado del boton
button5State = digitalRead(button5Pin);
if (button5State == HIGH){
if (vol<=150){
// push byte[1] into both left and right assuming equal balance.
MP3player.setVolume(vol = vol +2, vol = vol +2); // commit new volume
delay (100);
Serial.print(F("Volume changed to -"));
Serial.println(F("[dB]"));
}
}
button14State = digitalRead(button14Pin);
if (button14State == HIGH){
if (vol>=2){
// push byte[1] into both left and right assuming equal balance.
MP3player.setVolume(vol = vol -2, vol = vol -2); // commit new volume
Serial.print(F("Volume changed to +"));
Serial.println(F("[dB]"));
}
}
}
Edito:
He probado a añadir
if button3State == HIGH
A cambiar el button pint de int a cont in... etc... me tiene un poco loco la funcion la verdad... no se si hay algo que se pueda hacer para que solo mida el tiempo del pulso cuando presione el boton 3.