Codigo para buzzer

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

}