Ein / Aus Taster mit LCD Bildschirm

Hallo Zusammen,

ich bin ganz neu und habe ein Problem.

Mein Ziel ist es ein Bewegungsmelder zu programmieren und ich bin gerade dabei den Taster mit einer LED und LCD screen zu programmieren.

Mein Problem ist, wenn ich auf den Taster drücke soll die LED Aus sein und der LCD Screen soll "Sensor deaktiv!" anzeigen. Wenn ich erneut drücke soll die LED An gehen und der Screen soll "Sensor aktiv" anzeigen. Es klappt mit meinem Sketch aktuell auch.

Das Problem aktuell ist wenn ich mein Sketch starte ist die LED an und es steht Sensor aktiv (bis dahin alles gut). Ich drücke auf den Taster die LED geht aus und es zeigt mir Sensor deaktiv an (weiterhin gut). Sobald ich erneut auf den Taster drücke geht die LED wieder an ABER es wird der Schriftzug Sensor aktiv!v! angezeigt. Das Board versucht voraussichtlich Sensor aktiv und Sensor deaktiv gleichzeitig anzuzeigen. Ich hoffe ihr könnt mir da weiterhelfen.

Ich bedanke mich im Voraus.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

int LEDrot=6;
int taster=7;
int tasterstatus=0;
int tasterZaehler = 0;
int letzterStatus = 0;

void setup()
{
  lcd.init();
  lcd.backlight();
  pinMode(LEDrot, OUTPUT);
  pinMode(taster, INPUT);
}
void loop()
{
  tasterstatus=digitalRead(taster);

  if(tasterstatus != letzterStatus)
  {
  if (tasterstatus == 1)
  {
    tasterZaehler++;
  }
  
  
  else 
  {
    digitalWrite(LEDrot, LOW);
    lcd.setCursor(0, 0);
    lcd.print("Sensor deaktiv!");
  }
}
{
  if (tasterZaehler % 2 == 0)
  {
    digitalWrite(LEDrot, HIGH);
    lcd.setCursor(0, 0);
    lcd.print("Sensor aktiv!");
    tasterZaehler = 0;
}

  else 
  {
    digitalWrite(LEDrot, LOW);
    lcd.setCursor(0, 0);
    lcd.print("Sensor deaktiv!");
    }
  letzterStatus = tasterstatus;
}
}

Nein.

ja

Erklärung:

Du sieht es hoffentlich.

Workaround:

lcd.print("Sensor aktiv!  ");
1 Like

Wow, das hat sofort funktioniert. Vielen Dank. Wieso musste ich es denn so machen?

Das musst Du nicht.
Die Erklärung habe ich Dir geliefert.
Du kannst auch vor dem neu beschreiben des LCD ein lcd.clear() ausführen.

Fakt ist: Du musst irgendwie dafür sorgen, das die vorgehende Ausgabe gelöscht wird.
Anders als bei einigen 7Segmentanzeigen bleibt der übertragene Inhalt auf dem Display stehen, auch wenn nichts mehr übertragen wird, da die Anzeige einen internen Speicher hat.
Wenn also der Speicher nicht überschrieben bzw. gelöscht wird, bleibt der Rest der vorhergehenden Ausgabe stehen....

Ich weiß Bescheid, mit dem Befehl lcd.clear() hat es auch funktioniert so wie du beschrieben hast. Vielen Dank nochmal :+1:

Ich hätte da noch eine kurze Frage. An welche Spannung muss ich mein Bewegungsmelder denn anschließen, wenn ich bereits 5V für den LCD Screen und 3,3V für das Breadboard verwende?

Was für einer, es gibt für 5 und 3,3V. Bitte Foto oder Link.
Normale für Arduino können beides.


Ist normaler 5V Melder

Und wie schließe ich jetzt den Melder an wenn 5V bereits belegt ist?

Die PIR-Moduke sind IMHO als 5V-Module ausgeführt.

Warum nimmst Du 3,3V ans Breadboard?
Was hast Du für einen Controller?
Ausser bei einem ESP ist mir nicht bekannt, das es einen grund gibt, mit 3.3 zu arbeiten.
Es wäre ggfls. sogar kontraproduktiv, wenn Du einen 5V Controller benutzt, aber die 3.3 V als Signalspannung.

Ziehe Dir eine Leitung 5V vom Controller auf das Breadboard und gehe vom BB auf den PIR und mit einem weiteren Kabel auf die Perepherie

1 Like

Über das Board?

1 Like

Ich werde es mal probieren, ich melde mich dann, vielen Dank für eure Hilfe

Brille putzen "Funduino UNO" :wink:

Steht vermutlich auf einem der Bilder....

Komisch
image
wurde dein Brauser zu sträng eigestellt ?

Ja, ich weiss. Nein, alles gut - das ist bei mir nunmal etwas schieriger...

5V an das Board anschließen hat geklappt :). Danke euch jetzt muss ich nur noch den PIR und Piezo so zum laufen kriegen wie ich es möchte.

woran hapert es?
Brauchst Unterstützung beim Code?

Habe jetzt die Module erst mal angeschlossen und getestet ob es funktioniert. Hat alles geklappt.

Das Ziel ist, wenn der Sensor aktiv ist und eine Bewegung erkannt wird, soll die LED blinken und der LCD Screen soll "Person entdeckt" anzeigen. Wenn die Person den Fangkreis verlässt soll der Screen wieder Sensor aktiv anzeigen. Wenn der Sensor deaktiviert ist soll natürlich nichts von dem passieren.

Habe wieder Probleme mit dem LCD Screen der zeigt mir bei einer Bewegung "Person entdeckt" an danach wenn keine Bewegung mehr statt findet zeigt er mir " Sensor aktiv t" an . Ich weiß nicht wo genau ich lcd.clear() einbauen muss?

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);

int piezo=4;
int bewegung=2;
int LEDrot=6;
int taster=7;
int tasterstatus=0;
int tasterZaehler = 0;
int letzterStatus = 0;
int bewegungsstatus=0;


void setup()
{
  lcd.init();
  lcd.backlight();
  pinMode(LEDrot, OUTPUT);
  pinMode(taster, INPUT);
  pinMode(piezo, OUTPUT);
  pinMode(bewegung, INPUT);
}
void loop()
{
  tasterstatus=digitalRead(taster);
  bewegungsstatus=digitalRead(bewegung);

  if(tasterstatus != letzterStatus)
  {
  if (tasterstatus == 1)
  {
    tasterZaehler++;
  }
  
  
  else 
  {
    lcd.setCursor(0, 0);
    lcd.print("Sensor deaktiv");
  }
}
{
  if (tasterZaehler % 2 == 0)
  {
    lcd.setCursor(0, 0);
    lcd.print("Sensor aktiv  ");
    tasterZaehler = 0;
    if (bewegungsstatus == HIGH)
    {
      digitalWrite(piezo, HIGH);
      lcd.setCursor(0, 0);
      lcd.print("Person entdeckt  ");
      digitalWrite(LEDrot, HIGH);
      delay(200);
      digitalWrite(LEDrot, LOW);
      delay(200);
    }
    if (bewegungsstatus == LOW)
    {
      digitalWrite(piezo, LOW);
    }
}

  else 
  {
    lcd.setCursor(0, 0);
    lcd.print("Sensor deaktiv");
    }
  letzterStatus = tasterstatus;
}
}