ようやく、アニメーションが動いたのですがダミーデータをmbedからPCへ流しているだけだったので、実際にバイクで踏んでみました。どういうわけか、リアルタイムにグラフにでてきませんでした。バッファフルでデータを流しているような動作なのでシリアル通信部分を全部書き換えました。
●serial.Event()を使う
データを受信したら即座に処理してグラフィック関数に渡さないといけないので、割り込み関数を使ってみました。
割り込み関数内で複雑なことを長々と記述するにはよくないと思って、当初は、myString = myPort.readStringUntil(lf);だけをいれていたのですが、どうもうまくデータを渡してくれないので、データ代入の部分を割り込み内に突っ込んでみました。すると、見事にリアルタイムに動くようになりました。Delayが適当に入ってバランスがとれたのかもしれません。
/***************************SerialEvent************************************* //<>//
void serialEvent(Serial p){
// シリアル受信割り込み内で全パラメータ代入
myString = myPort.readStringUntil(lf);
if (myString != null){
datastr=split(myString,’,’);//受信CHRをカンマで分解
Torque=float(datastr[0])*Slope_Torque;
Torsion=float(datastr[1])*Slope_Torsion;
Bend1=float(datastr[2])*Slope_Bend1;
Bend2=float(datastr[3])*Slope_Bend2;
Ang_c_1=Ang_c;//1個前の保存
Ang_c=float(datastr[4]);
time_1=time;//1個前の保存
time=float(datastr[5]);
println(“Event:Torque=”,Torque,”Torsion=”,Torsion,”Bend1=”,Bend1,”Bend2=”,Bend2,”Ang_c=”,Ang_c,”time=”,time);
//println(“Event:”,millis());
}
}
●リアルタイムに踏み込んでみると
適当な角度でクランクをとめていろいろ踏み込むとベクトルがあちこちに動くのですが、時々、ハングしたりとんでもない角度に行ってしまったりする現象がみられました。
ログでベクトル角の異常値部分をFILTERしてグラフにしてみると、TorqueやTorsion,Bendなどひずみ値が頭打ちになったり異常値がでていました。アナログ系で何か起きているみたいです。
●以後
リアルタイムで踏みながらベクトル表示できるようになったのでローラ台上でデバッグをいろいろやっていきます。
条件をいろいろかえて、アナログ、デジタル、ソフトのバグを出しきっていきます。