Novato : while(true){}

Buenas,

Resulta que estoy siguiendo un ejemplo sencillo (y supongo que clásico) de hacer sonar una bocina. Entiendo todo el código pero, según leo en los comentarios, el while(true){} se pone para que solo reproduzca la melodía una vez. Y no entiendo el por qué, la verdad. Es decir, sé que while se usa para que se realice una función “mientras” se cumpla una condición. Pero “true”? Mientras se cumpla “verdadero”? No lo entiendo. Engancho solamente una parte del código, creo que no hace falta más, no?

void loop() 
{
  int i, duration;
  
  for (i = 0; i < songLength; i++) 
  {
    duration = beats[i] * tempo;  
    
    if (notes[i] == ' ')          
    {
      delay(duration);            
    }
    else                          
    {
      tone(buzzerPin, frequency(notes[i]), duration);
      delay(duration);            
    }
    delay(tempo/10);              
  }
    while(true){}
}

while(true){}, sin Break dentro del código, es un bucle infinito. En esa sentencia se detiene el programa (prácticamente).

Creo que lo entiendo, gracias!

Justamente ese era el problema en la rutina que mencionas. Al final de la misma tenía ese while(1); que lo que hace es quedarse ahi de por via hasta que se corte la energía y vuelva a repetir el ciclo. Entonces con retirarlo puede repetir la melodía siempre y cuando haga algo para que se repita.