#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresse des I2C-Moduls (kann je nach Verkabelung variieren)
const int sensorPin1 = 2; // Erster Sensor, Digitalpin 2
const int sensorPin2 = 3; // Zweiter Sensor, Digitalpin 3
const int resetPin = 4; // Trigger-Pin zum Zurücksetzen, Digitalpin 4
const float distanceBetweenSensors = 100; // Abstand zwischen den Sensoren in mm (Beispielwert)
unsigned long startTime = 0;
unsigned long stopTime = 0;
bool sensor1Active = false;
bool sensor2Active = false;
void setup() {
lcd.begin(16, 2);
lcd.print("Geschwindigkeit:");
lcd.setCursor(0, 2); // Setzt den Cursor auf die dritte Zeile
lcd.print("Delta Zeit:");
pinMode(resetPin, INPUT_PULLUP); // Trigger-Pin als Eingang mit Pull-up-Widerstand
Serial.begin(9600);
}
void loop() {
int sensorValue1 = digitalRead(sensorPin1); // Liest den Status des ersten Sensors
int sensorValue2 = digitalRead(sensorPin2); // Liest den Status des zweiten Sensors
int resetTrigger = digitalRead(resetPin); // Liest den Status des Triggers
if (resetTrigger == LOW) {
lcd.clear(); // LCD löschen
lcd.print("Geschwindigkeit:");
lcd.setCursor(0, 2);
lcd.print("Delta Zeit:");
}
if (sensorValue1 == HIGH && sensorValue2 == LOW && !sensor1Active && !sensor2Active) {
sensor1Active = true;
startTime = millis(); // Startzeit erfassen
} else if (sensorValue1 == LOW && sensorValue2 == HIGH && sensor1Active && !sensor2Active) {
sensor2Active = true;
stopTime = millis(); // Stopzeit erfassen
}
if (sensor1Active && sensor2Active) {
float timeDifference = stopTime - startTime;
float speed = (distanceBetweenSensors / timeDifference) * 1000; // Geschwindigkeit in mm/s umrechnen
lcd.setCursor(0, 1);
lcd.print(speed);
lcd.print(" mm/s"); // Zeigt die Geschwindigkeit an
//lcd.setCursor(0,1);
//lcd.print(timeDifference);
//lcd.print(" ms"); // Zeigt die Delta-Zeit an
sensor1Active = false;
sensor2Active = false;
}
}