lib/tm1638_font.ex

defmodule TM1638.Font do
  @moduledoc """
  The bits are displayed by mapping bellow
    -- 0 --
   |       |
   5       1
   |       |
    -- 6 --
   |       |
   4       2
   |       |
    -- 3 --   o 7
  """

  @spec render(integer | binary) :: String.t()
  def render(integer) when is_integer(integer), do: render(<<integer::8>>)

  def render(<<a::1, b::1, c::1, d::1, e::1, f::1, g::1, h::1>>) do
    """
    <%= if h == 1, do: "-- 0 --", else: "       " %>
    <%= if c == 1, do: "|", else: " " %>     <%= if g == 1, do: "|", else: " " %>
    <%= if c == 1, do: "5", else: " " %>     <%= if g == 1, do: "1", else: " " %>
    <%= if c == 1, do: "|", else: " " %>     <%= if g == 1, do: "|", else: " " %>
    <%= if b == 1, do: "-- 6 --", else: "       " %>
    <%= if d == 1, do: "|", else: " " %>     <%= if f == 1, do: "|", else: " " %>
    <%= if d == 1, do: "4", else: " " %>     <%= if f == 1, do: "2", else: " " %>
    <%= if d == 1, do: "|", else: " " %>     <%= if f == 1, do: "|", else: " " %>
    <%= if e == 1, do: "-- 3 --", else: "       " %> <%= if a == 1, do: "o", else: " " %>
    """
    |> EEx.eval_string(a: a, b: b, c: c, d: d, e: e, f: f, g: g, h: h)
  end

  def font do
    %{
      # (32) <space>
      " " => 0b00000000,
      # (33) !
      "!" => 0b10000110,
      # (34) "
      "\"" => 0b00100010,
      # (40) (
      "(" => 0b00110000,
      # (41) )
      ")" => 0b00000110,
      # (44) ,
      "," => 0b00000100,
      # (45) -
      "-" => 0b01000000,
      # (46) .
      "." => 0b10000000,
      # (47) /
      "/" => 0b01010010,
      # (48) 0
      "0" => 0b00111111,
      # (49) 1
      "1" => 0b00000110,
      # (50) 2
      "2" => 0b01011011,
      # (51) 3
      "3" => 0b01001111,
      # (52) 4
      "4" => 0b01100110,
      # (53) 5
      "5" => 0b01101101,
      # (54) 6
      "6" => 0b01111101,
      # (55) 7
      "7" => 0b00100111,
      # (56) 8
      "8" => 0b01111111,
      # (57) 9
      "9" => 0b01101111,
      # (61) = \
      "=" => 0b01001000,
      # (63) ?
      "?" => 0b01010011,
      # (64) @
      "@" => 0b01011111,
      # (65) A
      "A" => 0b01110111,
      # (66) B
      "B" => 0b01111111,
      # (67) C
      "C" => 0b00111001,
      # (68) D
      "D" => 0b00111111,
      # (69) E
      "E" => 0b01111001,
      # (70) F
      "F" => 0b01110001,
      # (71) G
      "G" => 0b00111101,
      # (72) H
      "H" => 0b01110110,
      # (73) I
      "I" => 0b00000110,
      # (74) J
      "J" => 0b00011111,
      # (75) K
      "K" => 0b01101001,
      # (76) L
      "L" => 0b00111000,
      # (77) M
      "M" => 0b00010101,
      # (78) N
      "N" => 0b00110111,
      # (79) O
      "O" => 0b00111111,
      # (80) P
      "P" => 0b01110011,
      # (81) Q
      "Q" => 0b01100111,
      # (82) R
      "R" => 0b00110001,
      # (83) S
      "S" => 0b01101101,
      # (84) T
      "T" => 0b01111000,
      # (85) U
      "U" => 0b00111110,
      # (86) V
      "V" => 0b00101010,
      # (87) W
      "W" => 0b00011101,
      # (88) X
      "X" => 0b01110110,
      # (89) Y
      "Y" => 0b01101110,
      # (90) Z
      "Z" => 0b01011011,
      # (91) [ \
      "[" => 0b00111001,
      # (93) ]
      "]" => 0b00001111,
      # (95) _
      "_" => 0b00001000,
      # (96) `
      "`" => 0b00100000,
      # (97) a
      "a" => 0b01011111,
      # (98) b
      "b" => 0b01111100,
      # (99) c
      "c" => 0b01011000,
      # (100) d
      "d" => 0b01011110,
      # (101) e
      "e" => 0b01111011,
      # (102) f
      "f" => 0b00110001,
      # (103) g
      "g" => 0b01101111,
      # (104) h
      "h" => 0b01110100,
      # (105) i
      "i" => 0b00000100,
      # (106) j
      "j" => 0b00001110,
      # (107) k
      "k" => 0b01110101,
      # (108) l
      "l" => 0b00110000,
      # (109) m
      "m" => 0b01010101,
      # (110) n
      "n" => 0b01010100,
      # (111) o
      "o" => 0b01011100,
      # (112) p
      "p" => 0b01110011,
      # (113) q
      "q" => 0b01100111,
      # (114) r
      "r" => 0b01010000,
      # (115) s
      "s" => 0b01101101,
      # (116) t
      "t" => 0b01111000,
      # (117) u
      "u" => 0b00011100,
      # (118) v
      "v" => 0b00101010,
      # (119) w
      "w" => 0b00011101,
      # (120) x
      "x" => 0b01110110,
      # (121) y
      "y" => 0b01101110,
      # (122) z
      "z" => 0b01000111,
      # (123) { \
      "{" => 0b01000110,
      # (124) |
      "|" => 0b00000110,
      # (125) }
      "}" => 0b01110000,
      # (126) ~
      "~" => 0b00000001
    }
  end
end