• 締切済み

時間のパルスを作りたい。

一般的なプログラムで質問があります。 ある関数を作りたいのです。その関数とはパルス的な動きをするものです。 ある秒時間がきたら開始して、指定時間ONして指定時間OFFします終了 時間がきたら、OFFします。 説明: boolean PulsTime (int start_time, int finsh_time, int on_time, int off_time) int start_timeは現在時刻の秒と一致したらON時間の開始を表します。 int finsh_timeはONとOFFのトータル時間を表します。 int on_timeはON(TRUE)である時間を表します。 int off_timeはOFF(FALSE)である時間を表します。 簡潔なアルゴリズムがあれば是非教えてください。 すばらしいアルゴリズムをお待ちしています。

みんなの回答

  • bob
  • ベストアンサー率50% (52/103)
回答No.2

仕様に謎が多いのですが、返り値がオン、オフに対応すると仮定すると、 int GetNowTimeBySecond( void ); boolean PulsTime (int start_time, int on_time, int off_time) { int now_time = (GetNowTimeBySecond() - start_time) % (on_time + off_time); return (now_time > 0) && (now_time < on_time); } といった感じでしょうか。 現在時刻を得る関数は環境によって違うので、グローバル時刻(秒)をintで返す関数をGetNowTimeBySecond()として定義しておきます。 int finsh_timeは使ってません。終了はこの関数を呼び出したところで判定して下さい。

cyan1110
質問者

お礼

情報不足で申し訳ありません。しかし、まさに私の期待する回答でした。たった2行で書いてしまうなんて!ありがとうございました。

  • shigatsu
  • ベストアンサー率26% (511/1924)
回答No.1

んーっと普通関数って一回値を返したらそれっきりだと思うんですが、オンするとかオフするってのはまさか戻り値じゃないですよね? それと、パルス的ってことはタイマー割り込みみたいな事が必要だと思います。さらにその割り込みを待つためのループも必要でしょう。 トータル時間まで関数が制御を占有して良いなら、グローバル変数に結果を返すような形で可能だと思います。 内部にループを作って、時間比較してグローバル変数を操作するようになると思います。

関連するQ&A