Eingang 8 und 9 im DEBO LCD 16X2 BL anzeigen

Hoi Zusammen

Bin als totaler Anfänger auf der suchen dem Code für die Anzeige vom Zustand der zwei Eingänge 8 und 9 auf meinem Arduino UNO R3.

Mein Projekt ist eine Überwachungsanzeige vom Briefkasten mit je einem Briefeinwurf und Milchkasten. Die Hardware habe ich bereits aufgebaut und läuft Prima dazu. Das ganze läuft über zwei bistabil Relais. Also wenn jemand eine Klappen öffnet, wird das entsprechende Relais gezogen und bleibt in diesem Zustand, bis ich den Reset-Taste drücke. Während dieser Zeit, ist dann der Zustand für den Input - Kanal auf High.

Mein Wunsch an Euch, kann mir jemand den Code zusenden wenn,

Input 8 Zeile 1 vom LCD

  • high ist, das der Text kommt z.B. "Neuer Brief erh." , dies auf der Zeile 1 im LCD
  • low ist, das der Text kommt z.B "keine Brief erh." dies auf der Zeile 1 im LCD

Input 9 für Zeile 2 vom LCD

  • high ist " Pakett erhalten" für Zeile 2
  • low ist "kein Pakett" für Zeile 2

Was ich mal habe ist der Grund - Code. #include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{

lcd.begin();

lcd.backlight();
lcd.print("Kein Brief erh.");
lcd.setCursor(0,1);
lcd.print("Kein Pakett erh.");
delay(10000);

lcd.noBacklight();
lcd.begin();
}

void loop()

{

}

Danke und lieber Gruss
Roy

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
So ist er auch auf portablen Geräten lesbar. Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Hoi Tommy

Danke für das rasche Feedback. Wie von Dir gewünscht, habe ich den Code mit [code] und [/code]
rein kopiert. Die Option Codetags habe ich nicht gefunden. (Anfänger)

LG
Albin

[*code]

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{

lcd.begin();

lcd.backlight();
lcd.print("Kein Brief erh.");
lcd.setCursor(0,1);
lcd.print("Kein Pakett erh.");
delay(10000);

lcd.noBacklight();
lcd.begin();
}

void loop()

{

}

[*/code]

Du solltest meinen Beitrag nochmal aufmerksam lesen, besonders das waszum * dort steht.
Entferne bei der Änderung bitte auch die unnötigen Leerzeilen.

Gruß Tommy

Und zu allem gibt es ein How to, man muss es einfach nur lesen.

Hallo

Da ohne Leerzeichen.

[code]
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
lcd.begin();
lcd.backlight();
lcd.print("Kein Brief erh.");
lcd.setCursor(0,1);
lcd.print("Kein Pakett erh.");
delay(10000);
lcd.noBacklight();
lcd.begin();
}
void loop()
{
}
[
/code]

Lieber Gruss Roy

Ok.....liest du mal, was man dir schreibt ?
Und siehst du dir auch an, was du postest ?

Lösche mal die Sterne aus deinen Code-Dingens raus und schau was passiert.

Es sollte so aussehen:

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

Und ja, das ist in der Tat wichtig.

Roy63:
Mein Wunsch an Euch, kann mir jemand den Code zusenden ...

Dieses Forum bietet Hilfe zur Selbsthilfe von Leuten, die in ihrer Freizeit hier aktiv sind.

Hoi Today

Danke für die Hilfe.

Kannst Du mir bitte den ganzen Code senden. Bin wie gesagt, ein totaler Anfänger auf diesem Gebiet.

Danke

LG
Albin

Roy63:
Hoi Today

Danke für die Hilfe.

Kannst Du mir bitte den ganzen Code senden. Bin wie gesagt, ein totaler Anfänger auf diesem Gebiet.

Danke

LG
Albin

Und warum machst du nicht erst mal das, worum wir dich 3mal gebeten haben ?
Dann kann jeder deinen Sketch richtig lesen.

Hallo,

wenn du es auf die harte Tour möchtest ... lcd ist nicht getestet.
Bei solchen Anfragen hilft immer Schocktherapie.

