Hallo Forengemeinde,
ich habe aus einigen Beiträgen diesen Code erstellt.
Bin ganz froh das es geht und wollte dann die Anzeige nur noch bei einer Änderung aktualisieren.Wenn ich die Zeilen die auskommentiert sind aktiviere stimmen die Werte der Lcd anzeige nicht mehr.
Die Variablen Entfernung und AltEntfernung werden im Monitor richtig angezeigt.
//Bibliotheken um mit dem LCD-Display zu
//kommunizieren
#include <LiquidCrystal_I2C.h>
// Initialisieren des LCD Displays mit der I2C Adresse 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pins für Senden/Empfangen definieren
#define SENDEN 9 // braun
#define ECHO 8 // orange
// Variable für Zeit und Entfernung initialisieren
int Zeit;
int Entfernung;
int AltEntfernung = 200;
/*
void ausgabe() {
lcd.setCursor(2, 0);
lcd.print("Entfernung: ");
lcd.setCursor(3, 1);
lcd.print(Entfernung);
lcd.print(" cm ");
// Titel im Plotter, darf keine Leerzeichen enthalten
Serial.print("Entfernung:");
Serial.println(Entfernung);
Serial.print("Laufzeit,");
Serial.println(Zeit);
//#########
//delay(1000);
}
*/
void setup() {
Serial.begin(115200);
pinMode(SENDEN, OUTPUT);
pinMode(ECHO, INPUT);
// LCD starten
lcd.init();
lcd.backlight();
}
void loop() {
// Sender kurz ausschalten um Störungen des Signals zu vermeiden
digitalWrite(SENDEN, LOW);
delay(10);
// Signal für 10 Mikrosekunden senden
digitalWrite(SENDEN, HIGH);
delayMicroseconds(5);
// Sender ausschalten
digitalWrite(SENDEN, LOW);
// pulseIn -> Zeit messen, bis das Signal zurückkommt
Zeit = pulseIn(ECHO, HIGH);
/*
Entfernung in cm berechnen
Zeit/2 -> nur eine Strecke soll berechnet werden
Umrechnung in cm
*/
Entfernung = (Zeit / 2) * 0.03432;
lcd.setCursor(2, 0);
lcd.print("Entfernung: ");
lcd.setCursor(3, 1);
lcd.print(Entfernung);
lcd.print(" cm ");
//if (AltEntfernung - Entfernung > 10) ausgabe();
//AltEntfernung = Entfernung;
//Serial.println(AltEntfernung);
//Serial.println(Entfernung);
}
Das sind nicht 10 Mikrosekunden sondern Milisekunden.
Die Entfernung kann größer oder kleiner werden. Du berücksichtigst nur eine Richtung.
Richtig ist daß Du den Absolutwert bildest. if (abs(AltEntfernung - Entfernung) > 10) ausgabe();
Die 10 Microsekunden gehören zum Senden zwei Zeilen später.
Dort stehen "5" drin das ist richtig . Zu Beginn schalte ich 10 millisec das Senden aus.
Der Einwand den Absolutwert zu benutzen verändert nichts.
Im Serialmonitor lasse ich jetzt die "Zeit" und "Entfernung" ausgeben
diese ändern sich tatsächlich???? warum
Habe die Anpassungen Kommentar und Datentyp geändert jetzt gibt es Anzeigen auf dem Display " 0 " oder " 166 " der Sensor liegt auf dem Tisch und misst zur Zimmerdecke.
@wwerner Dies ist der aktuelle Code
ausgegeben in der "ausgabe" Entfernung und Laufzeit
dann im "Loop" AltEntfernung und Entfernung
Dort sehe ich auch das Entfernung und Laufzeit mit "0" ausgegeben werden.
//Bibliotheken um mit dem LCD-Display zu
//kommunizieren
#include <LiquidCrystal_I2C.h>
// Initialisieren des LCD Displays mit der I2C Adresse 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pins für Senden/Empfangen definieren
#define SENDEN 9 // braun
#define ECHO 8 // orange
// Variable für Zeit und Entfernung initialisieren
unsigned long Zeit;
int Entfernung;
int AltEntfernung = 200;
void ausgabe() {
lcd.setCursor(2, 0);
lcd.print("Entfernung: ");
lcd.setCursor(3, 1);
lcd.print(Entfernung);
lcd.print(" cm ");
// Titel im Plotter, darf keine Leerzeichen enthalten
Serial.print("Entfernung:");
Serial.println(Entfernung);
Serial.print("Laufzeit,");
Serial.println(Zeit);
//#########
delay(500);
}
void setup() {
Serial.begin(115200);
pinMode(SENDEN, OUTPUT);
pinMode(ECHO, INPUT);
// LCD starten
lcd.init();
lcd.backlight();
}
void loop() {
// Sender kurz ausschalten um Störungen des Signals zu vermeiden
// digitalWrite(SENDEN, LOW);
// delay(10);
// Signal für 15 Mikrosekunden senden
digitalWrite(SENDEN, HIGH);
delayMicroseconds(25);
// Sender ausschalten
digitalWrite(SENDEN, LOW);
// pulseIn -> Zeit messen, bis das Signal zurückkommt
Zeit = pulseIn(ECHO, HIGH);
/*
Entfernung in cm berechnen
Zeit/2 -> nur eine Strecke soll berechnet werden
Umrechnung in cm
*/
Entfernung = (Zeit / 2) * 0.03432;
/*
lcd.setCursor(2, 0);
lcd.print("Entfernung: ");
lcd.setCursor(3, 1);
lcd.print(Entfernung);
lcd.print(" cm ");
*/
if (abs(AltEntfernung - Entfernung) > 10) ausgabe();
AltEntfernung = Entfernung;
Serial.println(AltEntfernung);
Serial.println(Entfernung);
}
//Bibliotheken um mit dem LCD-Display zu kommunizieren
#include <LiquidCrystal_I2C.h>
// Initialisieren des LCD Displays mit der I2C Adresse 0x27
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pins für Senden/Empfangen definieren
#define SENDEN 9 // braun
#define ECHO 8 // orange
// Variable für Zeit und Entfernung initialisieren
unsigned long Zeit;
int Entfernung;
int AltEntfernung = 200;
void ausgabe() {
lcd.setCursor(2, 0);
lcd.print("Entfernung: ");
lcd.setCursor(3, 1);
lcd.print(Entfernung);
lcd.print(" cm ");
}
void setup() {
Serial.begin(115200);
pinMode(SENDEN, OUTPUT);
pinMode(ECHO, INPUT);
// LCD starten
lcd.init();
lcd.backlight();
}
void loop() {
delay(100);
digitalWrite(SENDEN, HIGH);
delayMicroseconds(10); // Signal für x Mikrosekunden senden
digitalWrite(SENDEN, LOW);// Sender ausschalten
Zeit = pulseIn(ECHO, HIGH); // pulseIn -> Zeit messen, bis das Signal zurückkommt
if (Zeit>0){
/*
Entfernung in cm berechnen
Zeit/2 -> nur eine Strecke soll berechnet werden
Umrechnung in cm
*/
Entfernung = (Zeit / 2) * 0.03432;
if (abs(AltEntfernung - Entfernung) > 10) {
ausgabe();
}
Serial.print("Entfernung:");
Serial.println(Entfernung);
Serial.print("AltEntfernung:");
Serial.println(AltEntfernung);
Serial.print("Laufzeit:");
Serial.println(Zeit);
AltEntfernung = Entfernung;
} else {
Serial.println("Keine Zeit erkannt");
}
}
@wwerner
Dies scheint besser zu sein,jetzt gibt es nicht mehr die Anzeige "166" / "0" .
Im Serialmonitor gibt es keine Ausgabe "Keine Zeit erkannt" .
Wenn ich jetzt die Distanz vor dem Sensor verkleinere wird das korrekt angezeigt.
Wenn ich dann die Distanz wieder vergrößere wird das auch korrekt angezeigt.
Was mich als Anfänger verwirrt
warum die geschweifte Klammer um Ausgabe
dann die Ausgabe
den else Zweig
gehört zu einer if abfrage zwingend ein else Zweig
Kann ich die Ausgabe des Serialmonitors auch umleiten in eine Datei.
Vielen Dank an alle die mir wiedermal geholfen haben die Arduino Welt ein bisschen
näherzukommen.Ich hab noch so viele Fragen!
Setze das Thema mal auf gelöst im Post 10 ist das korrekt so?