• 締切済み

arduinoで信号間の時間を計測したいです。

arduino uno R3である信号が来たらタイマーを走らせまた信号が来たらタイマーをストップさせて、その間の時間を計測するということがしたいのですが、どうすれば出来るでしょうか? H8マイコンでは同じ処理は出来ているのですが今回はそれをARDUINOを使ってやりたいと考えています。 arduinoの日本語リファレンスを見ても私がしたいことが載っていなかったので、そういうことは出来ないのでしょうか?

みんなの回答

  • spinbook
  • ベストアンサー率0% (0/0)
回答No.2

ある信号と言うのがどんなのか詳しく分からないと答えられないような気がしますが、クロック信号のようなものを外部割り込み入力に使いたいと言うことですかね? それでしたら arduino のAttachInterruptと言う機能を使えばよいと思います。リファレンスを貼っておきます。 http://www.arduino.cc/en/Reference/AttachInterrupt

全文を見る
すると、全ての回答が全文表示されます。
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • arduinoでファンを回したい

    先日arduino UNO R3 というマイコンを入手しました。 これを使ってファンを回そうと思ったのですが上手く行きません。 1.5vの単三電池を3つ直列にして電気を流したらファンは勢いよく回りました。 ファンはDC ブラシレスモータと言うもので、DC 5V、0.45wと書かれています。 マイコンの出力電圧は5Vなので出力ピンとGNDにつないだら動くと思うのですが電圧をかけた瞬間に少し動こうとして止まります。 10ミリ秒感覚でHIGHとLOWを繰り返したら、ゆっくりですか回りました。 上手にモータを回すにはどうすればいいのでしょうか? 完全な初心者なので、根本的な勘違いをしていたらすみません。 よろしくお願いします。

  • PCのCPUで演算処理し、Arduinoで入出力

    ArduinoをPCに接続して、Arduinoを、PCのIOボードとして使うことは可能でしょうか?つまり、信号の入出力はArduinoの入出力ポートから行って、演算処理をマイコンではなくPCのCPUでさせたいです。この場合、どのようなプログラムを書けば良いのでしょうか?Arduinoを接続しているPCのポートにアクセスして、それからArduinoの入出力ポートにアクセスするプログラムになると思うのですが、そのやり方がわかりません。一旦マイコンのレジスタにアクセスする必要があるのでしょうか?開発環境は何を使えば良いでしょうか?PCのOSはLinuxです。ご教授頂ければ幸いです。

  • SHマイコンとPICマイコンとAVRマイコン

    SHマイコンとPICマイコンとAVRマイコン、どれがおすすめですか? どれも使い勝手等は同じですか?用途は、小指くらいの小型ロボットを制御することです。ラジコンからの信号を受け取って、信号の大きさに応じてDCモータの速度を制御することです。いま、マイコンボードのArduinoを使っているのですがNanoでも大きすぎるので、マイコンを使って回路を自分で作ろうと考えています。マイコンはH8は使ったことがあります。AVRは、Arduino IDEでArduino言語でしかプログラムしたことありません。 どうかご助言よろしお願いします。

  • ArduinoでDCモーターの角度制御

    arduinoでDCモーターの角度のフィードバック制御をしたく思っており、エンコーダーで角度を計測しながら、一定時間毎(10ms)にモーターに制御入力を入れたいです。エンコーダーで角度を計測するには外部割り込みが必要で、一定時間ごとにモーターへの電圧を変化させるにはタイマー割り込みが必要だと思います。この場合どのようなプログラム構成にすれば良いのでしょうか?void setup( )の中に、 attachInterrupt(interrupt, function, mode) ; MsTimer2::set(unsigned long ms, void (*f)()) ; MsTimer2::start(); を書けば良いのでしょうか?この場合、タイマー割り込みで実行される関数 void (*f)()の処理中に、外部割り込みのイベントが発生した場合、functionを実行してくれるのでしょうか?また、functionの実行中にタイマー割り込みが入ることもあり得るのでしょうか?この場合、エンコーダによる角度計測がきちんと行われないことになると思うので、どうすれば良いでしょうか? ご教授のほどどうぞよろしくお願い致します。

  • RS485の信号処理

    初歩的な事をお尋ねします。 普通のセンサーからの出力信号がデジタル(RS485)/アナログ(4-20mA)なのですが、今デジタル信号出力の方が信頼度がありそちらの処理を考えています。普通ならPCに取り込み専用ソフトで処理を行うのが常識でと思いますが、もっと簡単に計測表示とか例えばマイコンボードと液晶表示部だけのシンプルに出来ないものかと考えています。時間のムダでしょうか? ちなみに少々電子回路はわかりますし半田ゴテもあります。

  • 信号処理の方法

    マイコンの出力を超音波で通信する方法について調べています。 質問したい内容は、下の図の中にある、図2のような信号を 図3の信号に変換する方法です。 http://www.aki7.com/cgi/up/file/signal%282%29.jpg 図1は受信側センサの信号です。振幅は約0.5Vぐらいです。 これを、オペアンプで増幅->コンパレータで閾値処理して 図2のような信号に処理しました。処理に使った回路は http://www.aki7.com/cgi/up/file/%89%F1%98H.JPG にある通りです。(左の電源は信号とノイズのモデル)   電子回路に詳しい方、解決方法についてヒントでも良いので お教え願えませんでしょうか?

  • Aruduino接続時のオペアンプの必要性

    秋月電子通商さんでML8511という紫外線センサーを購入しました。 Arduino UNO R3 に接続しようと考えております。 説明書にhttp://akizukidenshi.com/download/ds/akizuki/ML8511_manual.pdf「マイコンなどをお使いになる場合はオペアンプでバッファリングする事をお勧めいたします。」と書かれています。 これはArduinoに接続する際にも「オペアンプ」と言われるものを別途購入する必要があるのでしょうか。 インターネット上でML8511に関する情報があまりなく、自分自身、初心者であるため、使い方がよくわかりません。 助けていただけると助かります。

  • 実行時間の計測(C言語)

    実行時間について教えてください。 実行時間について不可思議な現象が起きたので疑問に思いました。 C言語においてfor文の2億回ループする場合の実行時間を計測し、計測する内容を変えます。 以下のプログラムのように、時間を計測します。 --------------------        ・        ・ gettimeofday(&t0, NULL);  (計測したい処理) gettimeofday(&t1, NULL);        ・        ・ --------------------- (計測したい処理)に以下のようなプログラムを入れ時間を計測しました。 以下、(計測したい処理)  → それにかかった実行時間 <実行結果 書式(計測したい処理) → 計測された時間 > (1)for ( i = 0; i < 2000000000; i++);         →  5.412432 sec (2)for ( i = 0; i < 2000000000; i++, a++);      →  5.401164 sec (3)for ( i = 0; i < 2000000000; i++, a++,a++);   →  9.340447 sec (4)for ( i = 0; i < 2000000000; i++, a++,a++,a++);   →  13.985456 sec この結果を受けての疑問(1) (2)~(4)までは、加算する回数(a++)が2倍、3倍と増えたため、線形的に実行時間が増えるという理屈で納得できるのですが、 (1)~(2)について、加算する回数(a++)が増えているのに、なぜ実行時間が(1)と(2)では変わらないのか。 アセンブラに直すと、確かに加算回数は増えているはずです。 <実行結果 書式(計測したい処理) → 計測された時間 > (5)for ( i = 0; i < 2000000000; i++);           →  5.412432 sec (6)for ( i = 0; i < 2000000000; i++, a++);        →  5.401164 sec (7)for ( i = 0; i < 2000000000; i++, a++,b++);     →  4.019215 sec (8)for ( i = 0; i < 2000000000; i++, a++,b++,c++);   →  4.008310 sec   実行結果を受けての疑問(2) なぜ、(6)~(7)では、加算される回数は増えているにも関わらず、 (5)より実行時間は短くなっているのか。 ((3)と(7)の時間差があることについは、対象となるレジスタが違うため、並行処理をしていると推察できることはわかります。今回は(5)~(8)にかけて、なぜ実行時間が短くなるのかという質問です。) <前提> ・前提として、プログラム内容に間違いはない。 ・バックグラウンドで動いているプログラムの影響は受けていないとします。 (何度も実行して確認しているので常にこのような結果が得られました。) 疑問1、2について、推測できる理由を教えてください。 <環境> ・Windows7 Corei5 上で VMwareによってUbuntuで実行しています。(VMwareのコア数の設定は1) ・メモリはWindowsOS、VMwareによる設定共に2GB <ソース> #include <stdio.h> #include <sys/time.h> // gettimeofday int main() { struct timeval t0, t1; long l; long i; long h; long j; long k; i = 0; h = 0; l = 0; j = 0; k = 0; gettimeofday(&t0, NULL); for ( i = 0; i < 2000000000; i++,l++,h++,j++); /*この部分の加算を変更して計測しています。*/ gettimeofday(&t1, NULL); printf("i = %ld, l = %ld, h=%ld \n",i,l,h); t1.tv_sec -= t0.tv_sec; if (t1.tv_usec < t0.tv_usec) { t1.tv_sec -= 1; t1.tv_usec += 1000000 - t0.tv_usec; } else { t1.tv_usec -= t0.tv_usec; } printf("%d.%06d sec\n", t1.tv_sec, t1.tv_usec); } わかる方、回答を何卒お願いします。 (解答に必要な条件が足りないのでしたら、教えてください。すぐに追記します。)

  • H8/3069Rでパルス時間間隔測定

     放射線をGM管を使ってパルス信号に変換し、そのパルス時間間隔を測定しようとしています。  パルス信号に変換するまでは成功し、H8/3069Rを搭載したイエローソフト社のYH3069RU-1ボードを購入してマイコンの使い方を学んだのですが、マイコンだけでなく電気回路においても初心者なのでボードのどの機能を用いて回路を設計すればいいのかわかりません。

  • マイコンで経過時間のカウント

    マイコンで所定時間経過したかどうかを判断するとき、 下記の2パターンがあると思います。 例えば、マイコンで有名なR社さんのマイコンセミナーでは②で説明していました。 私は②に慣れています。 お互いのメリットデメリットを教えてください。 また、どちらがおすすめなのでしょうか? ①開始時間time1と現時間time2との差分で経過時間を判断する方法。  例えば、arduinoとかでのmills()関数を使用した方法。  time1 = mills();  /*何らかの処理*/  time2 = mills();  time_diff = time2 -time1; /*経過時間*/ ②ある変数timerを1秒ごとに減算して0になったかで判断する  例えば、1秒割込みで   if(timer > 0){ timer--; }  を実施し、  その後、   if(timer == 0){  で比較する。

このQ&Aのポイント
  • 会社で気持ちの悪い同僚から攻撃されることがストレスになっています。関係を改善するためにはどうすれば良いでしょうか。
  • 気に入らない同僚からは避けられることが望ましいと思っていましたが、最近話しかけられるようになりました。どのように対応すれば良いでしょうか。
  • なかなか断れずにいるが、気に入らない同僚からの頼み事をどのように断るべきか悩んでいます。どのような対処方法があるでしょうか。
回答を見る