• 締切済み

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

bobの回答

  • 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行で書いてしまうなんて!ありがとうございました。

関連するQ&A

  • タイマーIC555を使ってパルス信号を1秒間隔でFETのゲートに入力す

    タイマーIC555を使ってパルス信号を1秒間隔でFETのゲートに入力する回路が欲しいのですが 555を2つ使ってパルス信号と1秒間隔のパルスは出来たのですが、 この先の回路がわかりません。1つ目のパルスを長周期のパルスでON、OFFするには どんな回路を組めば良いでしょうか。

  • Arduino unoでLED点滅周期が乱れる

      Arduino unoでLED点滅周期が乱れる理由は? スケッチ例のblinkプログラムでLED(13ピン)の点滅時間を1マイクロ秒ON・1マイクロ秒offとしデジタルオシロで観測すると、通常は50%dutyでON・OFFをくりかえしている。  しかし数十パルスかそれ以上経過後の1パルスのON時間が約2倍になったり、別のタイミングのOFF時間が同様に約2倍になったりする理由はどうしてか?  もちろん周期は2マイクロ秒にはならず、プログラムのdigitalWrite()の命令時間分は長く約10マイクロ秒となっています。 実験したプログラムを記載します。 int led = 13; void setup() { pinMode(led, OUTPUT); } void loop() { digitalWrite(led, HIGH); delayMicroseconds(1); digitalWrite(led, LOW); delayMicroseconds(1); }

  • 処理時間の計測中に、任意の時間が経過してしまったら、警告表示を行いたいですが、方法が分からないでいます

    C++で、 ある処理の実行に要する時間の計測を行う ソースを書いていたのですが、 時間の計測を開始してから、 3秒以上が経過してしまった場合にのみ、 処理の進行状況に関わらず、 「3秒経過済み」と表示してあげたいと思っていましたが、 時間の計測を、 「difftime」などで表示する方法は分かったものの、 処理の実行中に、3秒以上経過したら、 取り合えず、「3秒経過済み」と表示させる方法が 分からないでいます。 何かアドバイスいただけるとありがたいです。 宜しくお願い致します。 ====================== time_t start, end; time( &start ); //計測開始 //処理が実行される //処理時間の計測中に「最初の3秒が経過してしまった場合」にのみ「3秒経過済み」と表示してあげたい time( &end );//計測終了 ======================

  • applet

    スレッドを使ってタイマーを作ろうと思っています。なぜか、ゆっくりとしかできないのですが・・。よろしくお願いします。 class TimerA implements Runnable { private boolean flg = true; private int time = 6000; public boolean isFlg() { return flg; } public int getTime(){ return time; } public void run() { for(;time > 0; time--) ; flg = false; System.out.println(time); } }

  • プログラムの実行時間計測方法について

    プログラムの実行時間の計測方法について、質問します。 以下に示すプログラムは、パケットが受信される度にmessage関数が呼び出され、message関数内で受信したパケットをfwrite関数を用いて処理をしています。 [質問内容] clock関数のclock_t型を用いて、プログラムの実行時間を計測したいと思っています。しかし、以下に示すプログラムの場合、パケットが受信されるたびにmessage関数が呼び出され、かつパケットが受信される度にstart = clock()で0秒からの開始になってしまいます。 なにか、対策方法はあるのでしょうか? よろしくお願いします。 [プログラム] void main(int argc, char** argv){ //パケットが受信される度にmessage関数が呼ばれる。 message(); } void message(){ double time; clock_t start,finish; if(equals(msg->selector,(byte*)"test",strlen("test"))){ start = clock(); fwrite(msg->payload,msg->payload_length,1,fp); finish = clock(); time = (double)(finish - start)/1000.0; printf("データ送信時間:%f[sec]\n",time); } else if(equals(msg->selector,(byte*)"finish",strlen("finish"))){ done = D_TRUE; } }

  • これを実行するには

    私の知り合いにプログラムを作ってもらったのですが、どうすればよいのかまったくわかりません。どうすればよいでしょうか。 ↓このようなものです。 #include <stdio.h> #include <stdlib.h> #include <time.h> typedef int BOOLEAN; BOOLEAN TRUE = 1; BOOLEAN FALSE = 0; int main(void) { int wc,c,rnd; BOOLEAN dec[50] = {FALSE}; c = wc = 0; dec[0] = TRUE; srand(time(NULL)); while(1){ rnd = rand() % 49; if(dec[rnd] == FALSE){ dec[rnd] = TRUE; if(wc == 6){ printf("%0*d\n",2, rnd); c++; wc = 0; if(c == 49){ break; } } else{ printf("%0*d,",2, rnd); c++; wc++; } if(c == 24){ printf("00,"); c++; wc++; } } } return 0; }

  • 整列(ソート)

    昇順(1,1,1・・2,2,2・・・9999,9999)に並び替えるプログラムを実装してください.  (1)挿入ソート  (2)選択ソート  (3)バブルソート  (4)クイックソート なお,整列アルゴリズムの実装は,sort_main 関数でプログラムを記述してください.また,必要あれば,別関数を定義しても良い. 特に(1),(2)について教えてください。 #include <stdio.h> #include <time.h> // 定数宣言 #define COUNT 100000 // データ数を指定 #define INFILE "07sort.txt" // 入力ファイルを指定 #define SORTFILE "out.txt" // 出力ファイルを指定 // プロトタイプ宣言 void sort_main(int *); void getFile(int *); void outFile(int *); double getFuncTime(clock_t, clock_t); // ソート(並び替え)メイン関数 void sort_main(int *array){ // ソート(並び替え)の処理を本関数で実現すること // 処理をまとめたい場合は,別関数を定義すること // *(array) = 10; <-- data[0] = 10;  と同じ // *(array + 10) = 100; <-- data[10] = 100; と同じ } // プログラムのメイン関数 int main(){ // 変数宣言 clock_t start,end; // 開始&終了時間を格納 int data[COUNT]; // ファイル内のデータを格納 // ファイルからデータの読み込み getFile(data); // 処理開始時間の設定 start = clock(); // ソート関数の呼出し sort_main(data); // 処理終了時間の設定 end = clock(); /// 処理にかかった時間の出力 printf("--- Sort Time is %.2f sec. ---\n", getFuncTime(start, end)); // 配列に保存されたデータの格納 outFile(data); } void getFile(int *cur){ FILE *fp; fp = fopen(INFILE, "r"); while(fscanf(fp,"%d", cur) != EOF){ cur++; } fclose(fp); } void outFile(int *cur){ FILE *fp; int i; fp = fopen(SORTFILE, "w"); for(i=0; i<COUNT; i++){ fprintf(fp, "%d\n", *(cur+i)); } fclose(fp); } double getFuncTime(clock_t start, clock_t end){ return (double)(end-start)/CLOCKS_PER_SEC; }

  • 「一定の時間間隔で5秒毎にMacro1を実行する」

    「一定の時間間隔で5秒毎にMacro1を実行する」 一応startマクロ、stopマクロは作成してみたのですが、 下記stopコマンド実行しても止まらなかったような気がします。 ここから改変するとしたらどうですか? Public timestop As Boolean Sub test() Dim tt As Double Dim wt As Double tt = Now + TimeValue("00:00:05") '5秒後 wt = TimeValue("00:00:02") 'インターバル2秒 Application.OnTime tt, "Macro1", wt If (timestop = False) Then Time = Timer Application.OnTime earliesttime:=(Now + TimeValue("00:00:01")), procedure:="test" End If End Sub ---------------------------------------- ここからstart,stopマクロ Sub t_start() timestop = False Call test End Sub Sub t_stop() timestop = True End Sub

  • アルゴリズムの実行時間

    関数f(n)と時間tに対して アルゴリズムが問題を解くためにf(n)マイクロ秒 かかるとき、各時間で解くことができる最大の問題サイズを教えてください nlgnのとき1秒と1分 2^nのとき1秒と1分 n!のとき1秒と1分 教えてください できれば考え方も教えてください お願いします

  • clock関数は正確じゃないの?

    clock関数で時間を計測するとどうも狂ってしまいます。 おかしいので、このようなプログラムでclock関数の精度を調べてみました。 #include <stdio.h> #include <time.h> int main(){     int i,j;     clock_t start;     for(i=0;i<50;i++){         start = clock();         for(j=0;j<3000000000;j++);         printf("%4.3f秒\n",(double)(clock()-start)/CLOCKS_PER_SEC);         }     return 0; } このプログラムの実行結果はこちらです。 1.672秒 1.672秒 1.672秒 1.672秒 1.687秒←● 1.672秒 1.672秒 1.672秒 1.672秒 1.672秒 1.671秒 1.672秒 1.672秒 1.672秒 1.688秒←● ・・(略) 若干1.672で落ち着いているかと思いきや、時々狂っています。 この狂いは何が原因なんでしょうか? しかも狂うときは0.01位、結構ガツンと狂います。 しかもその狂い←●が等間隔で現れるのかと思いきや、そうでもありません。 この一見そろっているようで、時々ガツンと狂うのは何故なんでしょうか?