const int trigPin = 9; const int echoPin = 10; const int ProxSensor = 2; const int relayPin = 12; const int buzzerPin = 3; int inputVal = 0; long duration; int distance; char piInput = 'N'; void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(LED_BUILTIN, OUTPUT); pinMode(relayPin, OUTPUT); pinMode(buzzerPin, OUTPUT); pinMode(ProxSensor,INPUT); digitalWrite(buzzerPin, LOW); digitalWrite(relayPin, LOW); Serial.begin(9600); } void loop() { boolean IROK = false; boolean UltraOK = false; // Clears the trigPin digitalWrite(trigPin, LOW); delayMicroseconds(2); // Sets the trigPin on HIGH state for 10 micro seconds digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); // Reads the echoPin, returns the sound wave travel time in microseconds duration = pulseIn(echoPin, HIGH); // Calculating the distance distance= duration*0.034/2; if (distance < 70) UltraOK = true; else UltraOK = false; if(digitalRead(ProxSensor) == LOW ) IROK = true; else IROK = false; //if (IROK && UltraOK) Serial.println("A"); if (IROK && UltraOK && Serial.available() > 0 ){ if (Serial.read() == 'O') { digitalWrite(relayPin, HIGH); playBuzzer(2,false); delay(5000); digitalWrite(relayPin, LOW); IROK = false; UltraOK = false; serialFlush(); } } IROK = false; UltraOK = false; //Read from Pi here } void serialFlush(){ while(Serial.available() > 0) { char t = Serial.read(); } } void playBuzzer(int time, boolean ok){ if (ok) { tone(buzzerPin, 1000); delay(time/3); noTone(buzzerPin); delay(time/5); tone(buzzerPin,1000); delay(time/3); noTone(buzzerPin); } else { tone(buzzerPin, 1000); delay(time); noTone(buzzerPin); } }