こんばんは。

 

 

お父ラボ(お父Lab.)です。

 

 

金魚水槽の自動水換え装置を目標にプログラミング学習を始めました。

 

 

まずはアルディーノ(ARDUINO)でプログラミング・電子工作を学びます。

 

さて、今日はアルディーノに内蔵されているタイマー機能を使って、デジタル砂時計を作ります。

 

 

今日の回路です。時間経過毎に光るLEDの数が増えます。

 

そしてオレンジのコードに隠れている四角いボックスが「傾斜スイッチ」です。

 

 

アルディーノを「振る」ことで、「傾斜スイッチ」の状態が、記憶していた状態と

 

 

異なっていることを検知し、LEDを消灯し、砂時計がリスタートします。

 

 

あくまでアルディーノが起動した時間が基準値になりそうです。何時何分という指示は出来るのかな?

 

 

「何時間毎に何かをする」というプログラムはいいですが、生き物相手だと、

 

 

「何時に何かをする」の方が、便利そうですね。

 

 

それではまた次回!

 

 

本日のプログラム

const int switchPin =8;

unsigned long previousTime =0;         

  //最後にLEDの設定が変更された時間の変数

int switchState = 0;                           

  //傾斜スイッチの状態の変数

int prevSwitchState = 0;                    

  //一つ前の傾斜スイッチの状態を記憶する変数

int led =2;

 

long interval = 6000;                         

  //単位はmsecです。1000msecで1秒なので、6秒ですね。

void setup(){

  for(int x = 2;x<8;x++){

    pinMode(x,OUTPUT);

  }

  pinMode(switchPin, INPUT);

}

 

void loop(){

  unsigned long currentTime = millis();    

   //millis()でアルディーノが起動してからの時間を記憶します。

    if(currentTime - previousTime > interval){   

  //起動後経過時間−LED変更後時間>インターバルの場合、

      previousTime = currentTime;                  

   //LED変更後時間に起動後経過時間を格納します。

      digitalWrite(led,HIGH);           

   //LEDを2から順に時間経過毎に最大7まで点灯します。

      led++;

      if(led == 7){

        

      }

    }

    switchState = digitalRead(switchPin);      

     //傾斜スイッチの状態をswitchStateに格納します。

    if(switchState !=prevSwitchState){         

     //switchState≠前回の傾斜スイッチの状態であれば、

      for(int x = 2;x<8;x++){                         

     //LEDを消灯します。

        digitalWrite(x,LOW);

        

      }

      led = 2;                                              

     //再びled変数を2に戻します。

      previousTime = currentTime;              

     //をLED変更時間に起動後経過時間を格納します。

      

    }

    prevSwitchState = switchState;            

     //今回の傾斜スイッチの状態をprevSwitchStateに格納します。

  }

 

それではまた次回!