RFID RDM6300

Hallo,

ich experimentiere gerade mit einem Uno und dem RFID-Reader RDM6300.
Das ist mein Programm.

#include <SoftwareSerial.h>

String card_00 = "0000000000";

String card_01 = "0A00704893";
char card_02[] = "0A00704854"; 
char card_03[] = "0B002B076B"; 
char card_04[] = "0A00734AEA"; 
char card_05[] = "0A007334CB"; 
char card_06[] = "0B002835D4"; 
char card_07[] = "0B002805C3"; 
char card_08[] = "0B002442E0"; 
char card_09[] = "0A006516EC"; 
char card_10[] = "0B002F218A"; 
char card_11[] = "0B002F24BD"; 
char card_12[] = "0B00231F1B"; 
char card_13[] = "0B002FF1EC"; 
char card_14[] = "0A0077518F";
char card_15[] = "0B00346D39";

char chip[11];


int i = 0;
int cardnumber = 0;

const int rxPin = 3;
const int txPin = -1;
const int rfidBaud = 9600;
SoftwareSerial rfid(rxPin, txPin);

const int startZeichen = 02;
const int kennungLaenge   = 10;


int bytesGelesen = 0;

void setup()
{
  Serial.begin(9600);
  rfid.begin(rfidBaud);
}

void loop()
{
  if (rfid.available() >=  kennungLaenge)
  {
    if(rfid.read() == startZeichen)
    {
      bytesGelesen = 0;

      while(bytesGelesen < kennungLaenge)
      {
        char zeichen = rfid.read();
        chip[bytesGelesen] = zeichen;
        bytesGelesen ++;
      } 
      chip[bytesGelesen] = 0;
      card_01 = chip;
      Serial.println(chip);
     
  //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!   
     
 if (chip == card_01) //line64
     {
      Serial.println("test"); 
     }
     
    }

  }




}

Beim überprüfen bekomme ich diese Fehlermeldung: rfid_4:64: error: no match for ‘operator==’ in ‘chip == card_01’

Ich habe schon einige Varianten für if-Anweisung ausprobiert aber es geht nicht.

Was habe ich falsch gemacht?

Sei froh, dass du eine Fehlermeldung gekriegt hast!

Du suchst eigentlich die Funktion strcmp, mit der du zwei Texte vergleichen kannst.

jstjst:
Was habe ich falsch gemacht?

Bei Dir ist "chip" ein char-Array und "card_01" ein String-Objekt.

Du kannst nicht inkompatible Datentypen mit == vergleichen.

String-Objekte werden mit "==" verglichen und char-Arrays mit "strcmp".

Dein Programm ist ein wildes Sammelsurium von String-Objekten und char-Arrays:

String card_00 = "0000000000";
String card_01 = "0A00704893";
char card_02[] = "0A00704854"; 
char card_03[] = "0B002B076B";

Übrigens: Auf String-Objekte solltest Du beim Programmieren von Mikrocontrollern komplett verzichten, da Du damit potentiell Programme schreibst, die zu viel RAM-Speicher benötigen und langsamer funktionieren als notwendig, und "String" darüber hinaus ein Datentyp ist, der zu Dutzenden von nützlichen Library-Funktionen der AVR libc Library komplett inkompatibel ist.

Danke für die Tipps.

Gibt es zu strcmp einen Eintrag in der Referenz?

Das mit den Strings entstand im laufe der Experimente ,aber danke für den Tipp

jstjst:
Gibt es zu strcmp einen Eintrag in der Referenz?

Ja, die steht natürlich bei den Stringfunktionen der AVR libc Library:
http://www.nongnu.org/avr-libc/user-manual/group__avr__string.html#ga46f3cbd2de457c0fb340a1f379fc33ba

Wenn Du darüber hinaus Erklärungen benötigst: Das ist eine Standard-C Funktion, die überall dort erklärt wird, wo in Manuals und Tutorials Anfängerprogrammierung in C oder C++ erklärt wird. Allerdings sind solche Tutorials meist für PC-Programmierung mit einer Tastatur als Standardeingabegerät und einem Monitor als Standardausgabegerät, so dass die Ein- und Ausgabefunktionen in PC-Programmierbeispielen dann nicht funktionieren (Mikrocontroller haben keine Standard-Ein-/Ausgabegeräte) wie z.B.:
http://www.cplusplus.com/reference/cstring/strcmp/
Also bei den Programmierbeispielen mußt Du auf solchen Seiten Abstriche machen, die Erklärungen treffen aber zu.