/*************************************************
* Programm: Abstamndmesser mit Mittelwert *
* Name: Suppaner Felix *
* Klasse: 2AHME *
* Datum: 11.06.2024 *
*************************************************/
#define ARRAY_GROESSE 5
#define trigPin 9
#define echoPin 10
#define tasterPin 2
long dauer;
int abstand;
int abstaende[ARRAY_GROESSE];
int aktuellerIndex = 0;
bool sensorAktiv = false;
unsigned long letzteMesszeit = 0;
unsigned long letzteAusgabezeit = 0;
void setup() {
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(tasterPin, INPUT_PULLUP);
for (int i = 0; i < ARRAY_GROESSE; i++) {
abstaende[i] = 0;
}
attachInterrupt(digitalPinToInterrupt(tasterPin), sensorUmschalten, FALLING);
}
void loop() {
if (sensorAktiv) {
if (millis() - letzteMesszeit >= 500) {
letzteMesszeit = millis();
abstand = messeAbstand();
abstaende[aktuellerIndex] = abstand;
aktuellerIndex = (aktuellerIndex + 1) % ARRAY_GROESSE;
float mittelwert = berechneMittelwert();
Serial.print("Abstände: ");
for (int i = 0; i < ARRAY_GROESSE; i++) {
Serial.print(abstaende[i]);
Serial.print(" ");
}
Serial.print(" | Mittelwert: ");
Serial.println(mittelwert);
}
} else {
if (millis() - letzteAusgabezeit >= 1000) {
letzteAusgabezeit = millis();
Serial.println("Sensor deaktiviert");
}
}
}
void sensorUmschalten() {
sensorAktiv = !sensorAktiv;
}
int messeAbstand() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
dauer = pulseIn(echoPin, HIGH);
return dauer * 0.034 / 2;
}
float berechneMittelwert() {
float summe = 0;
for (int i = 0; i < ARRAY_GROESSE; i++) {
summe += abstaende[i];
}
return summe / ARRAY_GROESSE;
}