char in int umwandeln

Gast #5699670
Lesenswert?

Hallo!

ich muss für eine Diplomarbeit an meiner Schule (bin absoluter 
Einsteiger im Mikrocontroller programmieren!) aus einem MPU6050 Winkel 
x,y,z auslesen und auf einen MQTT Server hochladen. Diese werden dann in 
einem Topic published, und von einem anderen Mikrocontroller wieder 
ausgelesen aus diesem Topic. Nun kommen diese Nachrichten aber als 
String an und ich bräuchte aber wieder die Zahlenwerte!
Gibt es hier einen command mit welchem ich das irgendwie umwandeln kann?

Anbei mein bisheriger Sketch, der großteils auf dem MQTT ESP 8266 
example der MQTT library besteht!

Danke für jegliche Antworten!
Angehängte Dateien:
#5699688
Lesenswert?

Felix E. schrieb:
> Also kann ich beispielsweise das so lösen:
>
> char char_angle_x[] = "100";
> int angle_x= atoi(char_angle_x);
>
> Mein Gedanke:
>
> ich lese den String aus dem besagten Topic aus und definiere ihn. Dann
> eben mit atoi die Umwandlung und dann kann ich schon den Zahlenwert
> verwenden?

Sieht erstmal soweit sinnvoll aus.

Genaueres hängt davon ab, in welchem Format die Daten vorliegen die Du 
bekommst.
#5700443
Lesenswert?

Danke für die zahlreichen Anworten!

Nun habe ich noch ein Problem.
Ich lade die Werte auf das Topic des MQTT Servers.
Danach möchte ich das selbe Topic abonnieren und die Werte auslesen. 
Dazu brauche ich eben die atoi Funktion (wobei atoi in int umwandelt 
oder? ich denke float Werte wären besser..) um wieder Zahlenwerte zu 
erhalten. Durch "client.subscribe("Topic");" abonniere ich ja das Topic, 
aber wie kann ich mir dann die neuen Nachrichten im Serial Monitor 
anzeigen lassen, bzw. wie kann ich sagen, dass eine neue Nachricht 
sofort durch die atoi() Funktion laufen soll und anschließend in einer 
Variable gespeichert wird, die einfach immer bei einem neuen Wert 
überschrieben wird?
#5700469
Lesenswert?

Laut Herr Internet kannst/musst du eine Callback Funktion angeben die 
bei einem Empfang aufgerufen wird:
1
client.setCallback(callback);

In ihr kannst du entweder die Zahl direkt zerlegen oder einfach nur 
sichern und in der Main in Ruhe.
Je nach dem was deine Timinganforderungen besser erfüllt.

EDIT: ich sehe gerade in deinen Code das du das bereits gemacht hast. 
Also nur noch nutzen. Ob float oder int liegt daran wie du deine Zahl 
überträgst. Das sehen hier wir nicht. Wie sieht denn der empfangene 
String aus?
#5700907
Lesenswert?

void callback(char* topic, byte* payload, unsigned int length)
{
  Serial.print("Message arrived [");
  Serial.print(topic);
  Serial.print("] ");
  for (int i = 0; i < length; i++)
    {
    atoi((char)payload[i]);
    Serial.print((char)payload[i]);
    }
  Serial.println();

}

bei der atoi Zeile bekomme ich folgenden Fehler:

invalid conversion from 'byte {aka unsigned char}' to 'const char*' 
[-fpermissive]

Wie kann ich das ändern?
#5701031
Lesenswert?

atoi möchte als Parameter ein C-String haben und gibt das Ergebnis als 
Rückgabewert zurück.

Wenn die Payload nur aus dem Zahlenwert besteht reicht
1
int wert;
2

3
wert = atoi((char *)payload);
Funktioniert auch bei atof, dann sollte wert aber vom Typ float (oder 
double) sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren