シリーズ:実験シリーズ(フェーズ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. 配線図・配線写真


3-3. 注意点
- タクトスイッチは、向きによっては意図したつながり方にならない ことがあります
- ボタン入力用GPIOを、LED側の列と混同しない ようにします
- GNDを共通にしないと、正しく入力を読めません
- 電源を切ってから配線します
4. 接続手順
4-1. 先に電源を切る
最初に評価ボードの電源を切ります。
通電したまま配線を触ると、ショートや誤配線の原因になります。
4-2. 外付けLEDの配線を確認する
まず、E1-03 で作成した外付けLED配線を確認します。
- LEDの向き
- 抵抗が直列に入っているか
- GNDがつながっているか
4-3. タクトスイッチをブレッドボードに挿す
- タクトスイッチをブレッドボードに挿します
- スイッチの足が、ブレッドボード上でどことつながるか確認します

4-4. GNDをつなぐ
- タクトスイッチの片側を、GND側へつなぎます

4-5. ボタン入力用GPIOをつなぐ
- もう片側を、ボタン入力用GPIO へつなぎます


4-6. 配線を確認する
次の2本ができているか確認します。
LED用GPIO → 1kΩ抵抗 → LED → GNDボタン入力用GPIO → タクトスイッチ → GND
5. FSP設定
今回は、LED用GPIOを出力、ボタン用GPIOを入力 に設定します。
また、ボタン入力は 内部プルアップ有効 にします。
入力を安定させるために、プルアップ/プルダウンが必要になるのはフェーズ1の重要ポイントです。
5-1. FSP ConfiguratorのPinsを設定する
- FSP Configurator(configuration.xml)→ Pins を開きます
- LED用GPIO:P409を次のように設定します
- Mode:Output mode (Initial Low)
- ボタン入力用GPIOを次のように設定します
- Mode:Input mode
- Pull-up/down:Input pull-up
- 設定を変更したら「Generate Project Content」を実行します


6. コード
今回は、ボタンの状態をwhile(1)の中で繰り返し読む ことで、LEDをON/OFFします。
このように、プログラム側が何度も入力を見に行く方法を ポーリング と呼びます。ロードマップ上でも、E1-05 はこの「ポーリングで入力を読む」回です。
6-1. 先に考え方
やることは、次の3つです。
- ボタン入力を読む
- 押されていたらLEDを ON にする
- 押されていなければ 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を点滅するための超入門(リンク)