• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語でのif文分岐について(PICで使用) 2)

C言語でのif文分岐について(PICで使用) 2

このQ&Aのポイント
  • C言語でのif文分岐についての質問記事です。アルゴリズムの改善に関するアドバイスをもとに、パルス幅の最大値の保持に関するプログラムを追加しました。しかし、意図した通りに動作しないため、困っています。
  • 現在のパルス幅と最大値をLCDに表示するため、1ループ目では現在のパルス幅と最大値が同じになり、2ループ目以降も最大値が前回の値のままになってしまう現象が発生しています。
  • アルゴリズムの動作を確認するために、アルゴリズム図を参考にしてソースコードを見直しても上手くいかず、困っています。パルス幅の最大値の保持がうまく行われず、次の処理に進めない状況です。

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

  • ベストアンサー
  • koujikuu
  • ベストアンサー率43% (429/993)
回答No.1

実際に確認したわけでは無いので参考程度に、 Sel初期値0:現在の処理モード if (Rise==1 && Sel==0){ KOSU=0;Captime[1]=0;Sel=1; } if (Rise==2 && Sel==1){ Max_Captime[1]=0;Sel=2; } if (Rise==2 && Sel==2){ Captime[1]=Captime_rise[2]-Captime_down[1]; if (Captime[1]>Max_Captime[1}){ Max_Captime[1]=Captime[1]; } } // Max_Captime[1] 最大値計測中 if (Rise==1 && Sel==2){ Sel=0; // Max_Captime[1]によるKOSU加算処理 } if (Rise>2){ KOSU=9;Sel=0; } // Error

Snoodam
質問者

お礼

koujikuu様: 私の低レベルの質問にいつも付き合って頂き、本当にありがとうございます。 本当に失礼なのですが、質問しておきながら、本日はPICを触れる状態にありません。 明日試します。 /****/ if (Captime[1]>Max_Captime[1}){ Max_Captime[1]=Captime[1]; } の部分でハッとしました。 今までのif分岐だと、値がうま行かない理由を、サイクルタイム毎に表に値を書いて みました。10-40-20-30と値が変化すると、MAX値が最終的に40でなく30になりますね。 思い込みで、一応添付画像の通り、サイクルタイム毎の値を書いたつもりでしたが、走り書き でなく、しっかりと表に書くべきでした。 /****/ Sel初期値0:現在の処理モード の使い方も教示して頂きありがとうございます。 switch文のcaseの様な使い方をその様にしたらできるのですね。 目からうろこでした。 /*****/ 本当にありがとうございます。

Snoodam
質問者

補足

koujikuu様: 解決いたしました。 本当にありがとうございます。 今後は同じ様な質問をしない為にも、アルゴリズムからコーディングする際には サイクル毎の値の変遷も「頭の中」だけでなく、表をこさえて確認します。 ありがとうございます。