/*
* チャタリング防止処理サンプル
* ボタンを一度押すとLEDが点灯し、もう一度押すとLEDが消灯する
*/
const int BTN_CHATTERING = 2;
const int LED_CHATTERING = 3;
const int BTN_DELAY = 4;
const int LED_DELAY = 5;
const int BTN_MONITORING = 8;
const int LED_MONITORING = 9;
int state_chattering = LOW;
int state_btn_chattering = LOW;
int state_delay = LOW;
int state_btn_delay = LOW;
int state_monitoring = LOW;
int state_btn_monitoring = LOW;
int led_monitoring = LOW;
bool flg_monitoring = false;
void setup() {
// 白(チャタリング)
pinMode(BTN_CHATTERING, INPUT_PULLUP);
pinMode(LED_CHATTERING, OUTPUT);
digitalWrite(LED_CHATTERING, LOW);
// 緑(チャタリング防止・delay)
pinMode(BTN_DELAY, INPUT_PULLUP);
pinMode(LED_DELAY, OUTPUT);
digitalWrite(LED_DELAY, LOW);
// 黄(チャタリング防止・状態遷移監視)
pinMode(BTN_MONITORING, INPUT_PULLUP);
pinMode(LED_MONITORING, OUTPUT);
digitalWrite(LED_MONITORING, LOW);
Serial.begin(115200);
}
void loop() {
/* ----- 白(チャタリング) ----- */
state_chattering = digitalRead(BTN_CHATTERING);
if (state_chattering == LOW) // ボタン押下
{
Serial.println("白ボタン押下(チャタリング)");
state_btn_chattering = !state_btn_chattering; // 状態反転
}
if (state_btn_chattering == HIGH)
{
digitalWrite(LED_CHATTERING, HIGH);
}
else
{
digitalWrite(LED_CHATTERING, LOW);
}
/* ----- 緑(チャタリング防止・delay) ----- */
state_delay = digitalRead(BTN_DELAY);
if (state_delay == LOW) // ボタン押下
{
Serial.println("緑ボタン押下(チャタリング防止・delay)");
state_btn_delay = !state_btn_delay; // 状態反転
delay(100); // チャタリング防止
}
if (state_btn_delay == HIGH)
{
digitalWrite(LED_DELAY, HIGH);
delay(100); // チャタリング防止
}
else
{
digitalWrite(LED_DELAY, LOW);
delay(100); // チャタリング防止
}
/* ----- 黄(チャタリング防止・状態遷移監視) ----- */
state_monitoring = digitalRead(BTN_MONITORING);
if (state_monitoring == LOW) // ボタン押下
{
Serial.println("黄ボタン押下(チャタリング防止・状態遷移監視)");
if (state_btn_monitoring == LOW) // 前回の状態を確認
{
flg_monitoring = true; // LED操作フラグ
}
state_btn_monitoring = HIGH;
}
else
{
state_btn_monitoring = LOW;
}
if (flg_monitoring)
{
led_monitoring = !led_monitoring; // LEDの点灯状態を反転
digitalWrite(LED_MONITORING, led_monitoring);
flg_monitoring = false; // LED操作フラグリセット
}
}
CHATTERING
DELAY
STATE_MONITORING