シリーズ:実験シリーズ(フェーズ1)
対応ロードマップ:フェーズ1 / E1-02
この記事の役割:オンボードLEDの点滅周期を変数にして、値を変えると点滅速度が変わることを体験する。
1. 目的
オンボードLEDの点滅周期を 定数から変数に置き換え、値を変えると実際の動作も変わる ことを確認します。
今回のゴールは次の3つです。
- LEDの点滅周期を変数で指定できる
100、500、1000のように値を変えると、点滅速度が変わることを確認できる- 「コードの値を変えると、実際の動作も変わる」と説明できる
2. 前提・環境
- 評価ボード:EK-RA8M2
- 開発環境:e² studio + FSP
- 前回までにできていること
- GPIOでオンボードLEDを点滅できる
R_BSP_PinWrite()を使って P600 を切り替えられるR_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS)を使って点滅できる- ビルドと書き込みができる
今回は 「E1-01 GPIOレジスタ(LEDのポート)の値を確認する方法」を土台にして進めます。
3. 今回の変更点(差分)
前回は、待ち時間をコードに直接書いていました。
↓前回コード
#include "hal_data.h"
void hal_entry(void)
{
R_BSP_PinAccessEnable();
while (1)
{
/* ON側 */
R_BSP_PinWrite(BSP_IO_PORT_06_PIN_00, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
/* OFF側 */
R_BSP_PinWrite(BSP_IO_PORT_06_PIN_00, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
}
}今回は、この 500 を変数に置き換えます。
int wait_ms = 500;
R_BSP_SoftwareDelay(wait_ms, BSP_DELAY_UNITS_MILLISECONDS);今回の差分はこれだけです。
つまり今回は、新しい機能を増やすというより、同じ点滅処理を“調整しやすい書き方”に変える 実験です。
4. 手順
4-1. 前回のLED点滅コードを用意する
まず、「E1-01 GPIOレジスタ(LEDのポート)の値を確認する方法」で使ったコードを用意します。
4-2. 待ち時間を変数にする
500 を直接書く代わりに、変数 wait_ms を使います。
#include "hal_data.h"
void hal_entry(void)
{
int wait_ms = 500;
R_BSP_PinAccessEnable();
while (1)
{
/* ON側 */
R_BSP_PinWrite(BSP_IO_PORT_06_PIN_00, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(wait_ms, BSP_DELAY_UNITS_MILLISECONDS);
/* OFF側 */
R_BSP_PinWrite(BSP_IO_PORT_06_PIN_00, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay(wait_ms, BSP_DELAY_UNITS_MILLISECONDS);
}
}4-3. 値を変えて書き込みする
まずは wait_ms = 500; で動かします。
その後、次のように値を変えて、それぞれ書き込みます。
wait_ms = 100;wait_ms = 500;wait_ms = 1000;
4-4. LEDの点滅速度を確認する
値を小さくすると速くなり、値を大きくすると遅くなります。
評価ボード上のLEDを見て、点滅速度の違いを確認します。
5. 実行結果
確認できたこと:
wait_ms = 100;では、LEDが速く点滅したwait_ms = 500;では、見やすい速さで点滅したwait_ms = 1000;では、LEDがゆっくり点滅した
6. ハマりポイント/原因と対策
6-1. 100 にしても 1000 にしても速さが変わらない
原因
wait_msの数字を変えたつもりで、別の場所を直している- ビルドしていない
wait_msの数字を変えてビルド後に、評価ボードへ書き込みしていない
直し方
int wait_ms = 500;の500を直しているか確認する- 直したあとに、もう一度ビルドする
- そのあと、評価ボードへもう一度書き込む
6-2. 点滅が速すぎて違いが分からない
原因
500を400に変えても、差が小さいので見た目では分かりにくい- 変数を変えた前後で、数字が近いと、速さの違いを感じにくい
直し方
- まずは
100、500、1000のように、大きく差をつけて試す
6-3. ビルドエラーが出る
原因
;を付け忘れている{と}の数が合っていないint wait_ms = 500;を書く場所を間違えている
直し方:
int wait_ms = 500;の末尾に;があるか確認するwhile (1)の前にint wait_ms = 500;があるか確認する- エラー一覧のいちばん上に出ている内容から順に直す
6-4. 点く時間と消える時間の感じが思ったのと逆
原因
- オンボードLEDが Lowで点灯するタイプ(Active-Low) になっている
直し方
HIGHにしているところとLOWにしているところを入れ替えて試す- 「Highにしたら必ず点く」とは限らないことを思い出す
7. 次回やること
次は、E1-03 外付けLED(ブレッドボード+抵抗) に進みます。
GPIOで外付けLEDを点灯させ、配線・抵抗・LEDの向き・GNDの役割を確認します。ロードマップでも E1-03 は、LED+抵抗を配線し、配線と回路の基本を実感する回です。
8. 関連リンク
- 基礎シリーズ:C言語のはじめ(main / while / 関数 / 変数)(リンク)
- 基礎:マイコンとは?RA8M2でLEDを点滅するための超入門(リンク)
- 前回:E1-01 GPIOレジスタ(LEDのポート)の値を確認する方法(リンク)