//  https://forum.arduino.cc/index.php?topic=664679.0

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

const byte ANZAHL_ZEILEN = 2;
LiquidCrystal_I2C lcd(0x27, 16, ANZAHL_ZEILEN);

enum class state : byte {RELEASE, MONITOR};   // Serielle Ausgaben deaktivieren oder aktivieren
state debug = state::MONITOR;

const char text1[] PROGMEM = "Brief erhalten";
const char text2[] PROGMEM = "Paket erhalten";

struct Daten {
  const byte pin;
  char text[18];

  Daten (byte p, const char* data = nullptr) :
    // Initialisierungsliste
    pin(p)
  {
    if (data != nullptr)
    {
      strlcpy_P(text, data, sizeof(text));
    } 
    else
    {
      *text = '\0';
    }
  }
};

Daten KOMBI[ANZAHL_ZEILEN] =
{
  {8, text1},             // Pin, Text
  {9, text2},
};

void setup() {
  if (debug == state::MONITOR)
  {
    Serial.begin(9600);
    Serial.println("\nStart");
  }

  lcd.begin();

  for (byte i = 0; i < ANZAHL_ZEILEN; i++)
  {
    pinMode(KOMBI[i].pin, INPUT_PULLUP);

    if (debug == state::MONITOR)        // Kontrollausgaben
    {
      Serial.print(F("pin: "));
      Serial.print(KOMBI[i].pin);
      Serial.print(F(" Text: "));
      Serial.print(KOMBI[i].text);
      Serial.println();
    }
  }
}

void loop()
{

  textAusgabe( pinAbfrage() );

  delay(100);
}


byte pinAbfrage()
{
  static byte pinIndex = 255;

  for (byte i = 0; i < ANZAHL_ZEILEN; i++)
  {
    if ( !digitalRead(KOMBI[i].pin) )
    {
      pinIndex = i;
    }
  }

  return pinIndex;
}


void textAusgabe(const byte index)
{
  static byte oldIndex = 255;

  if ((oldIndex != index) && (index < ANZAHL_ZEILEN))
  {
    oldIndex = index;
    lcd.clear();
    lcd.setCursor(0, index);
    lcd.print(KOMBI[index].text);

    if (debug == state::MONITOR)      // Kontrollausgaben
    {
      Serial.print(KOMBI[index].pin);
      Serial.print('\t');
      Serial.println(KOMBI[index].text);
    }
  }
}

Hoi Today

Mein Gott, dass ist ja ein langer Code. Ich bewundere Leute, die das so aus der Hand schreiben. :slight_smile:

Ich habe dein Code installiert und er passt fast.

  • Wenn ich den Eingang 8 mit Minus ansteuere, kommt wie gewünscht "Brief erhalten". Super!
    Wenn ich nun das Minus vom 8 entferne, bleibt leider der Text stehen. Der Text sollte aber nicht mehr
    angezeigt werden. Wie gesagt, steuere ich den Zustand von Eingang 8 und 9 über das bistabil Relais.

  • Wenn ich den Eingang 9 mit Minus ansteuere, kommt wie gewünscht " Paket erhalten". Leider verschwindet dann der Text von Zeile 1, auch wenn das Minus von 8 noch aktiv ist. Auch kann ich den Text nur noch mit einem Hard Reset entfernen.

Ich versuche nochmals meinen Wunsch zu beschreiben.

Während Eingang 8 mit Minus versorgt wird, sollte der Text "Brief erhalten" auf Zeile 1 angezeigt werden. Wenn Minus auf 8 nicht mehr vorhanden ist. Dann sollte kein Text mehr angezeigt werden.

Das selbe bei Eingang 9, unabhängig vom Eingang 8. Während der Zeit wo 9 mit Minus versorgt wird, sollte der Text "Paket erhalten" angezeigt werden. Wenn Minus auf 9 nicht mehr vorhanden ist, dann sollte der Text auf Zeile 2 wieder gelöscht werden.

Wenn Möglich, bitte den angepassten Code in ganzer Form senden.

Danke und lieber Gruss
Roy

