2012-01-22 6 views
1

O.K.、私は何が起こっているのか把握しようとしています。私はメインループにケースステートメントを持っています(ステート6は、以下のサンプル出力のケースを参照しています)。しばらくの間、物事はうまくいく、私は単純な減算が間違った結果を与えるところで、結末の結果を取得し始めます。ゼロとして突然私のheadingDeltaプリント、明らかにそれはないが、まだロジックチェック、第四出力で減算とファブが動作していて、プログラムとして動作していません

state: 6Waypoint: 2 Location: 111.98 18.12 heading: 0.95target heading: 1.57 heading delta: 0.62small? 0 

state: 6Waypoint: 2 Location: 111.98 18.12 heading: 0.95target heading: 1.57 heading delta: 0.62small? 0 

state: 6Waypoint: 2 Location: 111.98 18.12 heading: 1.35target heading: 1.57 heading delta: 0.22small? 1 

state: 6Waypoint: 3 Location: 142.73 47.69 heading: 0.55target heading: 0.00 heading delta: 0.00small? 0 

state: 6Waypoint: 3 Location: 142.73 47.69 heading: 0.55target heading: 0.00 heading delta: 0.00small? 0 

state: 6Waypoint: 3 Location: 142.73 47.69 heading: 0.55target heading: 0.00 heading delta: 0.00small? 0 

:ここ

case turning: 
Serial.print("state: "); 
Serial.print(state); 
Serial.print("Waypoint: "); 
Serial.print(waypointIndex); 
Serial.print(" Location: "); 
Serial.print(location.x); 
Serial.print(" "); 
Serial.print(location.y); 
Serial.print(" heading: "); 
Serial.print(heading); 
Serial.print("target heading: "); 
Serial.print(targetHeading); 
Serial.print(" heading delta: "); 
headingDelta = fabs(heading-targetHeading); 
Serial.print(headingDelta); 
Serial.print("small? "); 
Serial.print((headingDelta<0.25)); 
Serial.print("\n"); 

if (headingDelta < 0.25) { 
    Stop(); 
    state = travel; 
} 
else { 
    if (turn>=0) { 
    Left(255,255); // turn left 
    } 
    else { 
    Right(255,255); // turn right 
    } 
} 
break; 

出力の一部です:ここでのコードは、ですそれが小さいのかどうかは小さいとは言いません!

私は私の髪を引っ張っています。どうしたの?これは、Arduino互換のATmega328ボードであるRomeoにあります。

答えて

1

それはtargetHeadingNaN+/-Infとなっているように、それはそれらのいずれかの値を検出したときにSerial.print(...)がちょうど0.0を出力することを探します。 targetHeadingを計算すると、おそらくどこかで0で割っています。

+0

あなたの迅速で正確な応答に感謝します!私は間違ったアイテムの逆正接を取っていたことが分かり、NaNを生むアーティザン(0/0)を持っていました。また、atan2の機能も本当に欲しかった。 – ViennaMike

関連する問題