Powered by AppSignal & Oban Pro
Would you like to see your link here? Contact us

GPIO LED Bar

gpio_led_bar.livemd

GPIO LED Bar

List GPIO pins

Circuits.GPIO.enumerate()
|> Kino.DataTable.new()

ピンを開く

Circuits.GPIO.status("GPIO5")
led_list =
  [
    "GPIO17",
    "GPIO18",
    "GPIO27",
    "GPIO22",
    "GPIO23",
    "GPIO24",
    "GPIO25",
    "SDA1",
    "SCL1",
    "GPIO5"
  ]
  |> Enum.map(fn label ->
    label
    |> Circuits.GPIO.open(:output)
    |> elem(1)
  end)

LED の点灯

Circuits.GPIO.write(led_list |> Enum.at(0), 1)
Circuits.GPIO.write(led_list |> Enum.at(1), 1)
Circuits.GPIO.write(led_list |> Enum.at(2), 1)
Circuits.GPIO.write(led_list |> Enum.at(3), 1)
Circuits.GPIO.write(led_list |> Enum.at(4), 0)
Circuits.GPIO.write(led_list |> Enum.at(5), 0)
Circuits.GPIO.write(led_list |> Enum.at(6), 0)
Circuits.GPIO.write(led_list |> Enum.at(7), 0)
Circuits.GPIO.write(led_list |> Enum.at(8), 0)
Circuits.GPIO.write(led_list |> Enum.at(9), 0)
defmodule LEDBar do
  def set(led_list, value) do
    led_list
    |> Enum.with_index()
    |> Enum.map(fn {led, index} ->
      Circuits.GPIO.write(led, if(10 - index <= value, do: 1, else: 0))
    end)
  end
end
LEDBar.set(led_list, 6)

LED 棒グラフの上昇

defmodule LEDElevator do
  def set(led_list, interval) do
    led_list
    |> Enum.map(fn led ->
      Circuits.GPIO.write(led, 0)
    end)

    Process.sleep(interval)

    led_list
    |> Enum.reverse()
    |> Enum.map(fn led ->
      Circuits.GPIO.write(led, 1)
      Process.sleep(interval)
    end)
  end
end
LEDElevator.set(led_list, 500)

ピンを閉じる

led_list
|> Enum.map(fn led ->
  Circuits.GPIO.close(led)
end)