Go Down

Topic: noTone (Read 2343 times) previous topic - next topic

albert1960

Jan 29, 2011, 09:04 pm Last Edit: Apr 30, 2012, 01:13 am by coleoptero Reason: 1
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

Engeeknyer

Hola Albert.

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

Salut!

albert1960

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
}
   
}

pacojarcia

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

albert1960

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

flico


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

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

albert1960

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

Lord_Sprit

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

albert1960

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

}

Go Up