チャタリング対策
A接点出力のONを検知するために無限ループを回し、
void loop() {
if (digitalRead(A_SW) == LOW) {
send_Line("おや、誰が来たようだ!");
delay(60000);
}
}
としていた部分、誤反応があるらしく夜中の3時11分に誰が来たことになっていた。さすがにそれは無いだろうとインターホン本体の記録を見たが、やはり誰も来ていない。霊現象だ、ってことにはならないわけで、まぁチャタリングだよね。電圧変動でもあったんだろう、delayで逃げるか、何回か読み取るのがいいのか、いろいろ回避方法はあるようだがゲージ判定方式が一番スマートだなと思ったのでこれで行くことにする。
#define PUSH_SHORT 100 //とりあえず100と定義する
void loop() {
unsigned long gauge = 0; //ゲージを0リセットする
while (!digitalRead(A_SW)) //スイッチが押されたら
{
gauge++; //ゲージを増加させる
}
if (gauge > PUSH_SHORT) //ゲージがPUSH_SHORTを超えたら
{
send.Line("おや、誰が来たようだ!");
delay(60000); //1分待つ
}
}
あとは、PUSH_SHORTの値を調整するだけだがとりあえずは100で動作はしたので様子見。1分待つようにしているのは、インターホンを再度押してもLINEは通知しないようにしているだけ(実際押すとしばらくはON状態になっているので待たないと何度も通知が来る)。