UND Verknüpfungen mit Negation und IF

Hallo alle miteinander,

Kürzlich habe ich ein kleines Testprogramm für ein LCD Display geschrieben, indem einfach nur ein kleiner Text auf einem Display angezeigt werden soll, diese Programm funktioniert auch wunderbar. :slight_smile:

Nun bin ich dabei dieses Programm zu erweitern indem mehrere verschiedene Texte angezeigt werden sollen, wenn 2 Eingangspins folgende zustände haben:

Pin 23 (LOW) und Pin 24 (LOW) → Text 1

Pin 23 (HIGH) und Pin 24 (LOW) → Text 2

Pin 23 (LOW) und Pin 24 (HIGH) → Text 3

Pin 23 (HIGH) und Pin 24 (HIGH) → Text 4

Hierzu Habe ich folgendes Programm geschrieben:

// INHALTE
//_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

//1. Definition
//2. Funktionsbeschreibung, Parameter
//3. SETUP
//4. LOOP
//_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

#include <LiquidCrystal.h>

const int DATAByte0 = 23;
const int DATAByte1 = 28;

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

// Beschreibung: “Anlagendiagnose”
//Anzeige von Steuerbefehlen einer Anlage über LCD Display,

//HARDW.: MEGA2560 mit 20x4 LCD Display

//TYP; Verwendung
//Zielort: ARDU, CM1 Komunikationsmodul, Anlagenbetriebszustand
// Projekt: Stellwerk

//______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
void setup() {
lcd.begin(20,4);

const int DATAByte0 = 23;
const int DATAByte1 = 28;

pinMode (DATAByte0, INPUT);
pinMode (DATAByte1, INPUT);

}
//______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
void loop() {

if (digitalRead (DATAByte0) != HIGH && (DATAByte1) != HIGH )
{
lcd.setCursor(0, 0);
lcd.print(“Text 1”);
lcd.setCursor(0, 1);
lcd.print(“23 LOW 28 LOW”);
delay(900);
lcd.clear();
}
if (digitalRead (DATAByte0) != LOW && (DATAByte1) !=HIGH )
{
lcd.setCursor(0, 0);
lcd.print(“Text 2”);
lcd.setCursor(0, 1);
lcd.print(“23 HIGH 28 LOW”);
delay(900);
lcd.clear();
}

if (digitalRead (DATAByte0) != HIGH && (DATAByte1) !=LOW )
{
lcd.setCursor(0, 0);
lcd.print(“Text 3”);
lcd.setCursor(0, 1);
lcd.print(“23 LOW 28 HIGH”);
delay(900);
lcd.clear();
}

if (digitalRead (DATAByte0)!=LOW && (DATAByte1) != LOW)
{
lcd.setCursor(0, 0);
lcd.print(“Text 4”);
lcd.setCursor(0, 1);
lcd.print(“23 HIGH 28 HIGH”);
delay(900);
lcd.clear();
}

}
//Programmende
//=================================================================================================================================================================

Ich bin nun schon div. am ausprobieren gewesen leider komme ich einfach nicht weiter.

Im Prinzip sind die Textnummern das Ergebnis aus Dualzahlen die an den Pins von extern anliegen
00=0
01=1
10=3
11=4

Kann mir jemand einen Tipp geben wie ich meinen Fehler im Programm behaben kann, oder hat vielleicht jemand sogar eine elegantere Lösung?

Über eure Hilfe wäre ich sehr dankbar

mit freundlichen Gruß

Marce

Hauptsächlich versuche mal:

if (digitalRead(DATAByte0) != HIGH && digitalRead(DATAByte1) != HIGH )

wobei auch geht

if (digitalRead(DATAByte0) = LOW && digitalRead(DATAByte1) = LOW )

Innerhalb von setup() nicht nochmal nötig:

const int DATAByte0 = 23;
const int DATAByte1 = 28;

Byte im Namen ist eher mißverständlich.

Ist es Pin 24 oder 28?

Bitte benutze code-Tags.

Willkommen im Forum!

Hallo agmue,

ich danke dir vielmals für deine schnelle und richtige Lösung, genau dieser Geistesblitz hat mir gefehlt , das Programm läuft wie ich es mir vorgestellt habe:)

es sind natürlich Pin 23 und Pin 28 und nicht wie im Text geschrieben Pin 24 :open_mouth:

Eine kleine Frage hätte ich da noch , wie Funktionieren die Code Tags?

Danke auch für den Wilkommensgruß, ich bin erst seit heute hier und werde mit Sicherheit durch eure Hilfe einiges dazulernen können:)

mit freundlichen Gruß

Marcel

if (digitalRead(DATAByte0) = LOW && digitalRead(DATAByte1) = LOW )

== vielleicht

Serenifly:
== vielleicht

== mit Sicherheit! Danke für’s Aufpassen :slight_smile:

Die Code-Tags bekommst Du mit dem Button </> links oben neben B.

Du kannst Deinen Beitrag nach fünf Minuten verändern!

MD-E:
… oder hat vielleicht jemand sogar eine elegantere Lösung?

Da steht viel Text, der sich wiederholt. Dafür gibt es Funktionen als Abkürzung:

void ausgabe(byte auswahl){
  lcd.setCursor(0, 0);
  if(auswahl==1){lcd.print("Text 1");}
  if(auswahl==2){lcd.print("Text 2");}
  if(auswahl==3){lcd.print("Text 3");}
  if(auswahl==4){lcd.print("Text 4");}
  lcd.setCursor(0, 1);
  if(auswahl==1){lcd.print("23 LOW 28 LOW");}
  if(auswahl==2){lcd.print("23 LOW 28 HIGH");}
  if(auswahl==3){lcd.print("23 HIGH 28 LOW");}
  if(auswahl==4){lcd.print("23 HIGH 28 HIGH");}
  delay(900);
  lcd.clear();
}

Nur mal so als ungetestete Anregung.

Da ist noch viel Luft nach oben, was Effektivität und Eleganz angeht.
Aber hier kommt es in erster Linie auf Verständlichkeit an. Das schliesse ich jedenfalls aus der Posts Anzahl und des Sketches