noTone

Buenas tardes:

Estoy haciendo un sketch para arduino que se trata del control de un semáforo, tanto el de vehículos como el de peatones, este punto lo tengo resuelto, pero le quiero añadir sonido para invidentes, para generarlo, no tengo problema , lo hago con tone (speaker), pero no consigo pararlo. "noTone" no funciona. ¿Que hago mal?.

En espera de vuestros comentarios.

Saludos
Albert

Hola Albert.

Cuelga el codigo para ayudarte. Si no es dificil de imaginar.

Salut!

Aqui lo tienes:

class Button extends com.muvium.compatibility.arduino.Arduino{//Automatically Added VBB Framework Code - do not remove
int ledPin1 = 1; // LED en el pin digital 1
int ledPin2 = 2; // LED en el pin digital 2
int ledPin3 = 3; // LED en el pin digital 3
int ledPin4 = 4; // LED en el pin digital 4
int ledPin5 = 5; // LED en el pin digital 5
int speaker = 8;

void setup() // configura los pines de salida
{
pinMode(ledPin1, OUTPUT); // configura el pin 1 como salida
pinMode(ledPin2, OUTPUT); // configura el pin 2 como salida
pinMode(ledPin3, OUTPUT); // configura el pin 3 como salida
pinMode(ledPin4, OUTPUT); // configura el pin 4 como salida
pinMode(ledPin5, OUTPUT); // configura el pin 5 como salida
pinMode(speaker, OUTPUT);
}
void loop() // inicia el bucle del programa
{

digitalWrite(ledPin3, LOW); // desactiva el LED ROJO
digitalWrite(ledPin1, HIGH); // activa el LED VERDE
digitalWrite(ledPin5, HIGH); // activa el LED ROJO PEATONES
delay(9000); // espera 9 segundos
digitalWrite(ledPin1, LOW); // desactiva el LED VERDE
digitalWrite(ledPin2, HIGH); // activa el LED AMBAR
delay(3000); // espera 3 segundos
digitalWrite(ledPin2, LOW); // desactiva el LED AMBAR
digitalWrite(ledPin3,HIGH); // activa el LED ROJO
delay(1000); // espera 1 segundo
digitalWrite(ledPin5, LOW); // desactiva el LED ROJO PEATONES
delay(250); // espera 1/4 degundo
digitalWrite(ledPin4, HIGH); // activa el LED VERDE PEATONES
**tone (speaker, 5000); **
delay(9000); // espera 9 segundos
noTOne(speaker);

for (int i = 0; i<=5; i++) // repetir bucle 5 veces
{
digitalWrite(ledPin4, LOW); //parpadeo LUZ VERDE peatones
delay(500); // espera 1/2 segundo
digitalWrite(ledPin4, HIGH); // parpadeo LUZ VERDE peatones
delay(250); // espera 1/2 segundo

}

digitalWrite(ledPin3, LOW); // desactiva el LED ROJO
digitalWrite(ledPin4, LOW); // desactiva LUZ VERDE peatones
digitalWrite(ledPin5, HIGH); // activa el LED ROJO PEATONES
digitalWrite(ledPin3, HIGH); // activa el LED ROJO
delay(1000); // espera 1 segundo
}

}

ojo con las mayúsculas:
no es lo mismo
noTOne(speaker);
noTone(speaker);
a ver si el fallo es ese.

No, el problema no es la "O", fue un error al copiar. Deber ser otro.
Agradecería si alguien pudiese darme alguna solución.

Saludos
Albert

Si solamente quieres usarlo 9 segundos puedes definirlo en el tone, quitando el noTone
tone (speaker, 5000, 9000);

Buenas tardes:

En primer lugar, gracias por la respuesta. En segúndo lugar, no quiero usar el tone solo los 9 segundos, esta allí, como prueba, en realidad lo que necesito es que allí donde está, haga sonido intermitente durante esos nueve segundos, después, en otra parte del sketch el ritmo del "pitido" cambia, pero primero debo solucionar el como detener esa instrucción "tone".

En espera de vuestros comentarios".

Saludos
Albert

Si quieres que luego haga otro pitido porque no lo defines después?¿ esto es en programación si estas ejecutando un comando a través de un pin y le reasignas otro comando a ese pin se sobrescribe y se ejecuta el segundo comando.
y al segundo si quieres ya le defines un tiempo como te sugirió flico

Buenos dias:

Mas o menos lo entiendo, y a mi modo, entiendo que no estoy reasignando otro sonido a ese mismo pin. Lo que pretendo es que dentro de un for me genere ese pitido. Se trata de que el pitido vaya al mismo tiempo que el parpadeo de la luz verde de peatones, y lo que me ocurre es que solo suena una vez, en lugar de repetir cinco veces.

for (int i = 0; i<=5; i++) // repetir bucle 5 veces
{
digitalWrite(ledPin4, LOW); //parpadeo LUZ VERDE peatones
delay(500); // espera 1/2 segundo
tone (speaker, 1000, 500);
digitalWrite(ledPin4, HIGH); // parpadeo LUZ VERDE peatones
delay(250); // espera 1/2 segundo

}