AVR基礎(I/Oポート|スイッチのチャタリング対策)

スイッチの値を読み込む際にチャタリング対策を追加する。

_ms_delay(10)の待ち時間後、状態が変化していれば、変化があったとみなす。

//sw_test1.c にチャタリング対策を追加したコード

#include

#include

uint8_t switch_a, switch_ax;

int main(void)

{

PORTA = 0b00000010; //PA1 = スイッチ

DDRA = 0b00000001; //PA0 = LED

switch_a=switch_ax=0;

while (1)

{

switch_a=PINA;

if (switch_a != switch_ax) {

if (~switch_a & 0b00000010) {

//PORTA = 0b00000011;

PORTA |=_BV(0); //1を 0 ビットにセット

}

switch_ax=switch_a;

_delay_ms(10);

}

_delay_ms(1000);

//PORTA=0b00000010;

PORTA &= ~_BV(0); //0 を 0 ビットにセット

}

return 0;

}