質問: ");Serial.println( cnt_t * 60 ); } // if } 液晶部のプログラムは削除したのですが,これだけでちゃんと回転数が見られるのかわかりません。 今現在手元にモーターを持っておらず,来週にならないと実際にモーターでの計測ができません。 とりあえずプログラムだけでもと思い調べていた結果,上記URLにたどり着きました。 ここで質問なのですが,このプログラムの3,4,5,6,9,13,14,15,20行目のプログラムの意味を(どういった動作をさせているのかを)教えてください。 (空白行はカウントせず#includeが1行目としています。) また,このプログラムでモーターの回転数を測定できるかを教えてください。(できない場合はどういった処理が不足しているのか教えていただきたいです。) volatile等調べてみたのですがいまいち理解できませんでした。 MsTimer2については一応ダウンロードしてArduinoフォルダ内にはあります。 どういった動作をさせるものかも少しは理解しています。
回答: 私が以前書いたプログラムだと思われます 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 をシリアル出力