Hallo Leute,
ich komme gerade nicht weiter, vielleicht kann mir jemand weiter helfen. Es geht um folgendes, ich empfange über die serielle Schnittstelle eine Zeichenkette mit 32 Zeichen. Dabei handelt es sich um hex-Werte, welche ich als ASCII-Zeichen darstellen möchte.
Beispiel, folgendes wird empfangen:
FL022020202053544552454F20202020
Die ersten vier Zeichen müssen ignoriert werden, danach bilden immer jeweils zwei Zeichen einen hex-Wert:
20 20 20 20 53 54 45 52 45 4F 20 20 20 20
Werden die hex-Werte in ASCII umgewandelt, ergibt das das Wort STEREO
Ich lese die Daten der seriellen Schnittstelle in ein char array ein. Probleme habe ich jetzt jedoch dabei, jeweils zwei Zeichen zu einem hex-Wert zusammenzufassen und den Wert dann auszugeben.
Ich stelle mir das so vor, buffer[4] + buffer[5] zusammenfassen und mit Serial.write ausgeben. Muss ich aber wohl noch ein “0x” voranstellen, damit die beiden Werte als Hex-Wert erkannt werden? Jemand eine Idee um das elegant zu lösen?
Ziel ist es später, die Daten im lesbaren Format über ein LCD auszugeben.
Danke, Gruß
void setup()
{
Serial.begin(115200);
}
void loop()
{
static char buffer[80]; //Anzahl der einzulesenden Zeichen
int laenge = (readline(Serial.read(), buffer, 80)); //laenge = Anzahl der eingegebenen Zeichen
if (laenge > 0) {
Serial.print("Eingabe: ");
Serial.println(buffer);
Serial.print("Anzahl Zeichen: ");
Serial.println(laenge);
Serial.println("----------------------");
if (strncmp(buffer, "FL02", 4) == 0)
{
Serial.println("Zeichenkette erkannt:");
Serial.println(buffer+4);
}
}
}
// Funktion zum Einlesen der seriellen Eingabe, Rückgabewert entspricht der Anzahl der Zeichen
int readline(int readchar, char *buffer, int len)
{
static int pos = 0;
int rpos;
if (readchar > 0) {
switch (readchar) {
case '\n': // Ignore new-lines
break;
case '\r': // Return on CR
rpos = pos;
pos = 0; // Reset position index ready for next time
return rpos;
default:
if (pos < len-1) {
buffer[pos++] = readchar;
buffer[pos] = 0;
}
}
}
// No end of line has been found, so return -1.
return -1;
}