Hola,
tengo un problema con mi codigo, no puedo hacer que el buzzer solo suena una vez durante 400ms por ejemplo. Alguien sabe como solucionar esto?
Aqui esta el codigo:
char val;
int led = 8;
int pinLDR = 0;
int valorLDR=0;
const int buzzer = 5;
void setup() {
noTone(buzzer);
pinMode(led,OUTPUT);
Serial.begin(9600);
pinMode(buzzer,OUTPUT);
}
void loop() {
if(Serial.available())
val = Serial.read();
digitalWrite(led,LOW);
if(val == '1') //i am sending this number from android phone
{
digitalWrite(led,HIGH);
valorLDR= analogRead(pinLDR);
tone(buzzer,550);
delay(400);
if(valorLDR < 50)
{
digitalWrite(led,LOW);
Serial.println("2");
delay(1000);
}
}
if(val =='0')
{
digitalWrite(led,LOW);
}
}
Hola,
¿tampoco se enciende el LED o el LED si?
Si tampoco se enciende el LED el problema esta en el if y por lo tanto es que no le estas enviando el caracter 1 correctamente.
Si enciende, pero el buzzer se queda sonando, se apaga solamente cuando val=0.
Lo que ocupo es cuando val=1 suene nada mas 400 ms y ya, el led se quedara prendido.
Después del delay tienes que a pagarlo.
Creo que es notone(buzzer);
La manera correcta sería poner la duración dentro de la misma llamada a la función tone(), asi:
tone(buzzer, 550, 400)
Referencia a la función tone()
Asi es, ya lo intente de estas maneras y no me sale:
if(val == '1')
{
digitalWrite(led,HIGH);
valorLDR= analogRead(pinLDR);
tone(buzzer,550);
delay(400);
noTone(buzzer);
if(val == '1')
{
digitalWrite(led,HIGH);
valorLDR= analogRead(pinLDR);
tone(buzzer,550,400);
if(val == '1')
{
digitalWrite(led,HIGH);
valorLDR= analogRead(pinLDR);
tone(buzzer,550,400);
noTone(buzzer);
Pues no tiene sentido.
Vamos a hacer una prueba, comenta la línea de activación del buzzer
//tone(buzzer,550,400);
Perdon, soy nuevo en esto, no se que quisiste decir :/.
Dos barras delante de una línea es un comentario, el compilador lo ignora es como si no estuviera escrita.
Estara correcto este codigo?
void loop()
{
digitalWrite(led,HIGH); //Led se prende
valorLDR= analogRead(pinLDR); //Comienza a leer el LDR
for (int x=0; x<6; x++)
{
if (x<1) //Si x<1 el buzzer suena
{
tone(buzzer,550,400);
}
if(x>=1) //Si x>1 buzzer no suena
{
noTone(buzzer);
}
}
if(valorLDR < 50)
{
digitalWrite(led,LOW);
Serial.println("2");
noTone(buzzer);
delay(200);
}
}