// Parksensor 2.0
/*
Michael Neuhold
2AHME
27.04.2023
*/
#define BUTTON_PIN 3 // Buttom
#define BUZZ_PIN 9 // Buzzer
#define ECHO_PIN 6 // Ultraschallsensor
#define TRIGGER_PIN 5 // Ultraschallsensor
#define LED_PIN13 13 // LED am MC
#define LED_RED 11 // rote LED
#define LED_YELLOW 10 // gelbe LED
#define LED_BLUE 9 // blaue LED
int state;
int buttonPushCounter = 0; //Flankenerkennung
int buttonState = 0;
int lastButtonState = 0;
int anaus = 0;
enum z {inactive, active1, active2, active3, active}; // definiert die verschiedenen States des Ultraschallsensors
long microstocm(long); // Umrechnung Microsekunden in Zentimeter
void setup()
{
// initialisiert die Hardware
pinMode(BUTTON_PIN, INPUT_PULLUP); // PULLUP schaltet einen Widerstand im MC ein
pinMode(BUZZ_PIN, OUTPUT);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN13, OUTPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_YELLOW, OUTPUT);
pinMode(LED_BLUE, OUTPUT);
Serial.begin(115200);
}
void loop()
{
// Werte einlesen
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(5);
digitalWrite(TRIGGER_PIN, LOW);
buttonState = digitalRead(BUTTON_PIN);
// Variablen definieren und eingelesenen Werten zuteilen
long duration = pulseIn(ECHO_PIN, HIGH);
long cm = microstocm(duration);
// Entfernung ausgeben
Serial.print("Die Entfernung beträgt ");
Serial.print(cm);
Serial.print("cm\n");
Serial.print("Du befindest dich im State ");
Serial.print(state);
Serial.println();
if(buttonState != lastButtonState && buttonState == HIGH)
// an & aus wechseln
anaus++;
if(anaus %2 == 0)
{
digitalWrite(LED_PIN13, HIGH);
if(cm <= 30 && cm >=10)
state = active1; //State 1
if(cm < 10 && cm >= 5)
state = active2; //State 2
if(cm < 5 && cm > 0)
state = active3; //State 3
if(cm > 30 || cm <= 0)
state = active; //State 4
}
else
{
digitalWrite(LED_PIN13, LOW);
state = inactive; //State 0
}
switch(state)
{
case 0:
tone(9, 50, 10);
analogWrite(LED_RED, LOW);
analogWrite(LED_YELLOW, LOW);
analogWrite(LED_BLUE, LOW);
break;
case 1:
tone(9, 50, 150);
analogWrite(LED_RED, LOW);
analogWrite(LED_YELLOW, HIGH);
analogWrite(LED_BLUE, LOW);
break;
case 2:
tone(9, 50, 500);
analogWrite(LED_RED, HIGH);
analogWrite(LED_YELLOW, LOW);
analogWrite(LED_BLUE, LOW);
break;
case 3:
tone(9, 50, 1250);
analogWrite(LED_RED, HIGH);
delay(100);
analogWrite(LED_RED, LOW);
analogWrite(LED_YELLOW, LOW);
analogWrite(LED_BLUE, LOW);
break;
case 4:
tone(9, 50, 2000);
analogWrite(LED_RED, LOW);
analogWrite(LED_YELLOW, LOW);
analogWrite(LED_BLUE, HIGH);
break;
}
lastButtonState = buttonState;
delay(200);
}
long microstocm(long micros)
{
return micros / 29 / 2;
}