[gelöst] Wert auslesen

Moin, Moin

Hallo Leute, ich hab da mal ein Problem. Vielleicht kann mir ja mal jemand auf die Sprünge helfen.
Irgenwie dreh ich mich im Kreis.
Ich hab hier einen Arduino Mega mit Bluetooth Modul und LCD am laufen.
Folgendes will ich haben. Ich gebe den Buchstaben "A" für LED einschalten im Handy ein und "B" für LED ausschalten.
Das geht auch einwandfrei. Aber ich will auf der LCD Anzeige diesen A oder B angezeigt bekommen.
Was er mir anzeigt ist aber immer nur 1 oder 0 also offenbar nur den HIGH oder LOW Zustand von Pin 3.
Hab ich da einen Denkfehler..................
Ich hab den Sketch mal auskommentiert so wie ich ihn verstehe.

#include <LiquidCrystal.h> // Bibliothek einbinden
const int rs = 7, en = 8, d4 = 9, d5 = 10, d6 = 11, d7 = 12; // LCD Pinbelegung am Arduino
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);  // benutzte Pin's am LCD
#define LED  3                      // Name der Konstante (LED) dann Wert (3)
int data;                           // Integer Variable (data) wird in Zeile 15 mit Wert aus Serial.read gefüllt
boolean Diode = true;              // Logischer Wert 0 (low/false) oder 1 (high/true)
void setup() {
  pinMode(LED, OUTPUT);             // den Wert "LED" (3) als Ausgang setzen
  Serial.begin(9600);               // Serielle Schnitstelle mit 9600 Baud
  lcd.begin(16, 2);                 // LCD 16 Zeichen und 2 Reihen
}
void loop() {
  if (Serial.available() > 0)       // Ermittelt, wie viele ungelesene Bytes am seriellen Port verfügbar sind
  {
    int data = Serial.read();       // Wert aus "Serial.read" wird in die Integer Variable "data" geschrieben
    lcd.clear();                    // Anzeige LCD löschen
    lcd.setCursor(5, 0);            // Cursor LCD auf Spalte 5 in der 1 Reihe setzen
    lcd.print(Diode);               // Wert aus der Variablen "Diode" auf dem LCD ausgeben
    if (Diode)                      // wenn die Variable "Diode" den (High) oder den (Low) Wert hat....
    {
      digitalWrite(LED, HIGH);      // dann tue das...
    }
    else                            // wenn nicht dann....
    {
      digitalWrite(LED, LOW);       // tue dies
    }
    switch (data)                   // Eine switch-Anweisung vergleicht den Wert einer Variablen mit den Werten
                                    // aus den case-Anweisungen
    {
      case 'A': Diode = true; break;
      case 'B': Diode = false; break;
    }
  }
}

Wäre dankbar für einen Stoß in die richtige Richtung

Reinhard [

Was gibst Du denn mit lcd.print() aus?

Eigentlich sollte in der Variablen "Diode" der Eingabewert vom Handy stehen also A oder B aber dem ist offensichtlich nicht so. Da kommt immer der HIGH oder LOW Pegel von Pin 3.

Was soll eine boolean Variable anders beinhalten als 0/1 oder true/false?
Suche doch einfach mal, wo Diode ein Wert zugewiesen wird.

Hmm, eigentlich sollte "Diode" hier ihren Wert vom Handy A oder B bekommen

 if (Diode)                      // wenn die Variable "Diode" den (High) oder den (Low) Wert hat....
    {
      digitalWrite(LED, HIGH);      // dann tue das...
    }
    else                            // wenn nicht dann....
    {
      digitalWrite(LED, LOW);       // tue dies
    }
    switch (data)                   // Eine switch-Anweisung vergleicht den Wert einer Variablen mit den Werten
                                    // aus den case-Anweisungen
    {
      case 'A': Diode = true; break;
      case 'B': Diode = false; break;
    }

den ich dann über Serial.read

int data = Serial.read();       // Wert aus "Serial.read" wird in die Integer Variable "data" geschrieben
    lcd.clear();                    // Anzeige LCD löschen
    lcd.setCursor(5, 0);            // Cursor LCD auf Spalte 5 in der 1 Reihe setzen
    lcd.print(data);               // Wert aus der Variablen "Diode" auf dem LCD ausgeben
    if (Diode)                      // wenn die Variable "Diode" den (High) oder den (Low) Wert hat....

wieder auslese.
Ich hab jetzt mal "data" als lcd.print eingegeben aber dann bekomme ich auf dem LCD immer eine "13" egal ob LED an oder aus, sehr merkwürden.....

Was soll eine boolean Variable anders beinhalten als 0/1 oder true/false?

wenn ich mir das so im nachhinein ansehe hab ich mir diese Frage beim Auskommentieren bereits selbst beantwortet :smiling_imp: also ist die Abfrage über die "Diode" eigentlich Quatsch...

Das ist ja nur Chaos :slight_smile:

In Diode schreibst du ja niemals A oder B rein, sondern in Abhängigkeit von data 0 true oder false !

Wenn du Diode das erste mal testest hast du in loop noch gar nichts reingeschrieben.
Erst nachdem du mit dem undefinierten Werd schaltest schreibst du im switch true ode false rein.
'A' oder 'B' dürfte nur in data stehen da du das mit Serial.read() füllst.
Da data ein int ist schreibt lcd.print natürlich auch einen int raus. Willst du das Zeichen sehen must
du Lcd.print((char) data) schreiben.
Wie das jetzt eine 13 reinkommt ist ist klar. Von deinem Handy kommt warscheinlich A\n.
Also zwei Zeichen A (oder B) und ein Zeilenvorschung 0x0D oder 13. Da du mit super Tempo immer
auf die selbe Stelle ausgibst siehst du das A gar nicht. Weil dann ruckzuck die 13 kommt.
Achso, A würdest du eh nicht sehen sondern 65 dann setcursor und sofort komm die 13.
Mach mal nur zum testen delay(500) vor dem LCD.print und du wirst die 65 (A) oder 66 (B) sehen !

Ulli

Es geht, ich fass es nicht
Ich hab jetzt nur mal "Lcd.print((char) data) " geändert und im Handy den Carriage Return rausgenommen und es läuft einwandfrei.
Und da renn ich seit drei Tagen rum und find den Fehler nicht.....ich glaub ich muss noch viel lernen beim Arduino programmieren.

Vielen Dank jedenfalls für die schnelle Hilfe !

Gruss

Reinhard