Need Advice for Motion Sensor

Hey guys, I'm making a motion sensor alarm with an LED and Pierzo Buzzer and I'm having trouble with this coding. So far its working as intended, but I've been trying to mess with the playTone values because I want it to make noises constantly as it detects motion. It will only play 2-3 buzzes before reseting even with a large amount of motion going off. It clearly works and picks up motion so I don't think its a hardware issue, its gotta be software.

Below is my code:

int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
int pinSpeaker = 10; // Set up a speaker on a PWM pin (digital 9, 10, or 11)

void setup() {
pinMode (ledPin, OUTPUT); // declare LED as output
pinMode (inputPin, INPUT); // declare sensor as input
pinMode (pinSpeaker, OUTPUT); // declare speaker as output
Serial.begin(9600);
}

void loop() {
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite (ledPin, HIGH); // turn LED ON
playTone(300, 160);
delay(150);

if (pirState == LOW) {
// we have just turned on
Serial.println ("Motion Detected!");
// We only want to print on the output change, not state
pirState = HIGH;
}
}else{
digitalWrite (ledPin, LOW); // turn LED off
playTone (0,0);
delay (150);
if (pirState == HIGH) {
// we have just turned off
Serial.println ("Motion Ended!");
// We only want to print on the output change, not the state
pirState = LOW;
}
}
}

// duration in mSecs, frequency in hertz
void playTone(long duration, int freq) {
duration *=1000;
int period = (1.0 / freq) * 1000000;
long elapsed_time = 0;
while (elapsed_time < duration) {
digitalWrite (pinSpeaker, HIGH);
delayMicroseconds (period / 2);
digitalWrite (pinSpeaker, LOW);
delayMicroseconds (period / 2);
elapsed_time += (period);
}
}

It will only play 2-3 buzzes before reseting even with a large amount of motion going off.

If it's resetting it's most probably a hardware issue. Post a wiring diagram of the complete setup! Probably a power problem.