Arduinoの外部割込みを使って自動スリープモード的なものを実装する

こんにちは、ばいろんです。

前回に引き続きサウンド・ディテクターとArduinoを使ったプログラムを製作していきます。

今回は一定時間入力がないとスリープモードに移行する…みたいなイメージのものを実装しようと思います。

 

必要なもの

配線図

 

sound-detector-analog_%e3%83%96%e3%83%ac%e3%83%83%e3%83%89%e3%83%9c%e3%83%bc%e3%83%89

スケッチの例

今回のスケッチは音声が入力されるときはbar_active関数を通り、一定時間音声が入力がされないとfoo_sleep関数を通るというものです。

機能としてはPCの自動スリープ機能をイメージしてみました。(foo_sleep関数がスリープ状態、bar_active関数がアクティブ状態、#defineされたTHRESHOLDでスリープまでの時間をコントロールという感じです)

#define PIN_GATE_IN 2
#define IRQ_GATE_IN  0
#define PIN_ANALOG_IN A0

#define THRESHOLD 200

volatile int count;
volatile int peak;

void soundISR()
{
  peak = analogRead(PIN_ANALOG_IN);
  Serial.print("peak : ");
  Serial.println(peak);
  count = 0;
}

void foo_sleep(){
  Serial.println("sleep mode");
}

void bar_active(){
  Serial.println("active mode");
}

void setup() {
  Serial.begin(9600);
  pinMode(PIN_GATE_IN, INPUT);
  attachInterrupt(IRQ_GATE_IN, soundISR, RISING);
  peak = 0;
  count = 0;
}

void loop() {
  if(count >= THRESHOLD){
    foo_sleep();  //state : 1
  }
  else{
    bar_active();  //state : 2
    count++;
  }

  if(count >= 10000){
    count = 10000;
  }

}

 

外部割込みの基礎としてこんな感じでプログラムを書いてみました。実はこれを応用したプログラムは完成しているのですが日の目を見るのはいつのことになるやら…。

とりあえず今回はこんな感じです。次回はうまく進めばフルカラーシリアルLEDテープの使い方に入りたいと思います。

それでは、ここまでの閲覧ありがとうございます。

 

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Scroll to top