Arduinoとフォトインタラプタを用いてモーターの回転数を計測したいです。 ArduinoはUNOを使用しています。

工学 | プログラミング2,012閲覧xmlns="http://www.w3.org/2000/svg">500

ベストアンサー

このベストアンサーは投票で選ばれました

0

その他の回答(1件)

0

私が以前書いたプログラムだと思われます volatile unsigned int cnt=0,cnt_t; volatile unsigned char tmr2_f=0; 割り込み、メインプログラム両方から参照する変数定義 void int_cnt(void){ cnt++; } 外部 INT0 (2ピン) 割り込みに呼び出される フォトインタラプタ接続 void int_tmr2(void){ cnt_t = cnt ; cnt = 0 ; tmr2_f = 1 ; } タイマ2割り込み 、1秒毎に呼び出される while( !Serial ); シリアル通信の使用準備完了チェック (主にLeonardoで必要) attachInterrupt( 0 , int_cnt , RISING ); // INT0 INT0 割り込み設定 (RISING 信号立ち上がりで割り込み発生) MsTimer2::set( 1000, int_tmr2 ); // 1S INT MsTimer2::start(); タイマ2、1秒 (1000mS) 毎の割り込み設定 また void loop(void){ if ( digitalRead( 2 )==LOW ){ digitalWrite( LED_PIN,LOW ); } else { digitalWrite( LED_PIN,HIGH ); } // 確認LED表示 if ( tmr2_f == 1 ){ tmr2_f = 0 ; Serial.print("cnt_t = "); Serial.print( cnt_t ); Serial.print(" RPM = ");Serial.println( cnt_t * 60 ); } // シリアル出力 } がシリアル表示に必要です INT0 にて、フォトインタラプタ出力をカウントし タイマ2割り込みで、1秒毎のカウント合計値を cnt_t にコピーし シリアル出力フラグ tmr2_f をセットします メインループにて tmr2_f フラグをチェックし、フラグが立ったら cnt_t をシリアル出力