Python から Arduino に float データを送信し、同じ値を取得する必要があります。最初にArduinoからfloatデータを送信することを考えました。データは連続する 4 バイトとして送信されます。これらの連続するバイトを収集し、Python 側 (システム側) で適切な形式に変換する方法を見つけようとしています。
Arduino コード:
void USART_transmitdouble(double* d)
{
union Sharedblock
{
char part[4];
double data;
} my_block;
my_block.data = *d;
for(int i=0;i<4;++i)
{
USART_send(my_block.part[i]);
}
}
int main()
{
USART_init();
double dble=5.5;
while(1)
{
USART_transmitdouble(&dble);
}
return 0;
}
Python コード (システム エンド):
my_ser = serial.Serial('/dev/tty.usbmodemfa131',19200)
while 1:
#a = raw_input('enter a value:')
#my_ser.write(a)
data = my_ser.read(4)
f_data, = struct.unpack('<f',data)
print f_data
#time.sleep(0.5)
struct
上記のコードに示すようにモジュールを使用すると、float 値を出力できます。
50% の確率で、データは正しく印刷されます。ただし、送信をいじっtime.sleep()
たり、送信を停止して再起動したりすると、誤った値が出力されます。この場合、間違った 4 バイトのセットがアンパックされていると思います。ここで何ができるかについて何か考えはありますか?
Arduino との間で float データを送受信するために struct モジュールを使用する以外のアイデアはありますか?