<p>因为这个问题在搜索引擎中排名很高,所以我想出了一个可行的解决方案。在</p>
<p>警告:除非需要全浮点精度,否则转换为字符串并发送(使用sprintf或dtostf,或使用<strong>连续打印(值,NumberOfDecimalPlaces)</strong><a href="http://arduino.cc/en/Serial/print" rel="nofollow noreferrer">(documentation)</a>)。这是因为以下解决方案a)不适用于具有不同端点的计算机;b)某些字节可能被误解为控制字符。在</p>
<p>解决方案:获取浮点数的指针,然后将其作为字节数组传递给串行写入(). 在</p>
<p>例如</p>
<pre><code>/*
Code to test send_float function
Generates random numbers and sends them over serial
*/
void send_float (float arg)
{
// get access to the float as a byte-array:
byte * data = (byte *) &arg;
// write the data to the serial
Serial.write (data, sizeof (arg));
Serial.println();
}
void setup(){
randomSeed(analogRead(0)); //Generate random number seed from unconnected pin
Serial.begin(9600); //Begin Serial
}
void loop()
{
int v1 = random(300); //Generate two random ints
int v2 = random(300);
float test = ((float) v1)/((float) v2); // Then generate a random float
Serial.print("m"); // Print test variable as string
Serial.print(test,11);
Serial.println();
//print test variable as float
Serial.print("d"); send_float(test);
Serial.flush();
//delay(1000);
}
</code></pre>
<p>然后为了在python中接收到这个,我使用了您的解决方案,并添加了一个函数来比较这两个输出,以便于验证。在</p>
^{pr2}$
<p>参考文献:
<a href="https://arduino.stackexchange.com/questions/5090/sending-a-floating-point-number-from-python-to-arduino">Sending a floating point number from python to arduino</a>和
<a href="https://stackoverflow.com/questions/3270967/how-to-send-float-over-serial">How to send float over serial</a></p>