2015/12/24からのアクセス回数 7188
ATtiny85 ArduinoをlbedGemmaと命名したのには、現在よく使われいる 電子工作プラットフォームのmbedのライブラリをArduinoでも使えるように lbedというmbedライクなライブラリの紹介をするためです。
以下ではlbedライブラリを使ってlbedGemmaで遊んでみます。
デジタル入力はスイッチのオン・オフのように0と1だけを入力値とします。 以下の様なスイッチをもちいた回路をlbedGemmaで作ってみましょう。
VCCは、電池のプラスを表しlbedGemmaではUSBからの5Vに相当します。その下にタクトスイッチSWが接続され、 10KΩの抵抗を通り、GND(電池のマイナス)につながっています。途中Switchというピンがタクトスイッチと抵抗の間につながれています。
この抵抗のあることで、スイッチが押されたときに電源のプラスとマイナスが直結し、ショートすることを防いでくれます。 この抵抗はスイッチがオフの時に、Switchピンの電圧をマイナス付近に落としてくれるので、プルダウン抵抗と呼ばれています。
この回路をlbedGemmaのブレッドボードに追加してみます。
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が点滅します。
次に、以下の様な抵抗を電池のプラス側につないだスイッチ回路を作ってみましょう。
ブレッドボードでは、マイナスにつながっていた抵抗をプラス(赤い線)につなぎ、 スイッチのプラスにつながっていた線をマイナスにつなぎます。
スケッチは、スイッチが押されたときに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などの最近のマイコンにはデジタル入力端子にプルアップ抵抗を内部で付けてくれる 機能があります。
この機能を使うと回路は以下の様にとても簡単になります。
ブレッドボードも抵抗を外します。
デジタル入力ピンにプルアップ抵抗をセットするには、 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); } }
実際に動かしてみましょう。
もし、modeでPULL_UPの設定をしなかったらどうなるのでしょう。 setupのmodeの設定部分を//でコメントアウトして動かしてみてください。 スイッチを押さなくても点滅しますね。
これはスイッチ端子の電圧が不定となりスイッチを押していなくてもLOWに近い値になっているからです。
皆様のご意見、ご希望をお待ちしております。勉強会で分からなかったこと等、お気軽に問い合わせて下さい。
スパム防止に画像の文字列も入力してください。