光が弱くなった回数をカウントし、タクトスイッチを押した時にLEDの点滅回数でそのカウントを出力します。
ただ、なにかがCdSの上を横切った、というようなときはうまくいきますが、
だんだん光が弱くなるような場合(指でCdSを押さえたときとか)は、それを複数回にカウントしてしまいます。
こんな感じ
回路図
スケッチ(コード)
/* 光が遮られた回数をカウントし、LED光で知らせるプログラム. */ const int CDS = 0; const int SW = 8; const int LED = 13; int i; int counter = 0; int old_cds_value = 0; int cds_value = 0; int sw_value = 0; int old_sw_value = 0; int sw_state = 0; void setup(){ pinMode(LED, OUTPUT); pinMode(SW, INPUT); } void loop(){ /* スイッチが押されたことを検出 */ sw_value = digitalRead(SW); if(sw_value==HIGH && old_sw_value==LOW){ sw_state = 1 - sw_state; delay(10); } if(sw_state==1){ for(i=0;i<counter;i++){ digitalWrite(LED, HIGH); delay(500); digitalWrite(LED, LOW); delay(500); } sw_state = 0; } old_sw_value = sw_value; /* CdSの入力値の低下を検出 */ cds_value = analogRead(CDS); if(cds_value < old_cds_value*0.8){//元の光の強さの0.8倍未満なら光が弱くなったと判断 counter++; } old_cds_value = cds_value; delay(100); }
0 件のコメント:
コメントを投稿