Problema con este programa

Buenas tardes, estoy intentando implementar un código al arduino con un zumbador y un pulsador. He encontrado en una página la melodía para el zumbador de Star Wars. Mi idea es que si se pulsa el pulsador suene la melodía y que ésta siga sonando hasta que termine aunque no se esté pulsando el pulsador. Una vez que acabe, si se le vuelve a dar que comience y así.

Dejo aquí el código y explico los errores que he tenido en todos los intentos:

int Pulsador = 7;

int speakerPin = 11;

int EstadoPulsador = 0;

#define c 261
#define d 294
#define e 329
#define f 349
#define g 391
#define gS 415
#define a 440
#define aS 455
#define b 466
#define cH 523
#define cSH 554
#define dH 587
#define dSH 622
#define eH 659
#define fH 698
#define fSH 740
#define gH 784
#define gSH 830
#define aH 880

void setup()
{
pinMode(Pulsador, INPUT);
// sets the ledPin to be an output
pinMode(speakerPin, OUTPUT);
//sets the speakerPin to be an output
Serial.begin(9600);
}

void loop() // run over and over again
{
EstadoPulsador = digitalRead(7);
if (EstadoPulsador = HIGH){
march();
beep();
}
}
void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds){

int x;
long delayAmount = (long)(1000000/frequencyInHertz);
long loopTime = (long)((timeInMilliseconds1000)/(delayAmount2));
for (x=0;x<loopTime;x++)
{
digitalWrite(speakerPin,HIGH);
delayMicroseconds(delayAmount);
digitalWrite(speakerPin,LOW);
delayMicroseconds(delayAmount);
}

// digitalWrite(ledPin, LOW);
//set led back to low

delay(20);
}
//a little delay to make all notes sound separate

}
void march()
{

beep(speakerPin, a, 500);
beep(speakerPin, a, 500);
beep(speakerPin, a, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);

beep(speakerPin, a, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);
beep(speakerPin, a, 1000);
//first bit

beep(speakerPin, eH, 500);
beep(speakerPin, eH, 500);
beep(speakerPin, eH, 500);
beep(speakerPin, fH, 350);
beep(speakerPin, cH, 150);

beep(speakerPin, gS, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);
beep(speakerPin, a, 1000);
//second bit…

beep(speakerPin, aH, 500);
beep(speakerPin, a, 350);
beep(speakerPin, a, 150);
beep(speakerPin, aH, 500);
beep(speakerPin, gSH, 250);
beep(speakerPin, gH, 250);

beep(speakerPin, fSH, 125);
beep(speakerPin, fH, 125);
beep(speakerPin, fSH, 250);
delay(250);
beep(speakerPin, aS, 250);
beep(speakerPin, dSH, 500);
beep(speakerPin, dH, 250);
beep(speakerPin, cSH, 250);
//start of the interesting bit

beep(speakerPin, cH, 125);
beep(speakerPin, b, 125);
beep(speakerPin, cH, 250);
delay(250);
beep(speakerPin, f, 125);
beep(speakerPin, gS, 500);
beep(speakerPin, f, 375);
beep(speakerPin, a, 125);

beep(speakerPin, cH, 500);
beep(speakerPin, a, 375);
beep(speakerPin, cH, 125);
beep(speakerPin, eH, 1000);
//more interesting stuff (this doesn’t quite get it right somehow)

beep(speakerPin, aH, 500);
beep(speakerPin, a, 350);
beep(speakerPin, a, 150);
beep(speakerPin, aH, 500);
beep(speakerPin, gSH, 250);
beep(speakerPin, gH, 250);

beep(speakerPin, fSH, 125);
beep(speakerPin, fH, 125);
beep(speakerPin, fSH, 250);
delay(250);
beep(speakerPin, aS, 250);
beep(speakerPin, dSH, 500);
beep(speakerPin, dH, 250);
beep(speakerPin, cSH, 250);
//repeat… repeat

beep(speakerPin, cH, 125);
beep(speakerPin, b, 125);
beep(speakerPin, cH, 250);
delay(250);
beep(speakerPin, f, 250);
beep(speakerPin, gS, 500);
beep(speakerPin, f, 375);
beep(speakerPin, cH, 125);

beep(speakerPin, a, 500);
beep(speakerPin, f, 375);
beep(speakerPin, c, 125);
beep(speakerPin, a, 1000);

while(1);
}

El primer error es que de esta forma me manda este mensaje de error el arduino: "too few arguments to function void beep(unisigned char, int, long int) "

El segundo es que siempre se salta el If, ignorándolo y he probado a cambiar la posición del pulsador y ponerlo en diferentes sitios en el código y no lo consigo.

Otro error es que no sabría como mantener la melodía hasta que acabe y espere a que se le vuelva a dar para volver a sonar.

Gracias

uno de los fallos es este: if (EstadoPulsador = HIGH){ lo que haces es asignar HIGH a la variable ,si quieres comparar debes usar: if (EstadoPulsador == HIGH){

la funcion beep tiene 3 parametros ,por lo que no puedes llamarla con beep() a secas por eso te da error, los parametros son el pin donde esta conectado ,frecuencia en hz y duracion o tiempo en milisegundos que no se si debe ser la duracion de las notas,eso investigalo....

Otro error es que march es una funcion infinita, ya que termina con while(1); y eso nunca termina.

NOTA: edita tu post y usa tags. Lee las normas del foro y encontrás como hacerlo.