フェーズ1

E1-05 ボタン入力でLEDを点ける(ポーリング):押したら点灯、離したら消灯

シリーズ:実験シリーズ(フェーズ1)
対応ロードマップ:フェーズ1 / E1-04
今回の役割:GPIOの入力を読み取り、押したら点灯・離したら消灯を自分の手で確認する。
      ※今回は **ポーリング** で入力を読みます。割り込みは次の回ではなく、E1-09で扱います。

1. 目的

今回は、ボタンの入力状態をプログラムで読む ことを確認します。
ボタンを押したらLEDが点灯し、離したら消灯する動きを作って、GPIO入力の最初の一歩をつかみます。

2. 前提・環境

  • 評価ボード:RTK7EKA8M2S00001BE
  • 開発環境:e² studio + FSP
  • 前提:
    • E0-01〜E0-06 が完了している
    • E1-03 の外付けLED配線ができている
    • E1-04 の「点かない原因」を一度体験している
  • 使用部品
    • LED × 1
    • 抵抗:1kΩ × 1
    • タクトスイッチ × 1
    • ブレッドボード
    • ジャンパ線
  • 使用するGPIO
    • 外付けLED用のGPIO:P409(J25-9)
    • ボタン入力用のGPIO:P704(J25-10)
    • GND:J25-11

3. 回路・配線

今回は、E1-03 の外付けLED配線に加えて、ボタン入力の配線 を追加します。

  • LED側
    LED用GPIO → 1kΩ抵抗 → LED → GND
  • ボタン側
    ボタン入力用GPIO → タクトスイッチ → GND

今回は、内部プルアップを使う前提 で進めます。
そのため、押していないときは High、押したときは Low を読む形にします。
プルアップ/プルダウンの詳しい話は、次の E1-06 で扱います。

3-1. 配線の考え方

  • LEDは、これまでどおり GPIO出力で点灯/消灯します
  • ボタンは、押されたかどうかをGPIO入力で読む ために使います
  • ボタンを押すと、入力ピンが GND側につながる 配線にします
  • 評価ボードの GND と ブレッドボード側のGND は必ずつなぎます

3-2. 配線図・配線写真

E1 05 配線全体
外付けLED配線 ブレッドボード E1 05

3-3. 注意点

  • タクトスイッチは、向きによっては意図したつながり方にならない ことがあります
  • ボタン入力用GPIOを、LED側の列と混同しない ようにします
  • GNDを共通にしないと、正しく入力を読めません
  • 電源を切ってから配線します

4. 接続手順

4-1. 先に電源を切る

最初に評価ボードの電源を切ります。
通電したまま配線を触ると、ショートや誤配線の原因になります。

4-2. 外付けLEDの配線を確認する

まず、E1-03 で作成した外付けLED配線を確認します。

  • LEDの向き
  • 抵抗が直列に入っているか
  • GNDがつながっているか

4-3. タクトスイッチをブレッドボードに挿す

  • タクトスイッチをブレッドボードに挿します
  • スイッチの足が、ブレッドボード上でどことつながるか確認します
E1 05 配線全体 スイッチ

4-4. GNDをつなぐ

  • タクトスイッチの片側を、GND側へつなぎます
E1 05 配線全体 GND

4-5. ボタン入力用GPIOをつなぐ

  • もう片側を、ボタン入力用GPIO へつなぎます
E1 05 配線全体 P704
Pmod2コネクタ E1 05

4-6. 配線を確認する

次の2本ができているか確認します。

  • LED用GPIO → 1kΩ抵抗 → LED → GND
  • ボタン入力用GPIO → タクトスイッチ → GND

5. FSP設定

今回は、LED用GPIOを出力ボタン用GPIOを入力 に設定します。
また、ボタン入力は 内部プルアップ有効 にします。
入力を安定させるために、プルアップ/プルダウンが必要になるのはフェーズ1の重要ポイントです。

