About this Blog

This Blog has English posts and Japanese posts. About Mac, iOS, Objective-C, and so on.

2013年5月5日日曜日

[Arduino]光が遮られた回数をカウント

CdSの入力値を監視し、光が弱くなったことを検出します。
光が弱くなった回数をカウントし、タクトスイッチを押した時に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 件のコメント:

コメントを投稿