1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pro Microで遊ぶ(2) ボタンの入力を検知する

1
Posted at

この記事でわかること

  • ブレッドボードの使い方
  • Arduino言語を使ったボタン入力制御方法

卍戒め卍

2回目にも関わらず目標投稿期間を守れない私......
忙しかったからね仕方ないね!!!(ほんますんません。。。)

ボタンとProMicroを接続する

マイコンボード上にボタンが実装してあるわけではないため、外部にボタンを準備し、マイコンボードと接続して使用します。今回はブレッドボードを使用し、ProMicroとボタンをつなげる回路を作成します。

ブレッドボードの基礎

今回使用するブレッドボードはコチラ
上部と下部には電源を示す+,-のA~E,空いたの溝を挟んでF~Jのアルファベット行があります。
左右には列を示す番号があります。
ブレッドボードの使い方で覚えておくべきことは大きくまとめると次の3つです。

  • アルファベット行は番号列でつながっている
  • +,-行はそれぞれ行でつながっている
  • 中央の溝を挟んで左右は独立している

たとえば、、、

  • A行の1列目とE行の1列目は接続されています
  • A行の1列目とA行の2列目は接続されていません
  • A行の1列目とJ行の1列目は接続されていません
    と、こんな感じになっています。
    上記の特性を生かして様々な部品を取り付け、手軽に電子回路の制作、評価が可能です。
    ブレッドボード.drawio.png

回路を作る

まずは溝を挟むようにマイコンをセットします。基本的なICはこのように接続することで左右のピンが干渉せず使用可能になります。
今回は3番ピンをボタン用のピンとして使用します。ボタンの片側のソケットを3番ピンに、もう片方をGNDに接続します。これだけで回路は完成です。とってもかんたん!
動作確認.jpg

FWの実装

ボタンの入力を検知するFWを作成していきます。ボタンの入力を検知するための方法は大きく分けて2種類存在します。

  • ボタンの入力を待ち続ける(ポーリング)
  • ボタンの入力のイベントを監視する(割り込み)
    それぞれのメリット、デメリットはいつか記事にするとして、今回はボタンの入力を待ち続けるポーリング方式にて実装を行います。

1.GPIOの設定

ボタン入力を待ち受けるために、使用するGPIOピンをInputモードにする必要があります。GPIOの設定には下記に示す関数します。

pinMode(pin, mode);
  • param
    • pin : 設定するgpio pin番号
    • mode : 状態の指定 INPUT,OUTPUT,INPUT_PULLUPが指定可能
  • return
    • none
      今回使用するpin番号は3番ピンですので下記の通りに記載します。
#define BTN_PIN 3
void setup() {
    pinMode( BTN_PIN, INPUT_PULLUP );
}

ちなみにINPUT_PULLUPとは、pro micro内に実装されているプルアップ抵抗を使用して入力を検知するということです。これもいつか別記事で書くとして、指定のピンとGNDを接続するときはINPUT_PULLUPを使用すると覚えておいてください。

2.ポーリング処理

次にポーリング処理を実装します。
Inputピンに設定したピンの状態を読み取るためにdigitalRead関数が準備されています。

digitalRead(pin);
  • param
    • pin : 読み出したいgpio pin番号
  • retun
    • HIGH: high状態を検出
    • LOW : low状態を検出

この関数をvoid loop()内に配置することで、無限ループの中で常にInputピンの状態が読める、ということです。

void loop() {
    uint8_t pin_state;
    pin_state = digitalRead(BTN_PIN);
}

3.LEDを光らせてボタン入力を検出する

上記まででボタンの入力をプログラム上で検出できるようになりましたが、ユーザーインターフェース上ではボタンを押しても何も起こりません。これでは本当に検出ができているかがわかりませんので、ここでは前回制御したlEDを使ってボタンの入力を検知する処理を追加していきます。

void loop() {
    uint8_t pin_state;
    pin_state = digitalRead(BTN_PIN);
    if ( pin_state == LOW ) { //Active Low
        digitalWrite(LED_BUILTIN_RX, LOW);
    } else {
        digitalWrite(LED_BUILTIN_RX, HIGH);
    }
}

INPUT_PULLUPを使うときはActive Low(ボタンを入力したときにLOWを検出する)になります。また、ProMicroの内蔵LEDは負論理で点灯するので、digitalWrite(LED_BUILTIN_RX, LOW); とします。(前回間違っていましたね。。。。)

動作確認

ボタンを押すと緑LEDが光ります。やったーーーーーーー(反対向きにつけているから見にくい😢)
VID_20251023_004326143.gif

おわりに

今回のまとめです。

  • ブレッドボードで電子回路を簡単に試作できる
  • pinMode関数でpinの状態設定、digitalRead関数でpin状態の読み取りを行う
    次からはもうちょっと投稿頻度あげられれば。。。!!!
1
1
1

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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?