PLEASE HELP Motion Detector Alarm Circuit Constant Alarm When There's no Motion

Hi guys,

I am very new to electronics and i wanted to build a motion detecting alarm circuit. I have written the code but for some reason the alarm is constantly beeping when the motion detector is away from everything in a box. I am wondering if someone can please help me out.

Here is the full code i wrote.

// Uses a PIR sensor to detect movement, buzzes a buzzer

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);
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(300);
if (pirState == HIGH){
// we have just turned off
Serial.println("Motion ended!");
// We only want to print on the output change, not 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);
}
}

You play the tone for 150 milliseconds then turn it off for 300 milliseconds, repeat

Sorry what i mean't was the alarm is constantly beeping when the motion detector is away in a box. It's not working off the motion detector its just constantly beeping when it shouldn't. No motion was detected.

val = digitalRead(inputPin);  // read input value
 if (val == HIGH) {            // check if the input is HIGH

We can see what the code DOES, why not use the comments to tell us what the code MEANS?

And code tags.
Yeah, we like code tags

The pirState is what you read from the PIR sensor, not some crap you assigned to it. What is all that stuff about?

Sorry guy's i didn't receive any notifications. I am still struggling with the code. Does anyone have an idea why my Buzzer is sounding an alarm constantly? Is anyone able to rewrite the code for me using the Input and outputs displayed?

remove val=0, remove pir_state=LOW, use pir_state=0;

What is the state of pin 2 when something is detected and what do you want to do when that happens?