Hallo,
ich empfange Wetterdaten mittels MQTT-Subscribe. Den empfangenen String möchte ich nach Integer wandeln um die Zahl mit einer 7-Segmentanzeige anzuzeigen. Ich lese die ankommenden Zeichen in ein char Array (msg). Danach möchte ich die einzelnen Werte des Arrays in ein Integer wandeln, aber leider sthet in meiner Integervariable nicht die Zahl sondern der zugehörige Ascii-Wert. Hier die Funktion und die zugehörige Ausgabe:
void callback(char* topic, byte* payload, unsigned int length) {
char wind[] = "home/aussen/wind";
char temperature[]= "home/funkbude/temperature";
char pressure[] = "home/funkbude/pressure";
char humidity[] = "home/funkbude/humidity";
char msg[10];
char s = '0';
int gleich = 0;
int empfangeneZahl = 0;
int toInteger = 0;
Serial.println(" ");
Serial.println(" ");
Serial.print("Nachricht angekommen [");
Serial.print(topic);
Serial.println("] ");
Serial.print("Die Länge der Nachricht ist: ");
Serial.println(length);
Serial.println("----------------");
// auf !gleich prüfen weil bei Gleichheit 0 zurückgeliefert wird
if(!(strcmp(topic, wind)))
{
Serial.println("Wind empfangen!");
}
else if (!(strcmp(topic, temperature)))
{
Serial.println("Temperatur empfangen!");
for (int i = 0; i < length; i++)
{
msg[i] = payload[i];
}
msg[length] = '\0';
Serial.println(msg);
//Test fuer einzelne Digits
for (int i = 0; i < length; i++)
{
Serial.print("msg[");
Serial.print(i);
Serial.print("] ");
Serial.println(msg[i]);
}
Serial.print("Einer: ");
[b]s = msg[1];[/b]
[b]empfangeneZahl = int(s);[/b]
Serial.print(empfangeneZahl);
}
else if (!(strcmp(topic, humidity)))
{
Serial.println("Luftfeuchtigkeit empfangen!");
}
else if (!(strcmp(topic, pressure)))
{
Serial.println("Luftdruck empfangen!");
}
else
{
Serial.println("Was anderes empfangen!");
}
/*
for (int i = 0; i < length; i++) {
Serial.println((char)payload[i]);
}
*/
for (int i = 0; i < length; i++)
{
msg[i] = payload[i];
}
msg[length] = '\0';
//int laenge = strlen(msg);
//msg[length+1] = "\0";
Serial.println("");
Serial.println("Die Empfangene Message lautet: ");
Serial.println(msg);
// Switch on the LED if an 1 was received as first character
if ((char)payload[0] == '1') {
digitalWrite(BUILTIN_LED, LOW); // Turn the LED on (Note that LOW is the voltage level
// but actually the LED is on; this is because
// it is active low on the ESP-01)
} else {
digitalWrite(BUILTIN_LED, HIGH); // Turn the LED off by making the voltage HIGH
}
}
Hier die Ausgabe:
16:02:33.034 -> Nachricht angekommen [home/funkbude/temperature]
16:02:33.034 -> Die Länge der Nachricht ist: 5
16:02:33.034 -> ----------------
16:02:33.034 -> Temperatur empfangen!
16:02:33.034 -> 25.93
16:02:33.034 -> msg[0] 2
16:02:33.034 -> msg[1] 5
16:02:33.034 -> msg[2] .
16:02:33.034 -> msg[3] 9
16:02:33.034 -> msg[4] 3
16:02:33.034 -> Einer: 53
16:02:33.034 -> Die Empfangene Message lautet:
16:02:33.034 -> 25.93
16:02:33.034 ->
16:02:33.034 ->
16:02:33.034 -> Nachricht angekommen [home/funkbude/humidity]
16:02:33.034 -> Die Länge der Nachricht ist: 5
16:02:33.034 -> ----------------
16:02:33.034 -> Luftfeuchtigkeit empfangen!
16:02:33.067 ->
16:02:33.067 -> Die Empfangene Message lautet:
16:02:33.067 -> 33.61
Wie man oben sieht zeigt er mir anstatt der '5' (Einer) von den 25.3 °C den Ascii Code von 5 (53) an. Gibt es eine Funktion die mir das direkt umwandelt oder muß ich mir das mit einer 'case' selbst schreiben?
Ich bin für jede Hilfe die mich weiter bringt dankbar!
Vielen Dank schon mal.
Gruß
Roger
