#define LEDBlau 9
#define LEDGelb 10
#define LEDRot 11
int trigger=7; //Trigger-Pin des Ultraschallsensors an Pin7 des Arduino-Boards
int echo=6; // Echo-Pim des Ultraschallsensors an Pin6 des Arduino-Boards
long dauer=0; // Das Wort dauer ist jetzt eine Variable, unter der die Zeit gespeichert wird, die eine Schallwelle bis zur Reflektion und zurück benötigt. Startwert ist hier 0.
long entfernung=0; // Das Wort „entfernung“ ist jetzt die variable, unter der die berechnete Entfernung gespeichert wird. Info: Anstelle von „int“ steht hier vor den beiden Variablen „long“. Das hat den Vorteil, dass eine größere Zahl gespeichert werden kann. Nachteil: Die Variable benötigt mehr Platz im Speicher.
#define State_blau 9// In diesem Stadium wird der gemessene Abstand anhand einer blauen LED angezeigt
#define State_gelb 10// In diesem Stadium wird der gemessene Abstand der zwischen 30 und 10 cm liegt anhand einer gelben LED visualisiert
#define State_rot 11// In diesem Stadium wird der gemessene Abstand der zwischen 10 und 5 cm liegt anhand einer roten LED angezeigt
#define State_rotflash 12// In diesem Stadium wird der gemessene Abstand der zwischen 5 cm und 0 cm liegt anhand einer Rot Blinkender LED visualisiert
int State =State_blau;
void setup() {
// put your setup code here, to run once:
Serial.begin (9600); //Serielle kommunikation starten, damit man sich später die Werte am serial monitor ansehen kann.
pinMode(trigger, OUTPUT); // Trigger-Pin ist ein Ausgang
pinMode(echo, INPUT); // Echo-Pin ist ein Eingang
pinMode(LEDBlau, OUTPUT);
pinMode(LEDGelb, OUTPUT);
pinMode(LEDRot, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(trigger, LOW); //Hier nimmt man die Spannung für kurze Zeit vom Trigger-Pin, damit man später beim senden des Trigger-Signals ein rauschfreies Signal hat.
delay(5); //Dauer: 5 Millisekunden
digitalWrite(trigger, HIGH); //Jetzt sendet man eine Ultraschallwelle los.
delay(10); //Dieser „Ton“ erklingt für 10 Millisekunden.
digitalWrite(trigger, LOW);//Dann wird der „Ton“ abgeschaltet.
dauer = pulseIn(echo, HIGH); //Mit dem Befehl „pulseIn“ zählt der Mikrokontroller die Zeit in Mikrosekunden, bis der Schall zum Ultraschallsensor zurückkehrt.
entfernung = (dauer/2) * 0.03432; //Nun berechnet man die Entfernung in Zentimetern. Man teilt zunächst die Zeit durch zwei (Weil man ja nur eine Strecke berechnen möchte und nicht die Strecke hin- und zurück). Den Wert multipliziert man mit der Schallgeschwindigkeit in der Einheit Zentimeter/Mikrosekunde und erhält dann den Wert in Zentimetern.
Serial.print(State);
Serial.println("State");
Serial.print(entfernung);
Serial.println("cm");
switch (State) {
case State_blau:
if(entfernung >= 30 || entfernung <= 0){
analogWrite(LEDBlau,255);
}
else if(entfernung < 30){
State = State_gelb;
}
case State_gelb:
analogWrite(LEDBlau,0);
analogWrite(LEDRot,0);
if(entfernung <= 30 && entfernung >= 10){
analogWrite(LEDGelb,255);
}
else if(entfernung < 10){
State = State_rot;
}
else if(entfernung > 30){
State = State_blau;
}
case State_rot:
analogWrite(LEDGelb,0);
if(entfernung < 10 && entfernung > 5){
analogWrite(LEDRot,255);
}
else if(entfernung < 5){
State = State_rotflash;
}
else if(entfernung > 10){
State = State_gelb;
}
case State_rotflash:
if(entfernung <= 5 && entfernung > 0){
analogWrite(LEDRot,0);
delay(100);
analogWrite(LEDRot,255);
}
else if (entfernung > 5) {
State = State_rot;
}
delay(1000);
}
}