Nerves를 사용하여 택트 스위치를 누르면 LED가 빛납니다 (Elixir)
소개
눌렀다는 것을 감지하기 위해 기다리는 곳은 NervesJP
GenServer 님의 @inachi
Elixir 초보자가 Nerves에서 심박수 측정 앱을 만들어보세요.
작품
- TORIFUKUKaiou/hello_nerves
- 이 기사에서 만들기 시작한 끓인 프로젝트에 추가하고 있습니다
소스 코드 발췌
관련 커밋을 사용하고 있습니다
lib/hello_nerves/observer.ex
defmodule HelloNerves.Observer do
use GenServer
require Logger
@input_pin HelloNerves.Util.input_pin()
def start_link(state \\ []) do
GenServer.start_link(__MODULE__, state, name: __MODULE__)
end
@impl true
def init(state) do
{:ok, state}
end
@impl true
def handle_info({:circuits_gpio, @input_pin, _timestamp, 1}, state) do
Logger.debug("Received rising event on pin #{@input_pin}")
HelloNerves.Blinker.enable()
{:noreply, state ++ [1]}
end
@impl true
def handle_info({:circuits_gpio, @input_pin, _timestamp, 0}, state) do
Logger.debug("Received falling event on pin #{@input_pin}")
HelloNerves.Blinker.disable()
{:noreply, state ++ [0]}
end
end
HelloNerves.Blinker.enable()
를 호출하여 LED를 켭니다. HelloNerves.Blinker.disable()
를 호출하여 LED를 끕니다.lib/hello_nerves/set_interrupter.ex
defmodule HelloNerves.SetInterrupter do
use GenServer
require Logger
alias Circuits.GPIO
def start_link(state \\ []) do
GenServer.start_link(__MODULE__, state, name: __MODULE__)
end
@impl true
def init(state) do
GPIO.set_interrupts(HelloNerves.Util.input_gpio(), :both, receiver: HelloNerves.Observer)
{:ok, state}
end
end
handle_info/2은
:receive
선택적으로 HelloNerves.Observer
를 지정하여 GPIO 상태 변경 (스위치 ON/OFF)이있을 때 HelloNerves.Observer.handle_info/2
HelloNerves.Observer.init/1
에서 Circuits.GPIO.set_interrupts/3을 호출하면 좋을 것입니다. 처음에는 그렇게했지만 몇 번의 스위치 ON/OFF에만 반응하기 때문에 다른 모듈을 만들었습니다.Circuits.GPIO.set_interrupts/3 부팅 후 일어나는 Iex에서
GPIO.set_interrupts(HelloNerves.Util.input_gpio(), :both, receiver: HelloNerves.Observer)
lib/hello_nerves/application.ex
def children(_target) do
[
# Children for all targets except host
# Starts a worker by calling: HelloNerves.Worker.start_link(arg)
# {HelloNerves.Worker, arg},
{HelloNerves.Blinker, name: HelloNerves.Blinker},
{HelloNerves.Observer, name: HelloNerves.Observer},
{HelloNerves.SetInterrupter, name: HelloNerves.SetInterrupter}
]
end
List all child processes to be supervised
HelloNerves.Blinker
는 여기에 올려지지 않습니다.회로
htps : // / ぃぃrs 쵸오 l. 코 m / 그럼 / ぇそん s / 아 d ゔ 똥 세 d /
설명이라든지 감상이라고 할까
Raspberry Pi로 배우기 전자 공작 초소형 컴퓨터로 전자 회로 제어 (블루백스)은 재귀를 사용하는 무한 루프로 작성됩니다.
Circuits.GPIO.set_interrupts(input_gpio, :both)
를 호출하고 nerves_examples/hello_gpio/lib/hello_gpio.ex에서 메시지가 올 때까지 기다리고 있습니다.receive 또한 읽어 보면 어쩐지 알 수 있습니다.
Reference
이 문제에 관하여(Nerves를 사용하여 택트 스위치를 누르면 LED가 빛납니다 (Elixir)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torifukukaiou/items/ad3eee31dea0dc1cbcbd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)