前提
Arduino Unoでホールセンサ(磁石を感知するセンサ)を利用しています。
実現したいこと
磁石をタイヤにくりつけ、タイヤが何周したのかを1秒ごとに図りたいと考えています。
より精密に測る為に、タイヤには複数個の磁石を付けております。
実現したいこととしては1秒間にセンサが何回反応したのかを数えたいです。またタイヤが動いているときは勿論オンとオフが激しく複数回切り替わると思いますが、止まっているときは常にオンもしくはオフとなることが予想されるため、1秒間常にオンもしくはオフの時は0を返すようなプログラムを作成したいです。
発生している問題・エラーメッセージ
エラーは出ませんが、例えばセンサが1回反応した、はどのように記述すればよいか困っています。 下記コード以外でもよい方法等があれば伺いたいです。
該当のソースコード
Arduino
1prev = 0; // 前回実行時刻を初期化 2interval = 1000; //1秒をミリ秒で表す 3count = 0; // ここで何周かカウント 4 5void loop() { 6 unsigned long curr = millis(); // 現在時刻を取得 7 val=digitalRead(SENSOR); 8 if (val==LOW){ //磁石が近くにある 9 if (val==HIGH) { //磁石が遠ざかる 10 count=count+1; 11 if ((curr - prev) >= interval) { 12 Serial.println(count); 13 count=0; 14 prev = curr; // 前回実行時刻を現在時刻で更新 15 } 16 } 17 } else if (val==HIGH) { //磁石が近くにない 18 if ((curr - prev) >= interval) { 19 Serial.println(count); 20 count=0; 21 prev = curr; // 前回実行時刻を現在時刻で更新 22 } 23 }else if (val==LOW) { //磁石が近くにある 24 count=0; 25 if ((curr - prev) >= interval) { 26 count=0; 27 Serial.println(count); 28 count=0; 29 prev = curr; // 前回実行時刻を現在時刻で更新 30 } 31 }
試したこと
色々なサイトを閲覧しここまで来ました。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
提示のコードではどういう動作をするんでしょうか。
また、それをどのようにしたいんでしょうか
タイヤはどれくらいの速度で回ることを想定していますか? 1秒に何回転くらい?
また、磁石はタイヤにいくつくらい付けていますか?
y_waiwai様
コメントありがとうございます。該当コードでは磁石が近くにないときのみ1秒おきに0が出力され、磁石を近づけると何も出力されなくなってしまいます。
やりたいことはタイヤにくっつけた磁石に何回か反応するので、その1秒間の反応回数を調べたいです。(これは1つ目のif文に相当します)また、タイヤが動いていないときは1秒間常に反応している、もしくは反応していないはずなので、その時は0を出力したいです。(これは2つのelse if文に相当します。)
2つのelse if文のみを動作させれば(1秒間常にオンかオフ)うまくいっているので、1つ目のif文、磁石に反応したらカウントするプログラムの記述の仕方が分からないです。
よろしくお願いいたします。
TakaiY様
コメントありがとうございます。タイヤは直径5センチほどで等間隔で4つつけています(もちろんセンサで測るときにお互いが干渉しない程度で離しています)。回転は大体ですが、1秒に2回転ほどです。

回答2件
あなたの回答
tips
プレビュー