arduino から python に浮動小数点データを送信しようとしています。データは、改行文字 ('\n') が続く 8 つの連続するバイト データ (倍精度のサイズ) として送信されます。これらの連続するバイトを収集して変換する方法Python 側 (システム側) での適切な形式
void USART_transmitdouble(double* d)
{
union Sharedblock
{
char part[sizeof(double)];
double data;
}my_block;
my_block.data = *d;
for(int i=0;i<sizeof(double);++i)
{
USART_send(my_block.part[i]);
}
USART_send('\n');
}
int main()
{
USART_init();
double dble=5.5;
while(1)
{
USART_transmitdouble(&dble);
}
return 0;
}
確かに、これはデータを適切な形式で出力しませんが、私が試したことを表示したいだけです。
import serial,time
my_port = serial.Serial('/dev/tty.usbmodemfa131',19200)
while 1:
print my_port.readline(),
time.sleep(0.15)
更新:
my_ser = serial.Serial('/dev/tty.usbmodemfa131',19200)
while 1:
#a = raw_input('enter a value:')
#my_ser.write(a)
data = my_ser.read(5)
f_data, = struct.unpack('<fx',data)
print f_data
#time.sleep(0.5)
struct
上記のコードに示すようにモジュールを使用すると、浮動小数点値を出力できます。しかし、
50% の確率で、データは正しく出力されます。しかし、time.sleep() をいじったり、送信を停止して再起動したりすると、誤った値が出力されます。この場合、間違った 4 バイトのセットがアンパックされていると思います。 .ここで何ができるかについて何か考えはありますか??