//LEDピン
#define LED_Pin 0
volatile int sw = LOW;
volatile unsigned long time_prev = 0, time_now;
unsigned long time_chat = 20;
void setup() {
// put your setup code here, to run once:
pinMode(LED_Pin,OUTPUT);
attachInterrupt(0,Interruption, RISING);
// 0番ピンではなく、INT0(PB2)を指定している。
// LOW : LOWレベルで割り込みを発生させます。
// CHANGE : 信号が変化したときに割り込みを発生させます。
// RISING : 信号が立ち上がりエッジである場合に割り込みを発生させます。
// FALLING : 信号が立ち下がりエッジである場合に割り込みを発生させます。
// HIGH : HIGHレベルで割り込みを発生させます。
randomSeed(analogRead(3)); // 未接続ピンのノイズを利用
}
void loop() {
// put your main code here, to run repeatedly:
}
void Interruption()
{
// チャタリング対策
time_now = millis(); //現在の割り込み時刻を取得
if( time_now-time_prev > time_chat){
if( sw == LOW ) //前回の割り込みから20[ms]以上経過かつスイッチの状態がLowならば、LED消点灯を切り替え
// digitalWrite(LED_Pin, !digitalRead(LED_Pin));
if (random(5) == 1){
digitalWrite(LED_Pin, HIGH);
} else {
digitalWrite(LED_Pin, LOW);
}
sw = !sw; //前回の割り込みから20[ms]以上経過ならば、スイッチの状態を切り替え
}
time_prev = time_now; //現在の割り込み時刻を前回の割り込み時刻へコピー
}