Barcode Serial Input mit if abfragen

Hallo, ich würde gerne bei Scannen eines bestimmten barcodes "entermenuconfig" in die if Schleife geraten. Aber ich hab bereits diverses versucht und bin leider jedes Mal gescheitert, dabei sollte so eine if abfrage doch eigentlich pillefitz sein :confused:

Wieso bekomme ich die werte nicht verglichen ?
In der Serialausgabe hat die Variable "barcode" auch den wert "entermenuconfig" wenn ich den Barcode einscanne.

#define RXD2 16
#define TXD2 17
String barcode = "";

void setup() {
Serial.begin(9600);
    delay(10);
    Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
}


void loop()
{    
  
  while (Serial2.available()) {
    //Serial.print(char(Serial2.read()));
    barcode = barcode + char(Serial2.read());  
  }

                  
if(barcode == "entermenuconfig"){
Serial.println("BIN IN SCHLEIFE");
  delay(2000);
}

if(barcode != "" && barcode != "entermenuconfig"){

Serial.print("Der barcode ist:>");  
Serial.print(barcode);
Serial.println("<"); 
barcode = "";
}

}

Las Dir doch erstmal ausgeben was Du da tatsächlich empfangen hast.

Danke.
Mach ich weiter unten "Serial.print(barcode);".
Im Serial monitor hat die Variable "barcode" den Wert "entermenuconfig".
Die if abfrage "if(barcode != "")" funktioniert also und wird beim Scannen einmal durchlaufen.

tausche mal und scanne:
Was kommt auf dem SerMon raus?

void loop()
{
  while (Serial2.available())
  {
    //Serial.print(char(Serial2.read()));
    char myChar = char(Serial2.read());
    Serial.print(myChar, HEX); Serial.print(" ");
    barcode = barcode + myChar;
  }
  Serial.println();
  if (barcode != "")
  {
    Serial.println(barcode);
    barcode = "";
  }
}

[quote="chris1986mg, post:1, topic:954513"]

while (Serial2.available()) {
    //Serial.print(char(Serial2.read()));
    barcode = barcode + char(Serial2.read());  
Serial.println(barcode);
  }

Da wird angezeigt ob der "barcode" wurde ausgelesen.

Serial Monitor gibt aus:

65 6E 74 65 72 6D 65 6E 75 63 6F 6E 66 69 67 D 
entermenuconfig

vielleicht habe ich mich falsch ausgedrückt. Die "if(barcode != "")" schleife funktioniert, jedoch möchte ich wenn ich den barcode "entermenuconfig" scanne in einer extra if schleife gelangen "if(barcode == "entermenuconfig")".

Der gescannte Barcode wird richtig im SerialMonitor ausgegeben, jedoch bekomme ich den nicht in der if schleife verglichen.

Wie Du siehst, bekommst Du mehr Zeichen in HEX ausgegeben, als entermenueconfig enthält.
Das D ist ein ASCII(13) - oder kurz ein Steuerzeichen.

Ersetze:

  while (Serial2.available())
  {
    //Serial.print(char(Serial2.read()));
    char myChar = char(Serial2.read());
    Serial.print(myChar, HEX); Serial.print(" ");
    if (isPrintable(myChar))
    barcode = barcode + myChar;
  }
1 Like

:heart: Danke Danke Danke :slight_smile:
So klappt es. Dabei habe ich den Scanner eigentlich gesagt er soll nichts hinterher senden.
Wieder etwas wertvolles dazu gelernt, wenn Gleichungen nicht klappen die dinge in HEX ausgeben :+1:

:slight_smile: Wenn man sich blind auf etwas verlässt, was man nicht selbst überprüft hat...
Ansonsten, ich mache das anders, indem ich überprüfe, ob es kein Steuerzeichen ist:

    if (!isControl(myChar))

Das erschlägt alles.

1 Like

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.