Hallo,
ich habe folgendes Problem und suche schon seit Stunden nach einer Lösung:
ich habe einen RFID Adapter MFRC522 mit dem ich die Chipkarten auslese und mit fogendem Code in einen Dezimalwert umwandle:
long code=0;
for (byte i = 0; i < mfrc522.uid.size; i++)
{
code=((code+mfrc522.uid.uidByte_)10);_
}
Klappt super. Ich bekomme einen Dezimalwert wie z.B.: 2485790
Jetzt möchte ich eine Funktion schreiben, die eine Textdatei auf einer SD Karte ausliest, die im Prinziep wie eine CSV Datei aufgebaut ist:
2485790;Herr Zufall;ET-13
2501230;Frau Mustermann;ET-15
Soweit auch kein Thema. Im Folgenden Code übergebe ich den RFID-Code an die Funktion und möchte die ausgelesene Zeile aus der Datei mit strstr prüfen, ob der Code in der aktuell ausgelesenen Zeile vorhanden ist. Das Problem ist, dass er beim Comilpieren immer in der Zeile strstr anhält und folgenden Fehler bringt:
_invalid conversion from 'long int' to 'const char' [-fpermissive]_
Ich finde keine Möglichkeit den RFID-Code (long int) mit der Variable line (char) zu vergleichen. Ich möchte lediglich wissen, ob der RFID-Code in der Datei existiert, und wenn ja, die Zeile auslesen und in Arrays aufsplitten. Wenn ich in der strstr Zeile den codepub durch "2485790" ersetze, funktioniert es einwandfrei. Ich brauch eben aber eine Variable, die ich mit dem Inhalt vergleichen kann...
Ein konvertieren der long int in einen char verändert den Inhalt.
Vielleicht hat jemand eine IDEE wie man das noch machen könnte??
Hier die (noch nicht ganz fertige) Funktion:
void pupil(long codepup){
-
char line[40];*
-
int c;*
-
uint32_t pos;*
-
int i = 0;*
-
// open test file*
-
SdFile rdfile("pupil.csv", O_RDWR);*
-
if (!rdfile.isOpen()) {*
-
Serial.println("Couldn't find pupil.csv");*
-
Serial.println("");*
-
}*
-
else*
-
{*
-
rdfile.rewind();*
-
while ((c = rdfile.read()) >= 0)*
-
{Serial.write(c);}*
-
rdfile.rewind();*
-
while(1){*
-
if (rdfile.fgets(line, sizeof(line)) < 0) {*
-
Serial.println("Line not found");*
-
break;*
-
}*
-
Serial.write("line=");*
-
Serial.write(line);*
-
if (strstr(line,codepup)) {*
_ Serial.println("Karte gefunden");_ -
}*
-
i++;*
-
if (i>=3) break;*
-
}*
} -
// close*
-
rdfile.close();*
}