2021年3月20日土曜日

Raspberry Pi Picoでスイッチ入力してみた

基板を発送したとメールが来たので、中身の方を少しづつ作っていく事にします。
まずはLチカでGPIO出力はやってみているのでブレッドボード上にSWを実装してGPIO入力を確認します。


写真の通りGPIO10とGND間にタクトスイッチを実装します。

通常スイッチ入力の場合、抵抗でプルアップしますがRP2040は各ポートに内蔵プルアップ/プルダウンの機能があるのでそれを有効にします。SDKにgpio_puull_upというAPIが用意されているのでそれを使ってプルアップ抵抗を有効にします。

    gpio_init(SW_PIN);
    gpio_pull_up(SW_PIN);
    gpio_set_dir(SW_PIN, GPIO_IN);

    while (1
    {
        if (gpio_get(SW_PIN))
        {
            gpio_put(LED_PIN1);
        }
        else
        {
            gpio_put(LED_PIN0);
        }
        sleep_ms(10);
    }

実行部分は簡単に押されてGPIOがローレベルになったらそのままLEDのGPIOもローレベルにしてLEDを消灯するというものです。

現状Picoがなかなか入手できないので2枚使ってのSWDデバッグが出来ないのでついでにprintfデバッグをするためのシリアル出力を確認しておきます。

CMakeLists.txtに下記の行を入れます。

pico_enable_stdio_usb(test 1)

標準入出力のヘッダーファイルstdio.hをインクルードします。

#include <stdio.h>

main関数の冒頭で初期化します。

    stdio_init_all();

puts関数で出力します。

    while (1
    {
        sw = gpio_get(SW_PIN);
        if (sw)
        {
            gpio_put(LED_PIN1);
            if (edge == 0)
            {
                puts("Sw turn high");
            }
        }
        else
        {
            gpio_put(LED_PIN0);
            if (edge == 1)
            {
                puts("Sw turn low");
            }
        }
        edge = sw;
        sleep_ms(10);
    }

非常に簡単です、ちなみにCMakeLists.txtの行を入れ替えるだけでUART出力に入れ替えられるようです。SDKさまさまです、とても良くできてると思います。


0 件のコメント:

コメントを投稿