/*************************************
Name: Mandl Alexander
Datum: 23.05.2024
Übung: Parksensor Zusatzübung
Erweitere dein Programm des Parksensors um folgende Punkte:
Der Parksensor soll durch Drücken einer Taste aktiviert werden.
Wird diese Taste nochmals gedrückt, soll der Parksensor wieder deaktiviert werden.
Zeige diesen Status über die Onboard-LED (Pin 13)
Implementiere zusätzlich einen Beeper, der in Abhängigkeit der Entfernung verschiedene Töne abspielt.
*************************************/
#define TRIG 6 // Trigger
#define ECHO 5 // Echo
#define BLAULED 8 // Blaue LED
#define GELBLED 9 // Gelbe LED
#define ROTLED 10 // Rote LED
#define SPEAKER 11 // Näherungston
#define BUTTON 7 // Ein/Ausschalter
long dauer;
int entfernung;
int start = 0;
int onoff = false;
void setup()
{
Serial.begin(9600);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(BLAULED, OUTPUT);
pinMode(GELBLED, OUTPUT);
pinMode(ROTLED, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
}
void loop() {
//Startsequenz
while (start == 0)
{
Serial.println("Parksensor Aus");
if (digitalRead(BUTTON) == HIGH)
start = 1;
}
//Bedingung wenn Taster nicht gedrückt ist
if (digitalRead(BUTTON) == LOW && onoff == true)
{
delay(500);
onoff = !onoff;
digitalWrite(LED_BUILTIN, LOW);
Serial.println("Parksensor Aus");
digitalWrite(BLAULED, LOW);
digitalWrite(GELBLED, LOW);
digitalWrite(ROTLED, LOW);
delay(100);
}
if (digitalRead(BUTTON) == LOW && onoff == false) //Bedingung zum Start der Funktion
{
delay(500);
onoff = !onoff;
digitalWrite(LED_BUILTIN, HIGH);
delay(100);
}
if (onoff == true)
{
// Ultraschallsensor Messung
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
dauer = pulseIn(ECHO, HIGH);
// Berechnung der Entfernung
entfernung = dauer * 0.034 / 2;
// Ausgabe der Entfernung
Serial.print("Entfernung: ");
Serial.print(entfernung);
Serial.println("cm");
//Wenn die Entfernung >30cm oder <0cm ist, soll blaue LED leuchten
if (entfernung > 30 || entfernung <= 0)
{
digitalWrite(BLAULED, HIGH);
digitalWrite(GELBLED, LOW);
digitalWrite(ROTLED, LOW);
noTone(SPEAKER);
}
//Ist die Entfernung im Bereich 10-30cm soll gelbe LED leuchten.
else if (entfernung >= 10 && entfernung <= 30)
{
digitalWrite(BLAULED, LOW);
digitalWrite(GELBLED, HIGH);
digitalWrite(ROTLED, LOW);
tone(SPEAKER, 200);
}
//Ist die Entfernung kleiner 10cm soll Rote LED leuchten
else if (entfernung < 10 && entfernung >= 5)
{
digitalWrite(BLAULED, LOW);
digitalWrite(GELBLED, LOW);
digitalWrite(ROTLED, HIGH);
tone(SPEAKER, 350);
}
//Ist die Entfernung kleiner 5cm soll Rote LED blinken
else if (entfernung < 5)
{
digitalWrite(BLAULED, LOW);
digitalWrite(GELBLED, LOW);
// Rote LED blinken
digitalWrite(ROTLED, HIGH);
delay(500);
digitalWrite(ROTLED, LOW);
delay(500);
tone(SPEAKER, 500);
}
}
}