const int buttonpin = 30;
int buzzerpin = 48;
// Visual Cues
int GreenLED = 12;
int RedLED = 11;
//Distance Sensor
int triggerpin = 8;
int echopin = 7;
int distance;
int duration;
// _________________________________________________________
void setup()
{
//Initializing inputs and outputs
Serial.begin(9600);
pinMode(triggerpin, OUTPUT);
pinMode(echopin, INPUT);
pinMode(buttonpin, INPUT_PULLUP);
pinMode(GreenLED, OUTPUT);
pinMode(RedLED, OUTPUT);
pinMode(buzzerpin, OUTPUT);
}
// _________________________________________________________
void loop(){
/* declaration of boolean presence to see if object/human has passed
door frame or not */
bool presence = false;
int buttonState = HIGH; //Set buttonState to high/not pressed by default
while(digitalRead(buttonpin) == HIGH){ // If button is not pressed,
Serial.println("HIGH"); // display status and visual cues
buttonState = HIGH;
digitalWrite(RedLED,HIGH);
digitalWrite(GreenLED, LOW);
digitalWrite(triggerpin, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin, LOW);
duration = pulseIn(echopin, HIGH);
distance = duration/29/2; // distance in cm
if(buttonState == HIGH && distance < 15){
for(int i = 0; i<10; i++){
tone(buzzerpin, 1000);
delay(100);
noTone(buzzerpin);
delay(100);
}
}
}
if(digitalRead(buttonpin)==LOW){ // If button is pressed,
// display status.
Serial.println("Button Pressed");
buttonState = LOW;
while(presence == false){ // Loop until an object/person is detected
/* Send and receive ultrasonic waves to detect distance
from foor frame to floor. */
digitalWrite(RedLED, LOW);
digitalWrite(GreenLED, HIGH);
digitalWrite(triggerpin, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin, LOW);
duration = pulseIn(echopin, HIGH);
distance = duration/29/2; // distance in cm
// print distance
Serial.print(distance);
Serial.println("cm");
if(distance < 15){ //if distance from door frame to ground is
//cut off, meaning an object/person has crossed,
presence = true; // set boolean presence to true
Serial.println("True");
while(presence == true){
digitalWrite(RedLED, LOW);
digitalWrite(GreenLED, HIGH);
digitalWrite(triggerpin, LOW);
delayMicroseconds(2);
digitalWrite(triggerpin, HIGH);
delayMicroseconds(10);
digitalWrite(triggerpin, LOW);
duration = pulseIn(echopin, HIGH);
distance = duration/29/2; // distance in cm
if(presence == true && distance > 15){
Serial.println("Person has crossed");
presence == false;
break;
}
}
delay(1000);
}
}
if(presence = true){ // once presence of object/person has been detected,
// go on "lock mode" for next person
digitalWrite(RedLED, HIGH);
digitalWrite(GreenLED, LOW);
}
delay(2000);
}
}