今日は、前回続きです。
スイッチが押下されている時間を計測します。
下図のようなプルアップ回路を作って、タクトスイッチが押されている時間を計測します。
(Input I/Oが3だったり4だったりしますがあしからず)
スイッチが押されれていないと、digitalReadはHIGHです。
while (digitalRead(4) == HIGH) {}
whileは()のなかの条件が成立している間、{}のなかを実行しますが、ここでは{}の中を空欄にすることで、digitalRead(4) == HIGH のあいだ、ここに留まります。
スイッチが押されて、digitalRead == LOWとなると、このwhileを抜けて、
time_m = micros();//スイッチが押され始めた時刻<200b>
に進みます。
次に
while (digitalRead(4) == HIGH) {}
に進みdigitalRead(4) == LOW となるとこのwhileを抜けて
time_n = micros(); //スイッチが離された時刻
に進みます。
この時刻の差が 押下されている時間になります。
unsigned long time_m = 0; unsigned long time_n = 0; unsigned long time_nagasa = 0; void setup() { pinMode(4, INPUT); Serial.begin(57600); } void loop() { while (digitalRead(4) == HIGH) {} time_m = micros(); //スイッチが押され始めた時刻 delayMicroseconds(20); //チャタリング対策 while (digitalRead(4) == LOW) {} time_n = micros(); //スイッチが離された時刻 delayMicroseconds(20); time_nagasa = time_n - time_m; //スイッチが押下されて離された時間を算出 delayMicroseconds(20); Serial.print("ms ="); Serial.println(time_nagasa); }
これを繰り返すことで、押された時刻、離された時刻を次々取得することを考えます。
ExcelなどにSerial出力を貼り付けられるように、HIGH or LOW、それぞれの継続時間、total時間、 HIGH = 1、LOW = 0を 「,」(カンマ)区切りで出力します。
カンマ区切りを入れることで、Excel上で 「区切り位置」 を設定することで、グラフ作成が容易になります。
unsigned long time_m = 0; unsigned long time_n = 0; unsigned long time_nagasa = 0; unsigned long time_total = 0; int i = 0; void setup() { pinMode(4, INPUT); Serial.begin(57600); } void loop() { Serial.print("START = "); Serial.println("0,0,1"); for (;;) { //繰り返し範囲設定 無限繰り返し while (digitalRead(4) == HIGH) {} time_m = micros(); time_nagasa = time_m - time_n; //スイッチが押下されていない時間を算出 time_total = time_total + time_nagasa; Serial.print("--- = "); Serial.print(" "); Serial.print(time_nagasa); Serial.print(","); Serial.print(time_total); Serial.println(",1"); Serial.print("LOW = "); Serial.print(time_nagasa); Serial.print(","); Serial.print(time_total); Serial.println(",0"); delayMicroseconds(20); while (digitalRead(4) == LOW) {} time_n = micros(); delayMicroseconds(20); time_nagasa = time_n - time_m; //スイッチが押下されて離された時間を算出 time_total = time_total + time_nagasa; Serial.print("--- = "); Serial.print(" "); Serial.print(time_nagasa); Serial.print(","); Serial.print(time_total); Serial.println(",0"); Serial.print("HIGH = "); Serial.print(time_nagasa); Serial.print(","); Serial.print(time_total); Serial.print(","); Serial.println("1"); } }
ここまでできたら、ほぼ完成したも同然。
次は赤外線リモコン解析をします。
Amazonで買える、赤外線センサー。
10pcs VS1838 TL1838 VS1838B赤外線 ヘッド リモコン 受光部 受信機
- 出版社/メーカー: GAOHOU
- メディア: エレクトロニクス
- この商品を含むブログを見る