5-1. FSP ConfiguratorのPinsを設定する

  1. FSP Configurator(configuration.xml)→ Pins を開きます
  2. LED用GPIO:P409を次のように設定します
    • Mode:Output mode (Initial Low)
  3. ボタン入力用GPIOを次のように設定します
    • Mode:Input mode
    • Pull-up/down:Input pull-up
  4. 設定を変更したら「Generate Project Content」を実行します
Pins P409設定
Pins P704設定

6. コード

今回は、ボタンの状態をwhile(1)の中で繰り返し読む ことで、LEDをON/OFFします。
このように、プログラム側が何度も入力を見に行く方法を ポーリング と呼びます。ロードマップ上でも、E1-05 はこの「ポーリングで入力を読む」回です。

6-1. 先に考え方

やることは、次の3つです。

  1. ボタン入力を読む
  2. 押されていたらLEDを ON にする
  3. 押されていなければ LEDを OFF にする

今回は、押したら Low になる前提 で判定します。

6-2. シンプルなコード

#include "hal_data.h"

void hal_entry(void)
{
    bsp_io_level_t sw_level;

    R_BSP_PinAccessEnable(); // R_BSP_PinWrite / PinRead を使用可能にする

    while (1)
    {
        /* ボタン入力を読む */
        sw_level = R_BSP_PinRead(BSP_IO_PORT_07_PIN_04);

        /* 押したら点灯、離したら消灯 */
        if (sw_level == BSP_IO_LEVEL_LOW)
        {
            R_BSP_PinWrite(BSP_IO_PORT_04_PIN_09, BSP_IO_LEVEL_HIGH);
        }
        else
        {
            R_BSP_PinWrite(BSP_IO_PORT_04_PIN_09, BSP_IO_LEVEL_LOW);
        }
    }
}

7. 実行結果

  • ボタンを押している間だけ、外付けLEDが点灯した
  • ボタンを離すと、外付けLEDが消灯した

8. ハマりポイントと直し方

8-1. ボタンを押してもLEDが点かない

原因

  • ボタン入力用GPIOが入力設定になっていない
  • ボタン配線が、想定していた列と違う場所に刺さっている
  • GNDがつながっていない

直し方

  • FSP Configurationでボタン用GPIO:P704のModeが Input modeになっているか確認する
  • タクトスイッチの足がどことつながっているか見直す
  • GNDが共通になっているか確認する

8-2. 押していないのにLEDが点いたり消えたりする

原因

  • 入力の状態が安定していない
  • 内部プルアップが有効になっていない
  • ジャンパ線やタクトスイッチの接触が甘い

直し方

  • FSP Configurationでボタン用GPIO:P704のPull up/dowmがInput pull-upになっているか確認する
  • 配線がしっかり刺さっているかを確認する
  • 配線図の通りになっているかを確認する

8-3. 押したときの動きが逆になる

原因

  • 判定条件が逆になっている
  • 押したときに Low になる構成なのに、High で判定している

直し方

  • if (sw_level == BSP_IO_LEVEL_LOW) の条件を見直す
  • 実際に押したときに High か Low かを確認する

補足

  • 今回は内部プルアップを使うので、押していないときは High、押したときは Low になります

8-4. 1回押しただけなのに反応が安定しない

原因

  • ボタンの接点が細かく揺れている
  • 入力をそのまま読んでいるだけで、まだ安定化していない

直し方

  • まずは「押したら反応する」ことだけ確認できればOKとする
  • 次の E1-06〜E1-08 で、入力を安定させる方法を学ぶ

9. 次回やること

次は、E1-06 プルアップ/プルダウンを体験 に進みます。

10. 関連リンク

  • E1-03 外付けLED(ブレッドボード+抵抗)(リンク)
  • E1-04 “点かない”を作って直す(リンク)
  • プルアップ/プルダウン入門(リンク)
  • ボタンが不安定なとき(デバウンス入門)(リンク)
  • マイコンとは?RA8M2でLEDを点滅するための超入門(リンク)

-フェーズ1