テキストのExample 6-3 (p.117)は、もう少し凝った方法でチャタリングを防いでいるが、ここではArduinoをはじめよう 第3版 (Make:PROJECTS) (pp.42-43)を参考に単にスイッチが落ち着くまで待つ方法にした。
#include <avr/io.h> #include <util/delay.h> int main(void){ uint8_t was_Pressed = 0; uint8_t is_Pressed = 0; //DDRD &= ~(1 << PD2); // スイッチを接続するPD2のIOをINにする。INがデフォルトなのでここでは省略する。 PORTD |= (1 << PD2); // スイッチを接続するPD2を内部プルアップする。 DDRB = 0xff; // ポートBのIOを全部OUTにし、全部のピンにLEDを接続する。 //PORTB = 0; // ポートBの全部のピンからLを出力する。 while(1){ is_Pressed = bit_is_clear(PIND, PD2); // ボタンが押されたかどうかを読み取って _delay_ms(10); // (チャタリング防止) if(is_Pressed && !was_Pressed){ // 前回の状態から変化していたら、 PORTB = ~PORTB; // ポートBに接続してあるLED全部の状態を反転する。 } was_Pressed = is_Pressed; } return 0; }