LoginSignup
1
3

More than 5 years have passed since last update.

Wio LTEで遊んでみる(その3:ボタン+ブザー)

Posted at

Grove IoT スターターキット for SORACOMで遊んでみるの続き。

今度はボタンでの入力とそれ契機でブザーでも鳴らしてみようかと思う。

〇センサー

ボタン
ブザー

ボタン、ブザーの各スケッチ例を見てみると、どっちもWIOLTE_D38を使うように書いてる。
これを共存したい場合にどこに刺したらいいんだ?

〇ブザー

とりあえずブザーをD20に刺して試してみる
#define BUZZER_PIN (WIOLTE_D20)

DFUモードだとうるさいのだが、通常モードにすると鳴らない。
ログを入れてみるとloopはしている

とりあえずブザーをD38に刺してみる
DFUモードでも鳴らない。
うるさかったのはD20端子がHIGHになってるってことだったのかな。

D38を使った場合だと、ちゃんと想定通りに鳴る。
にしても、音量がうるさいな。

調べてみるとsetupで
Wio.PowerSupplyGrove(true);
を実行しないといけないらしい。

#define BUZZER_PIN      (WIOLTE_D20)
void setup()
{
  SerialUSB.println("setup Start");
  Wio.Init();
  Wio.PowerSupplyGrove(true);

  pinMode(BUZZER_PIN, OUTPUT);
  delay(500);
  SerialUSB.println("setup OK");
}

※loopはスケッチのまま
これで実行してみたら想定通りの動きに。

〇ボタン+ブザー

ブザーが上手くいったのでボタンも試す。
足し方としては、ボタンのスケッチ例にブザー出力処理を追加。

void change_state()
{
  State = !State;
  StateChanged = true;
}
void setup()
{
  Wio.Init();
  Wio.PowerSupplyGrove(true);

  pinMode(BUTTON_PIN, INPUT);
  attachInterrupt(BUTTON_PIN, change_state, RISING);

  pinMode(BUZZER_PIN, OUTPUT);
}

attachInterrupt
外部割り込みが発生したときに実行する関数を指定します。すでに指定されていた関数は置き換えられます。呼び出せる関数は引数と戻り値が不要なものだけです。

これでボタン操作による状態変化を割り込ませるって感じみたい。

これについては特に難しいことはなく、あっさりと実現。

#include <WioLTEforArduino.h>

// You can use WIOLTE_(D20|A4|A6) with `Wio.PowerSupplyGrove(true);`
#define BUTTON_PIN  (WIOLTE_D38)
#define BUZZER_PIN      (WIOLTE_D20)
#define BUZZER_ON_TIME  (100)
#define BUZZER_OFF_TIME (3000)


#define COLOR_ON    127, 127, 127
#define COLOR_OFF     0,   0,   0

WioLTE Wio;

volatile bool StateChanged = false;
volatile bool State = false;

void change_state()
{
  State = !State;
  StateChanged = true;
}

void setup()
{
  SerialUSB.println("setup Start");
  Wio.Init();
  Wio.PowerSupplyGrove(true);

  pinMode(BUTTON_PIN, INPUT);
  attachInterrupt(BUTTON_PIN, change_state, RISING);

  pinMode(BUZZER_PIN, OUTPUT);

  SerialUSB.println("setup OK");
}

void loop()
{
  if (StateChanged) {
    SerialUSB.print(State ? '*' : '.');

    if (State) {
      Wio.LedSetRGB(COLOR_ON);
      Buzzer_ON();
    }
    else {
      Wio.LedSetRGB(COLOR_OFF);
    }

    StateChanged = false;
  }
}
void Buzzer_ON()
{
  SerialUSB.println("Buzzer_ON start");
  digitalWrite(BUZZER_PIN, HIGH);
  delay(BUZZER_ON_TIME);

  digitalWrite(BUZZER_PIN, LOW);
  SerialUSB.println("Buzzer_ON end");
}

所感

・通常時は特に問題ないのだが、DFUモードだとD20に刺したブザーがずっとうるさい。
・ブザーのボリュームを変更したい。今のところHIGH/LOWしかないのでON/OFFにしかならない?
・全体的にはやはり簡単。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3