Roy63:
Wenn Möglich, bitte den angepassten Code in ganzer Form senden.

Das ist wohl ein Witz.
Du ignorierst mehrfach unsere Beiträge, verlangst aber, das die Helfer deine Arbeit machen.
Ist schon sehr Aufdringlich.

Hallo,

ich sagte ja Schocktherapie. Vielleicht wirkt es.
Tja, die kleinen Anpassungen musste selbst machen. Die Eingänge werden bei mir standardmäßig auf low abgefragt.
pinMode ändern und die Negation bei der Abfrage rausnehmen. Sämtliche Zugriffe sind Index gesteuert.
Ansonsten ist das so wie gewünscht, löschen wenn du resetest.

Ansonsten ist mir deine Aufforderung auch zu plump um irgendwelche weiteren Änderungen vorzunehmen.
C++ lernen, Sketch lesen, abändern.

Lieber Dieter

Es tut mir leid, wenn ich was verpasst habe. Es geht auch nicht darum, dass jemand meine Arbeit macht. Leider ist es auch nicht gemacht, dass man den Start - Kit von Arduino durcharbeitet. Wie man auch sagt, es ist noch kein Meister vom Himmel gefallen. Gerne möchte ich selber auch keine Hilfe in Anspruch nehmen, aber es können nicht alle Profi sein.

Lieber Gruss Roy

:o

Roy63:
aber es können nicht alle Profi sein.

Aber es können alle lernen, wenn sie es denn wollen.

Gruß Tommy

Roy63:
Leider ist es auch nicht gemacht, dass man den Start - Kit von Arduino durcharbeitet.

Das was Du da willst, sollte sich auch mit dem Wissen aus dem Starterkit realisieren lassen.

Man muss es nicht gleich so wild treiben wie Doc_Arduino :wink:

Roy63:
Es tut mir leid, wenn ich was verpasst habe. Es geht auch nicht darum, dass jemand meine Arbeit macht. Leider ist es auch nicht gemacht, dass man den Start - Kit von Arduino durcharbeitet. Wie man auch sagt, es ist noch kein Meister vom Himmel gefallen. Gerne möchte ich selber auch keine Hilfe in Anspruch nehmen, aber es können nicht alle Profi sein.

Du hast nichts verpasst, du hast einfach nur ignoriert.
Es steht ja immer noch zum Lesen hier im Forum.

Einfach nur Lesen und lernen wollen. Davon sehe ich nichts bei dir.
Und das lernen fängt damit an, dass man hier mitliest.

Auch die Hilfestellungen, die wir dir geben. Die hast du aber bisher ignoriert.
So wird das nichts mir dem Lernen.

Hi

@Doc - netter Sketch ... wäre mir aber nach dem Auftritt wohl nicht passiert.
Dein Sketch kann einfach schon zu viel - ok, nicht wirklich für ein zartes Anfänger-Gemüt, im Gegenteil wäre ich froh, meine sämtlichen ske(p)t(is)ch(en) Ausfälle sähen so aus :slight_smile:

Endlich Mal Einer, wo die Shift-Taste nicht im Friday_for_future-Modus hängt und dann dermaßen ignorant (Ja, damit meine ich, daß Du SÄMTLICHE, Dir gegebenen Infos schlicht ignoriert hast).

MfG

Hallo,

das struct mit Zeigerzugriff/Progmem hatte Whandall einmal gezeigt. Erspart Kopierorgien mit Buffer zur Laufzeit. Alles in allen angewandtes Wissen bzw. Erlerntes. Es ist im Grunde wie immer. Viel lesen, verstehen lernen und letztlich anwenden können. Zwischendurch auch einmal eine Frage stellen und Rückschläge verkraften.

Wenn es der TO selbst machen möchte, sollte er in Teilbereichen anfangen. Pins gezielt abfragen. Mit dem Display spielen. Zusammenhänge verstehen und Pinabfrage mit Display kombinieren. usw. Auf Progmem und Zeiger kann er verzichten. Auf das struct auch, sind nur 2 Pins. Selbst hartes delay darf er hier verwenden. Ideale Voraussetzungen für Anfänger.