ich verwende aktuell zwei Arduino Nano R3 mit jeweils einem RF26W Funkmodul. Die Funkverbindung (test mit dem Beispielsketch) funktioniert hervorragend.
Ich stehe gerade nur etwas auf dem Schlauch, wenn ich Messdaten (liegen als Float vor) versenden will. Ich bekomme die Floatvariable nicht als uint8_t konvertiert. Mein Beispielcode sieht wie folgt aus:
Dieser Ausschnit aus dem Quellcode funktioniert sehr gut. Ich habe aber mehrere Sensoren, die ich in einem String versenden möchte. Kann mir jemand von euch mitteilen, wie ich in das data[] array die Strings speichern kann?
Exemplarisch würden die Floatvariablen wie folgt vorliegen:
Die String Klasse sollte auf einem Arduino möglichst nicht verwendet werden, die üblichen C strings (char[]) funktionieren da besser.
Willst Du die Werte binär oder als Text übertragen? Für binär reicht ein typecast in ein Byte array, für Text kann sowas wie atof() und ftoa() zur Konvertierung verwendet werden.
Am besten wie gesagt direkt C strings verwenden. Ist mit Float etwas schwierig wegen der Limitation von printf(), aber wie oben gezeigt geht es über Umwege.
Ansonsten kommst du mit c_str() an das interne Array eines String Objekts. Nur für Lese-Zugriff aber es reicht für die Übergabe an eine Funktion die einen C String erwartet:
Von Serenifly habe ich was über union gelernt, spart eigentlich nur das Kopieren. Da ich es aber schonmal gemacht habe, gebe ich auch diese Variante zum Besten:
Das ist in diesem Fall viel zu weit ausgeholt. C/C++ ist nur schwach typisiert. Man kann also vieles einfach durch Casts erschlagen (auch Float nach Byte Array kann man durch Casts erledigen, auch wenn es nicht so sauber ist).
Man kann einfach char* auf unsigned char* oder const char* auf const unsigned char* casten.
Die Funktion hat const unsigned char* als Parameter. c_str() liefert einen const char*. Also einfach casten und gut ist.
Wenn man einen C String hat (d.h. ein char Array) hat, dann ist die Array Variable schon eine Adresse und diese kann dann natürlich auch auf unsigned char* gecastet werden.
uint_8t = unsigned char falls das immer noch nicht klar ist.
Ich verstehe aktuell nicht den Vorteil davon, ein uint8_t zu verwenden ....
Damit man auch einfach Binär-Daten verschicken kann. Dadurch dass Casts so simpel sind geht dann sowohl das als auch C Strings. Beides sind Arrays aus Bytes. Der winzige Unterschied ist signed oder unsigned.