LIFE LOG(ここにはあなたのブログ名)

あつあつ備忘録

ソフトやハード、時にはメカの備忘録をまとめていきます

【C/C++第4回】LEDチカ・PWM

今日はタイトルの通り、LチカとPWM点灯とダイナミックをしたいと思います。


f:id:AtsuyaKoike:20181221155903p:plain
引用元:https://os.mbed.com/platforms/ST-Nucleo-F303K8/

マイコンを使う際に、基板にはんだ付けされているピンヘッダ(以下ピン)を使用しているわけですがそれぞれがどういう役割を持っているのかを把握してから使用しなければなりません。
Nucleoの場合は親切なことに簡潔に書かれているものが用意されているので、最初はそれを見て判断していけば問題ないと思います。


ポートの設定方法

DigitalOut myled(指定したポート);

このように設定すると、指定したポートがデジタル出力ポートになります。

DigitalOut デジタル出力
DigitalIn デジタル入力
AnalogIn アナログ入力
PwmOut PWM出力

最初はこれらを使えるようになっていれば問題ないと思います。(他にもいろいろあります)

では実際にLチカからやってみましょう。

#include "mbed.h"

DigitalOut myled(PB_4);

int main() {
    while(1) {
        myled = 1;
        wait(0.1); // 100 ms
        myled = 0;
        wait(1.0); // 1 sec
    }
}

これでPB_4がデジタル出力のポートになり、LEDが点滅するようになります。
wait関数の中は秒単位での設定になりますが、浮動小数点の入力もできるようになっています。

PWM点灯をします。
PWMはPulse Width Modulationの略で、周期とデューティ比の指定により抵抗や半導体にかける電圧を調整する方法です。
ただ、今回は特に周期などは指定していません。後日サーボモータを動かしたいと思うので、その時に改めて説明します。

#include "mbed.h"

PwmOut led(PB_4);

int main() {
    while(1) {
        for(float i = 0.0f; i < 1.0f; i += 0.1f) {
            led = i;
            wait(0.1);
        }
    }
}

これで徐々にLEDの明るさが変化します。Digital OutがPwmOutになっているため、コンストラクタへの指定が違うことに注意してください。