#include #include const int pir1 = 9; const int pir2 = 4; const int ir1 = 10; const int ir2 = 8; int pirStatus1 = 0; int pirStatus2 = 0; int irStatus1 = 0; //incoming int irStatus2 = 0; //stop SoftwareSerial playerSerial(3, 2); DFRobotDFPlayerMini player; int currentAudio = 0; unsigned long audioStart = 0; unsigned long audioDuration = 0; void setup() { pinMode(pir1, INPUT); pinMode(pir2, INPUT); pinMode(ir1, INPUT); pinMode(ir2, INPUT); Serial.begin(9600); playerSerial.begin(9600); player.begin(playerSerial); player.volume(15); } void loop() { pirStatus1 = digitalRead(pir1); pirStatus2 = digitalRead(pir2); irStatus1 = digitalRead(ir1); irStatus2 = digitalRead(ir2); Serial.print("ir1: "); Serial.print(irStatus1); Serial.print(" ir2: "); Serial.print(irStatus2); Serial.print(" pir1: "); Serial.print(pirStatus1); Serial.print(" pir2: "); Serial.println(pirStatus2); // PIR1 if (pirStatus1 == 1 && pirStatus2 == 0) //high, low { if (irStatus1==1 && irStatus2==1) //both not detecting { if (currentAudio != 1) { player.stop(); player.play(1); Serial.println("audio 1"); currentAudio = 1; audioStart = millis(); audioDuration = 15500; } } else if (irStatus1==0 && irStatus2==1) //ir1 detecting { if (currentAudio != 2) { player.stop(); player.play(2); Serial.println("audio 2"); currentAudio = 2; audioStart = millis(); audioDuration = 18500; } } else if (irStatus1 == 0 && irStatus2==0) //both detecting { if (currentAudio != 0) { player.stop(); Serial.println("stopped"); currentAudio = 0; } } else if (irStatus1 == 1 && irStatus2 == 0) //ir2 detecting { if (currentAudio != 0) { player.stop(); Serial.println("stopped"); currentAudio = 0; } } } //PIR2 high else if (pirStatus1 == 0 && pirStatus2 == 1) { if (irStatus1 == 0 && irStatus2 == 0) //both detecting { if (currentAudio != 0) { player.stop(); Serial.println("stopped"); currentAudio = 0; } } else if (irStatus1 == 1 && irStatus2 == 0) //ir2 detecting { if (currentAudio != 0) { player.stop(); Serial.println("stopped"); currentAudio = 0; } } else if (irStatus1 == 0 && irStatus2 == 1) //ir1 detecting { if (currentAudio != 3) { player.stop(); player.play(3); Serial.println("audio 3 playing"); currentAudio = 3; audioStart = millis(); audioDuration = 11500; } } else if (irStatus1 == 1 && irStatus2 == 1) //both ir not detecting { if (currentAudio != 3) { player.stop(); player.play(3); Serial.println("audio 3 playing"); currentAudio = 3; audioStart = millis(); audioDuration = 11500; } } } // both PIR high else if (pirStatus1 == 1 && pirStatus2 == 1) { if ((irStatus1==1 && irStatus2 == 0) || (irStatus1 == 0 && irStatus2 == 0)) //ir2 detecting or all ir detecting { if (currentAudio != 0) { player.stop(); Serial.println("stopped"); currentAudio = 0; } } else if (irStatus1==0 && irStatus2==1) //ir1 detecting { if (currentAudio != 3) { player.stop(); player.play(3); Serial.println("audio 3 playing"); currentAudio = 3; audioStart = millis(); audioDuration = 11500; } } else if (irStatus1==1 && irStatus2==1) //none detecting { if (currentAudio != 3) { player.stop(); player.play(3); Serial.println("audio 3 playing"); currentAudio = 3; audioStart = millis(); audioDuration = 11500; } } } //if both low, do nothing if (currentAudio != 0 && millis() - audioStart > audioDuration) { Serial.println("audio finished"); currentAudio = 0; } }