SWの状態に応じてLEDが点灯するプログラムとなっております。
SWは、フォトインタラプタの信号出力を使用しています。
[困っていること]
SWの状態に応じてLEDの点灯パターンが変化するのですが、
SW(フォトインタラプタ)のチャタリングによって、意図しない点灯パターンになってしまうことがあります。
swの状態が一定時間、case文で定義された処理を行うというようなことは可能でしょうか。
[sw(フォトインタラプタ)の配置]
〇□△と3つのセンサが同じ位置で横並びに配置しています。
しかし、3つのセンサの感度の違いによって、
例えば、3つとも黒を検知して欲しいのに、
センサの感度の違いにより、一瞬だけ、△が先に黒を検知してしまい、
一瞬だけ、違うモードに入ってしまいます。
これを解決したいと考えています。
while(1){
char use_r = 0, use_g = 0, use_b = 0; /* 各関数を使うか */
char is_valid = 1; /* 定義があるか */
sw = PORTA & 0xFF;
switch(sw){
case 0x00:
use_r = 1;
use_b = 1;
break;
case 0x01:
use_b = 1;
break;
case 0x30:
use_g = 1;
use_b = 1;
break;
default:
is_valid = 0; /* 定義が無かった */
break;
}
/* 定義がある場合のみ処理する */
if(is_valid) {
if(prev_sw != sw) {
Reset(); //初期化
delay_ms(1); //delay
}
if (use_r) LED_R();
if (use_g) LED_G();
if (use_b) LED_B();
}
prev_sw = sw;
}