読者です 読者をやめる 読者になる 読者になる

迷いませんか?

プログラミング、電子工作、ゲーム・・・etc、色々やるけど中途半端なブログです。

眠る時のためのライト(パクリという名のオマージュ)

プログラミング 電子工作

おはこんばんちわ!
サッカーしてて左足の親指踏まれ爪の中で内出血してる僕です。

前回届いたArduinoで眠る時のためのライトを作りました。
あと、オマージュの意味がなにか忘れた・・・てかもともと知らない。

今回作ったものは前どこかのサイトで見つけた
寝るときに電気消したら明かりになる・・・そんなモノです。
ちなみにそのサイトの場所を忘れたので、もう自分で最初から考えて作りました(/ω\)

まず、基本設計から考えていきます。
とりあえず、電気が消えたら(暗くなったら)LEDを光らせる。
そのままだと光っていて寝れないのでボタンを押したら光らなくなるようにする。
光センサ(CdSセル)を使って明るさを取得する。

これだけを実装しようとしたところボタンを押したら2秒ぐらい消えてまたつく・・・
色々と考えたら原因がわかっただろうけど面倒くさいのでジャンパワイヤをケチらずにつかう。
しかし、また同じ症状にどうしようヽ(д`ヽ)。。オロオロ。。(ノ´д)ノ

まあ、ここまで来ると単純にプログラムの問題だろうと直してみるが直らない
ボタンが押されたらWhile文を抜け、Whileに入らないようにフラグを立てるようにした。
これでは無理でした\(^o^)/

最終的にはそもそも最初からループしてるんだから、
if文で条件分岐させるときに、ボタンフラグを条件に加えればいいんじゃないかな?
・・・成功したーーー!
とりあえず、成功したのでもう点かないようにした後、もう一度押したらつくようにする。
まあ完成したんだけど・・・
なぜか、何回か押さないと消えたり点いたりしない



こんぐらいどうってことないよ!
とりあえず、この結果を保存するためにコードと配線を載せとく


light_sensor.jpg

#define LED_PIN 12
#define BUTTON 2
#define SENSOR 0

int i;
int button;
int btn_sv = 0;

void setup(){
  pinMode(LED_PIN,OUTPUT);
  pinMode(BUTTON,INPUT);
  pinMode(SENSOR,INPUT);
}

void loop(){
  i = analogRead(SENSOR);
  button = digitalRead(BUTTON);
  if(btn_sv == 0){
    if(i < 30){
      digitalWrite(LED_PIN,HIGH);
    }else{
      digitalWrite(LED_PIN,LOW);
    }
    if(button == HIGH)
      btn_sv = 1;
  }else{
    digitalWrite(LED_PIN,LOW);
    if(button == HIGH)
      btn_sv = 0;
  }
  delay(50);
}


・・・・がんばった

それではさようなら〜
また来週も見てくださいね!
じゃんけん!
ぽん!

∩∩∩∩

ーーーー