Forum: Mikrocontroller und Digitale Elektronik Stringvergleich mit c


von Juan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

habe einen RFID Reader, der die ID Nr. einer ISO Karte auslesen kann. 
Was ich möchte ist der Vergleich der ID Nr. Die ID kann ich mit Hyper 
Terminal darstellen (siehe Anhang). Ziel ist, wenn eine erwartete ID Nr. 
kommt, leuchtet LED an Mega 16 an. Das ist einfach ein 
Stringvergleichsproblem. Anbei auch die Programmcode. Aber das geht bei 
mir nun nicht. Für die ID kann man 8 byte sehen, aber es gibt noch '\n' 
oder '\0' Zeichen dahinten. Deswegen nehme ich die erste 8 byte aus und 
lege in ein neuem StringArray. Aber es funzt auch nicht, die LED 
leichtet nicht.
Wenn mir hier jemand hilfen kann, bin ich sehr dankbar.


int tmp = 0;
int i,j,k = 0 ;

unsigned char ID[10];
unsigned char IDcopy[8];

int main(void)
{
  USART_Init(USART_BAUD);
  DDRA = 0xff;

  while(1)
  {
    for(i = 0; i < 10; i++)
    {
      tmp = USART_Receive();
      USART_Transmit(ID[i]);
      ID[i] = tmp;
    }

    for(j = 0; j < 8; j++)

      IDcopy[j] = ID[j];

    if(strcmp("E6285CA4",IDcopy) == 0)
      set_bit(PORTA,PA0);
    else clear_bit(PORTA,PA0);



  }

  return 0;
}

von Stefan E. (sternst)


Lesenswert?

Entweder du terminierst IDcopy korrekt, also:
1
unsigned char IDcopy[9];
2
...
3
    for(j = 0; j < 8; j++)
4
      IDcopy[j] = ID[j];
5
    IDcopy[8] = 0;

oder du verwendest strncmp, also:
1
if(strncmp("E6285CA4",IDcopy,8) == 0)

Im 2. Fall kannst du dir dann auch gleich das Kopieren ganz sparen, 
also:
1
if(strncmp("E6285CA4",ID,8) == 0)

von Juan (Gast)


Lesenswert?

Danke Stefan,

problem ist schon gelöst. Danke für deine Hilfe.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.