チャタリング対策

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状態になっているので待たないと何度も通知が来る)。