9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Nerves Livebook で Raspberry Pi 用スターター電子工作キットを楽しんでいます

SunFounder Raspberry Pi 用のスターター電子工作キット

これまでの記事

この記事では、ボタンを押すと LED が光るように制御します

こちらの記事を参考にしました

実装したノートブックはこちら

回路の組み立て

今回使うのはこのボタンです

IMG_1573.JPG

オンライン説明書を見ながら回路を組みますが、例によって電流の向きを逆にするため 3V3 と GND を入れ替えます

IMG_1572.JPG

ピンを開く

GPIO の各ピンを開きます

GPIO17 が LED 、 GPIO18 がボタンに繋がっています

{:ok, led} = Circuits.GPIO.open("GPIO17", :output)
{:ok, btn} = Circuits.GPIO.open("GPIO18", :input)

GPIO17 は出力に使うので、第2引数 direction (方向)に :output を指定します

GPIO18 は入力に使うので、第2引数に :input を指定します

LED の点灯

LED のピンに 1 を書き込むと LED が光り、 0 を書き込むと LED が消えます

Circuits.GPIO.write(led, 1)
Circuits.GPIO.write(led, 0)

ボタンのON/OFF入力

ボタンのピンを読んだとき、押されていれば 1 、押されていなければ 0 が返ってきます

Circuits.GPIO.read(btn)

btn_read.gif

ピンを閉じる

一旦、ピンを閉じます

Circuits.GPIO.close(led)
Circuits.GPIO.close(btn)

ボタンとLEDの連動

ボタンを押している間だけ LED が光るようにします

また、ノートブック上に用意したフレームにボタンの状態が出力されるようにしています

defmodule LEDButton do
  use GenServer

  require Logger

  alias Circuits.GPIO

  @btn "GPIO18"
  @led "GPIO17"

  def start_link(frame) do
    GenServer.start_link(__MODULE__, %{frame: frame}, [])
  end

  def init(state) do
    {:ok, btn} = GPIO.open(@btn, :input, pull_mode: :pullup)
    GPIO.set_interrupts(btn, :both)

    {:ok, led} = GPIO.open(@led, :output)

    {:ok, %{btn: btn, led: led, frame: state.frame}}
  end

  def handle_info({:circuits_gpio, @btn, _timestamp, value}, state) do
    Kino.Frame.render(state.frame, value) # フレームの値を更新

    GPIO.write(state.led, value) # LED の状態を更新

    {:noreply, state}
  end

  def handle_info(:stop, state) do
    Circuits.GPIO.close(state.led)
    Circuits.GPIO.close(state.btn)

    {:stop, "stopped", state}
  end
end

フレームを用意します

frame = Kino.Frame.new()

連動プロセスを開始します

{:ok, pid} = LEDButton.start_link(frame)

btn.gif

ボタンを押すと LED が光り、フレーム内の値も 1 になっています

ボタンを離すと LED が消え、フレーム内の値も 0 になりました

遊び終わったらプロセスを止めておきます

GenServer.stop(pid)

まとめ

ボタン入力による制御が実装できました

Livebook を使うことで、ブラウザ上の表示ともキレイに連携させることができます

9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?