주사위 만들기 (Elixir, Nerves)

16260 단어 NervesElixir

소개


  • 주사위를 만드십시오
  • 물론 Nerves

  • Elixir 에서 IoT를 할 수 있습니다
  • Nerves는 Elixir의 IoT에서 나우에서 영 cool 놀라운 녀석입니다 🚀



  • 버튼을 누르고있는 동안 가챠 가챠를 표시하고 놓으면 적절한 숫자를 표시합니다.


  • 배선이 가챠 가챠입니다

  • 전제 기사


  • Nerves를 사용하여 택트 스위치를 누르면 LED가 빛납니다 (Elixir)

  • @MzRyuKa 님의 Hatena 블로그에 게시했습니다. RaspberryPi의 핀 역할을 확인하는 데 편리한 사이트 "http://pinout.xyz" - 미즈류의 자유장 블로그
  • 여기에서 소개 된 pinout.xy을보고 GPIO를 선택했습니다.
  • 감사합니다!


  • 소스 코드


  • hello_nerves

  • 소스 코드 발췌


  • 관련 커밋
  • 6da3307336c53f3427364723719ae921157d9216
  • 1f0ebc1ac85ba53c62e227f9a585fd4eacb80ebc
  • b9f1dcba85164f261936b021cb411294f7720289


  • lib/hello_nerves/led/seven_seg.ex
    defmodule HelloNerves.Led.SevenSeg do
      @a_led_pin Application.get_env(:hello_nerves, :a_led_pin, 26)
      @b_led_pin Application.get_env(:hello_nerves, :b_led_pin, 6)
      @c_led_pin Application.get_env(:hello_nerves, :c_led_pin, 5)
      @d_led_pin Application.get_env(:hello_nerves, :d_led_pin, 16)
      @e_led_pin Application.get_env(:hello_nerves, :e_led_pin, 23)
      @f_led_pin Application.get_env(:hello_nerves, :f_led_pin, 25)
      @g_led_pin Application.get_env(:hello_nerves, :g_led_pin, 22)
    
      alias Circuits.GPIO
    
      require Logger
    
      def clear do
        [@a_led_pin, @b_led_pin, @c_led_pin, @d_led_pin, @e_led_pin, @f_led_pin, @g_led_pin]
        |> Enum.map(&gpio(&1))
        |> Enum.map(&turn_off(&1))
      end
    
      def show do
        fun = random_fun()
    
        1..3
        |> Enum.each(fn _ ->
          fun.()
          Process.sleep(50)
          clear()
          Process.sleep(25)
        end)
    
        fun.()
      end
    
      def random do
        fun = random_fun()
        fun.()
      end
    
      def random_forever do
        random()
    
        50..75
        |> Enum.random()
        |> Process.sleep()
    
        random_forever()
      end
    
      def one do
        clear()
        [@b_led_pin, @c_led_pin] |> flush()
      end
    
      def two do
        clear()
        [@a_led_pin, @b_led_pin, @g_led_pin, @e_led_pin, @d_led_pin] |> flush()
      end
    
      def three do
        clear()
        [@a_led_pin, @b_led_pin, @g_led_pin, @c_led_pin, @d_led_pin] |> flush()
      end
    
      def four do
        clear()
        [@f_led_pin, @g_led_pin, @b_led_pin, @c_led_pin] |> flush()
      end
    
      def five do
        clear()
        [@f_led_pin, @g_led_pin, @c_led_pin, @d_led_pin, @a_led_pin] |> flush()
      end
    
      def six do
        clear()
        [@f_led_pin, @e_led_pin, @d_led_pin, @c_led_pin, @g_led_pin] |> flush()
      end
    
      defp flush(pins) do
        pins
        |> Enum.map(&gpio(&1))
        |> Enum.map(&turn_on(&1))
      end
    
      defp turn_on(gpio) do
        GPIO.write(gpio, 1)
      end
    
      defp turn_off(gpio) do
        GPIO.write(gpio, 0)
      end
    
      defp gpio(pin) do
        {:ok, output_gpio} = GPIO.open(pin, :output)
        output_gpio
      end
    
      defp random_fun do
        [&one/0, &two/0, &three/0, &four/0, &five/0, &six/0]
        |> Enum.random()
      end
    end
    
  • GPIO는 한 획씩 끈적하고 ON/OFF하여 숫자를 나타냅니다
  • 특히.
  • & 함수 캡처 연산자
  • Function capturing

  •   defp random_fun do
        [&one/0, &two/0, &three/0, &four/0, &five/0, &six/0]
        |> Enum.random()
      end
    

    좋은 웹페이지 즐겨찾기