Ich habe das ganze jetzt mal so umgeschrieben!
Falls das nicht gut geschrieben, oder umständlich ist, bin ich für Kritik dankbar! ![]()
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
// Variablendeklaration
int Echo = 12 ;
int Trigger = 11 ;
int Abstand ;
int Zeit ;
int Starttaster = 10 ;
int Schalterzustand = 0 ;
int Schalterzustand_old = 0 ;
int Start = 0 ;
int interval = 500 ;
int previous_millis = 0 ;
void setup()
{
Serial.begin (9600) ;
lcd.begin (16,2);
// Beleuchtung des Displays einschalten
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home (); // go home
pinMode (Echo, INPUT) ;
pinMode (Trigger, OUTPUT) ;
}
void loop()
{
// Kontrolle ob Änderung des Eingangs
Schalterzustand = digitalRead (Starttaster) ;
if ((Schalterzustand == 1) && (Schalterzustand_old == 0))
{
Start = 1 - Start ;
delay (30) ;
}
// Messung starten
if (Start ==1)
{
digitalWrite (Trigger, LOW) ;
delayMicroseconds (2) ;
digitalWrite (Trigger, HIGH) ;
delayMicroseconds (5) ;
digitalWrite (Trigger, LOW) ;
Zeit = pulseIn (Echo, HIGH) ;
// Abstandswert in mm berechnen
Abstand = (Zeit * 0.343) / 2 ;
lcd.setCursor (0,0);
lcd.print("Abstand in mm");
// Wert auf LCD alle 500 ms aktualisieren
if ((millis() - previous_millis >= interval))
{
previous_millis = millis() ;
lcd.setCursor (0,1);
lcd.print(" ");
lcd.setCursor (0,1);
lcd.print(Abstand);
Serial.println (Abstand) ;
}
}
else
{
lcd.setCursor (0,0) ;
lcd.print ("Fuer Messung ") ;
lcd.setCursor (0,1) ;
lcd.print ("Start druecken ") ;
}
Schalterzustand_old = Schalterzustand ;
}
Das ganze funktioniert auch, jedoch fängt das Display nach ca. 40 Sekunden an zu flackern und die Werte ändern sich viel schneller, als sie sollten. Habe mal ein Video angehangen!
IMG_0136.avi (1.97 MB)