/**************
Name: Ivan Ivanov
Datum: 11.06.2024
Übung: Array mit Ultraschallsensor
**********/
#define ARRAY_SIZE 7 // Größe des Arrays
#define MESSINTERVALL 500 // Messintervall in Millisekunden
#define DEAKTIVIERUNGSINTERVALL 1000
#define TRIGGER_PIN 6
#define ECHO_PIN 5
#define BUTTON_PIN 12
int abstaende[ARRAY_SIZE]; // Array für Abstandswerte
int index = 0; // Index für das Array
unsigned long letzteMesszeit = 0; // Zeitstempel der letzten Messung
bool sensorAktiv = false; // Status des Sensors
void setup()
{
Serial.begin(9600);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop()
{
if (digitalRead(BUTTON_PIN) == LOW)
{
sensorAktiv = !sensorAktiv; // Wechsel des Sensorstatus
delay(300); // Entprellung der Taste
}
unsigned long aktuelleZeit = millis();
if (sensorAktiv && (aktuelleZeit - letzteMesszeit >= MESSINTERVALL))
{
abstaende[index] = entfernungMessen(); // Entfernung messen
index = (index + 1) % ARRAY_SIZE; // Index erhöhen und ggf. zurücksetzen
letzteMesszeit = aktuelleZeit;
long summe = 0;
for (int i = 0; i < ARRAY_SIZE; i++)
{
summe += abstaende[i];
}
float durchschnitt = (float)summe / ARRAY_SIZE;
Serial.print("Werte: ");
for (int i = 0; i < ARRAY_SIZE; i++)
{
Serial.print(abstaende[i]);
if (i < ARRAY_SIZE - 1)
{
Serial.print(", ");
}
}
Serial.print(" | Durchschnitt: ");
Serial.println(durchschnitt);
} else if (!sensorAktiv && (aktuelleZeit - letzteMesszeit >= DEAKTIVIERUNGSINTERVALL))
{
Serial.println("Sensor deaktiviert");
letzteMesszeit = aktuelleZeit;
}
}
int entfernungMessen()
{
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
long dauer = pulseIn(ECHO_PIN, HIGH);
return dauer * 0.034 / 2;
}