//waktu yang diberikan pada sensor untuk mengkalibrasi (10-60 detik menurut datasheet)
int calibrationTime = 30;
//waktu ketika sensor mengeluarkan impuls rendah
long unsigned int lowIn;
//jumlah milidetik sensor harus rendah (berhenti)
//sebelum menganggap semua gerakan telah berhenti
long unsigned int pause = 5000;
boolean lockLow = true;
boolean takeLowTime;
int pirPin = 7; //pin digital terhubung ke output sensor PIR
int ledPin = 6; //pin digital terhubung ke output LED
int Buzzer = 5; //pin digital terhubung ke output BUZZER
/////////////////////////////
//SETUP
void setup(){
Serial.begin(9600);
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
pinMode(Buzzer, OUTPUT);
digitalWrite(pirPin, LOW);
//beri sensor waktu untuk mengkalibrasi
Serial.print("calibrating sensor ");
for(int i = 0; i < calibrationTime; i++){
Serial.print(".");
delay(1000);
}
Serial.println(" done");
Serial.println("SENSOR ACTIVE");
delay(50);
}
////////////////////////////
//LOOP
void loop(){
if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, HIGH); //led memvisualisasikan status pin keluaran sensor
tone(Buzzer,1000);
if(lockLow){
//memastikan menunggu transisi ke LOW sebelum output lebih lanjut dibuat:
lockLow = false;
Serial.println("---");
Serial.print("motion detected at ");
Serial.print(millis()/1000);
Serial.println(" sec");
delay(50);
}
takeLowTime = true;
}
if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, LOW); //led memvisualisasikan status pin keluaran sensor
noTone(Buzzer);
if(takeLowTime){
lowIn = millis(); //menghemat waktu transisi dari tinggi ke RENDAH
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}
//jika sensor rendah selama lebih dari jeda yang diberikan,
//Diasumsikan bahwa tidak ada lagi gerakan yang akan terjadi
if(!lockLow && millis() - lowIn > pause){
//memastikan blok kode ini hanya dieksekusi lagi setelahnya
//urutan gerakan baru telah terdeteksi
lockLow = true;
Serial.print("motion ended at "); //output
Serial.print((millis() - pause)/1000);
Serial.println(" sec");
delay(50);
}
}
}