チャタリング対策
チャタリング対策 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状態になっているので待たないと何度も通知が来る)。