const int trigPin = 13;
const int echoPin = 12;
const int buzzer = 11;// use a passive buzzer for this project. Passive buzzers will make noise with DC current
const int greenLED = 10;
const int yellowLED = 9;
const int redLED = 8;
boolean stopBlink=true;
bool startTimer=false;
long duration;
double distance;
double maxDistance = 30; // this is how far we want our sensor to read, ignore everything farther than 12 inches.
void setup() {
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
pinMode(buzzer, OUTPUT);
pinMode(greenLED, OUTPUT);
pinMode(yellowLED, OUTPUT);
pinMode(redLED, OUTPUT);
digitalWrite(buzzer, LOW); // set all outputs low
digitalWrite(greenLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(redLED, LOW);
Serial.begin(9600); // Starts the serial communication
}
void loop() {
// 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 in cm
distance = duration * 0.034 / 2;
attachInterrupt(digitalPinToInterrupt(echoPin), loop, CHANGE);
//to convert cm to inches
//distance = distance / 2.54;
//Light up light depending on distance!
if(distance < maxDistance){
digitalWrite(greenLED, HIGH);
startTimer=true;
}
else{
digitalWrite(greenLED, LOW);
}
if(distance < (maxDistance* 0.66)){
blinkLED(yellowLED, 1000);
stopBlink=false;
buzzerBlink();
startTimer=true;
}
else{
digitalWrite(yellowLED, LOW);
stopBlink=true;
}
if(distance < (maxDistance * 0.33)){
blinkLED(redLED, 200);
digitalWrite(buzzer, HIGH); // if too close to sensor sound the alarm!!
startTimer=true;
}
else{
digitalWrite(redLED, LOW);
digitalWrite(buzzer,LOW); // if not close turn off alaram
}
// Prints the distance on the Serial Monitor
Serial.print("Distance: ");
Serial.println(distance);
/*if(!stopBlink){
buzzerBlink();
}*/
if(startTimer){
timer();
}
}
void buzzerBlink(){
while(stopBlink==false){
digitalWrite(buzzer, HIGH);
delay(10);
digitalWrite(buzzer, LOW);
delay(10);
attachInterrupt(digitalPinToInterrupt(echoPin), loop, CHANGE);
}
}
void timer(){
unsigned long prevMil = 0;
unsigned long curMil = millis();
unsigned long difMil = 0;
difMil = curMil - prevMil;
if(difMil >= 5000){
prevMil = curMil;
digitalWrite(buzzer, LOW);
digitalWrite(redLED, LOW);
digitalWrite(yellowLED, LOW);
digitalWrite(greenLED, LOW);
}
}
void blinkLED(int pin, int duration){
digitalWrite(pin, HIGH);
delay(duration);
digitalWrite(pin, LOW);
delay(duration);
attachInterrupt(digitalPinToInterrupt(echoPin), loop, CHANGE);
}