• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 値の合計について(PICマイコン上))

C言語でのパルス幅の合計についての問題

このQ&Aのポイント
  • C言語におけるパルス幅の合計を計算する問題について質問します。
  • 現在のプログラムでは、Riseの値によって計算方法が異なり、一般化すると値が大きくなる問題があります。
  • 質問は、一般化したプログラムにおいてもべた書きのような分岐を回避する方法があるかどうかです。

質問者が選んだベストアンサー

  • ベストアンサー
  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.3

#1です。何度もすみません。 修正プログラムには問題がありました。 例えばRize=4の次にRise=2がきてループが終了するような場合、SUM_AreaにはArea[1]と[2]しか足し込まれず、[3][4]が足し込まれないことになってしまいます。 なお、この問題は、お示しのべた書きプログラムでも同じことが言えると思います。 >一定ループ後に合計値を計算したい。 ということですので、ループ内ではSUM_Areaの計算はせずに、ループを抜ける際に、 Aera[1]~[64]の合計をSUM_Areaに格納するようにしたほうが良さそうです。

その他の回答 (2)

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.2

#1です。修正後のプログラムに書き間違いがありました。 【誤】 for(i=1;i<=Rise;i++){ 【正】 for(i=1;i<Rise;i++){ です。Riseの前の = は不要です。

  • MSZ006
  • ベストアンサー率38% (390/1011)
回答No.1

仕様がいまいちはっきりしないのですが、 (1)パルスを取得 こんなのや、 ___|¯¯|___|¯¯¯|___ こんなの ___|¯¯|_|¯¯|_|¯|____ が取得され、 ・パルス数がRiseという変数に格納される。 ・Captime_rise[n]とCaptime_down[n] に、パルスの立ち上がり/立ち下がりの時刻が格納される。(n は1からRiseまで) (2)プログラムが実行される  ・パルス間のくぼみの時間の長さがArea[n]に「加算」される。(今回のパルスのみではなく、今までのすべてのパルスの累計)  ・すべてのArea[n]の合計がSUM_Areaに格納される。 (3)500μsごとに(1)(2)を繰り返す。 といったことでしょうか。 一般化したプログラムを(2)の箇所で実行すると、 例えば2回ループを廻したとすると、 SUM_Area+= の箇所で、1回目のデータが2回重複して加算されてしまうことになります。 (2回目のループの際にArea[n]にはすでに1回目のデータが格納されている状態で、そこに2回目ループのデータを加算しています) 正しいプログラムは、 SUM_Area=0; for(i=1;i<=Rise;i++){ Captime[i]=Captime_rise[i+1]-Captime_down[i]; Area[i]+=Captime[i]; SUM_Area+=Area[i]; } とすればよいと思います。

Snoodam
質問者

お礼

MSZ006様: アドバイスありがとうございます。 仰る通り、ループ外でSUM_Areaを計算するようにしたところ 上手く行きました。 Area[i]の計算まではforで回して計算しています。 また、私の稚拙な文章から仕様を読み取って頂きありがとうございます。 上手く言葉では言えないのですが、Riseは都度0に初期化されます。 (ラインカメラの仕様上) for(i=1;i<Rise;i++){ Captime[i]=Captime_rise[i+1]-Captime_down[i]; Area[i] += Captime[i]; //面積計算 -> Area = Area+ Captime[1] } Calc_area(); void Calc_area(void){ if(Rise==2) SUM_Area=Area[1]; else if(Rise==3) SUM_Area=Area[1]+Area[2]; /*以下 Rise==64まで分岐*/ } 一応ここに全文があります。 (決して「見て頂きたい」という厚かましいお願いではございません。) http://anasys.blog.fc2.com/blog-entry-15.html

Snoodam
質問者

補足

関係の無いことなのですが、MSZ006様はガンダムがお好きなのでしょうか。ファーストのご世代なのでしょうか。(Zの形式番号な為そう推測しました。)

関連するQ&A