//HC-SR04
#define echoPin 2
#define trigPin 3
//LED
#define LEDblau 6
#define LEDrot 4
#define LEDgruen 5
//Echo
long duration;
int distance;
//Sound
long actual_time = 0;
long start_time = 0;
bool play = false;
#define Buzzer 8
#define buzzer_toner 400
//Button
#define BUTTON_PIN A0
void setup() {
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDblau, OUTPUT);
pinMode(LEDgruen, OUTPUT);
pinMode(LEDrot, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
Serial.begin(9600);
start_time = millis();
}
void loop() {
distance = getDistance();
//Serial.println(distance);
if (distance > 50){
setLED(1);
}else if (distance >= 10){
setLED(2);
}else if (distance <10){
setLED(3);
}
playSound(20,distance*10);
}
void playSound(int laenge,int pause){
int value = digitalRead((BUTTON_PIN));
//value = 0;
actual_time = millis();
int diff = actual_time-start_time;
play = false;
if(value == 0){
if (diff <= laenge){
play = true;
}
}
if(play){
tone(Buzzer, buzzer_toner);
}else{
noTone(Buzzer);
}
if(diff >= laenge+pause){
start_time=actual_time;
}
}
int getDistance(){
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
int dis = duration /58;
return dis;
}
void setLED(int i){
switch (i) {
case 1: //green
analogWrite(LEDgruen, 0);
analogWrite(LEDrot, 255);
analogWrite(LEDblau, 255);
break;
case 2: //yellow
analogWrite(LEDgruen, 0);
analogWrite(LEDrot, 0);
analogWrite(LEDblau, 255);
break;
case 3: //red
analogWrite(LEDgruen, 255);
analogWrite(LEDrot, 0);
analogWrite(LEDblau, 255);
break;
default:
break;
}
}