2016-10-11 23 views
0

私はarduinoをsimulinkと一緒にHIL(hardware-in-the-loop)シミュレーションとして使用しています。今私がしようとしているのは、小数点以下の要素を含む行列をarduinoに連続的に送り、arduinoに単純な計算を行い、小数値を返すようにすることです。小数点以下の桁数のシリアル送受信行列

#include <MatrixMath.h> 

float incomingbyte; 

void setup() 
{ 

Serial.begin(9600); 

} 

void loop() 
{ 

if(Serial.available()>0){ 
incomingbyte = Serial.read(); 
} 

Serial.write(incomingbyte*2); 
delay(1000); 

} 

いつも私に次のエラーを与える:

この

は私がデータを受信するために私のArduinoのために使用していたコードである

exit status 1 
call of overloaded 'write(float)' is ambiguous 

私が行っているのSimulinkダイアグラム示されているようです:

Simulink Diagram

私は気づきました私はシリアルポート経由でuint8を送るだけで、送信する前にuint8に番号を変換しないようにしましたが、基本的に何も起こりません。

小数点を含む行列を送信する方法はありますか?

ありがとうございました。

+0

あなたは基本的にSerial.writeを正しく使用していません。 –

答えて

1

floatをテキスト形式で送信する場合は、Serial.print(float_var);とスペースや改行などの区切り文字を使用する必要があります(printlnを使用)。

浮動小数点値をバイナリ形式で送信する場合は、生のバイトを送信する書き込み目的としてSerial.write((byte*)&float_var, sizeof(float_var));を使用する必要があります。

私はあなたのfloat incomingbyteをかなり誤解を招く名前で使っていません。

+0

このコード行は何を意味していますか? float値をバイナリ形式で送信する。私のSimulinkは数値をuint8データ型に変換してからarduinoに送りますので、バイナリ表現を使う方が良いでしょう。 また、そのコードは行列に対して機能しますか? – John

+0

@John '&float_var'はメモリ内のfloat_varのアドレス(floatへのポインタ)で、'(byte *) 'はfloatへのポインタがbyteへのポインタにキャストされることを意味します。また、フロート全体を送信する場合は、1バイト以上を送信する必要があります。だから、 'sizeof(float_var)'がそこにあるのです。 float変数のサイズをバイト単位で取得します。 – KIIV

+0

ああそうです。私はSerial.write関数をgoogleに行きました。私は基本的には、Serial.write(buf、len)という書式を使用することになっていると思います。 次の行列を定義したとします。 float x [4] [1] = {{1.233}、{2.334}、{3.445}、{5.446}}; SimulinkにSerial.writeで行列を送ろうとしたら、 'code' Serial.write((byte *)&x、sizeof(x)); 'コード'? – John

関連する問題