Arduino勉強会

2015/12/24からのアクセス回数 6640

ちょっと軽めのmbedライクなライブラリlbed

ATtiny85 ArduinoをlbedGemmaと命名したのには、現在よく使われいる 電子工作プラットフォームのmbedのライブラリをArduinoでも使えるように lbedというmbedライクなライブラリの紹介をするためです。

以下ではlbedライブラリを使ってlbedGemmaで遊んでみます。

デジタル入力

プルダウン抵抗を使ったスイッチ回路

デジタル入力はスイッチのオン・オフのように0と1だけを入力値とします。 以下の様なスイッチをもちいた回路をlbedGemmaで作ってみましょう。

SwitchButton_sch.png

VCCは、電池のプラスを表しlbedGemmaではUSBからの5Vに相当します。その下にタクトスイッチSWが接続され、 10KΩの抵抗を通り、GND(電池のマイナス)につながっています。途中Switchというピンがタクトスイッチと抵抗の間につながれています。

この抵抗のあることで、スイッチが押されたときに電源のプラスとマイナスが直結し、ショートすることを防いでくれます。 この抵抗はスイッチがオフの時に、Switchピンの電圧をマイナス付近に落としてくれるので、プルダウン抵抗と呼ばれています。

この回路をlbedGemmaのブレッドボードに追加してみます。

SwitchButton-pullDown_brd.png

スケッチを作る

lbedを使ったスイッチ・ボタンのスケッチは以下の様に入力します。 最初の#includeはこれから、TinyWireMとlbedGemmaというライブラリを使うことを 表します。*1

DigitalOutは、デジタル出力のクラス名で、led(1)は1番ピンをデジタル出力するledという変数を宣言しています。 DigitalInは、デジタル入力のクラス名で、sw(2)は2番ピンをデジタル入力するswという変数を宣言しています。

setup関数では特に処理を行いません。

loop関数では、swがHIGHの時にledにHIGHをセットし、250ミリ秒待ち、 ledにLOWをセットし、250ミリ秒待つように処理します。 これで、スイッチが押されている間、LEDが250ミリ秒間隔で点灯と消灯を繰り返します。

#include "TinyWireM.h"
#include "lbedGemma.h"
 
DigitalOut  led(1);  // GPIO #1 LED on board.
DigitalIn   sw(2);   // GPIO #2

void setup() {                
}

void loop() {
  if (sw == HIGH) {
    led = HIGH;
    wait_ms(250);
    led = LOW;
    wait_ms(250);
  }
}

実際にブレッドボードでこのスケッチを動かしてみましょう。

スイッチを押すと電源のプラスとSwitchピン2番が接続され、swの値がHIGHになるので、 if文の中の処理が実行され、LEDが点滅します。

SwitchButton.png

プルアップ抵抗を使ったスイッチ回路

次に、以下の様な抵抗を電池のプラス側につないだスイッチ回路を作ってみましょう。

SwitchButton-pullUp_sch.png

ブレッドボードでは、マイナスにつながっていた抵抗をプラス(赤い線)につなぎ、 スイッチのプラスにつながっていた線をマイナスにつなぎます。

SwitchButton-pullUp_brd.png

スケッチは、スイッチが押されたときにGND(電池のマイナス)につながるので、 if文のHIGHからLOWに変更します。 これで、先ほどと同じ動作をします。

#include "TinyWireM.h"
#include "lbedGemma.h"
 
DigitalOut  led(1);  // GPIO #1 LED on board.
DigitalIn   sw(2);   // GPIO #2

void setup() {                
}

void loop() {
  if (sw == LOW) {
    led = HIGH;
    wait_ms(250);
    led = LOW;
    wait_ms(250);
  }
}

抵抗を使わないスイッチ回路

スイッチを追加するたびに抵抗をつなぐと部品点数が増えるので、 Arduinoなどの最近のマイコンにはデジタル入力端子にプルアップ抵抗を内部で付けてくれる 機能があります。

この機能を使うと回路は以下の様にとても簡単になります。

SwitchButton_sch.png

ブレッドボードも抵抗を外します。

SwitchButton_brd.png

デジタル入力ピンにプルアップ抵抗をセットするには、 setup関数内で、swのmodeをINPUT_PULLUPにセットします。

#include "TinyWireM.h"
#include "lbedGemma.h"
 
DigitalOut  led(1);  // GPIO #1 LED on board.
DigitalIn   sw(2);   // GPIO #2

void setup() {
  sw.mode(INPUT_PULLUP);
}

void loop() {
  if (sw == LOW) {
    led = HIGH;
    wait_ms(250);
    led = LOW;
    wait_ms(250);
  }
}

実際に動かしてみましょう。

SwitchButton.png

もし、modeでPULL_UPの設定をしなかったらどうなるのでしょう。 setupのmodeの設定部分を//でコメントアウトして動かしてみてください。 スイッチを押さなくても点滅しますね。

これはスイッチ端子の電圧が不定となりスイッチを押していなくてもLOWに近い値になっているからです。

まだ途中ですが公開します。

コメント

選択肢 投票
おもしろかった 0  
そうでもない 0  
わかりずらい 0  

皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。

スパム防止に画像の文字列も入力してください。


(Input image string)

*1 今回はTinyWireMは直接使うことはありませんが、この2つをセットで宣言するようにしてください

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc