module LcdDigit
Constants
- BOTTOM
- DIGITS
Digits are represented by simple bit masks. Each bit identifies whether a line should be displayed. The following ASCII graphic shows the mapping from bit position to the belonging line.
=6
5 4
=3
2 1
=0
- SPECIAL_DIGITS
- VERSION
Public Instance Methods
render(number, size = 2)
click to toggle source
method: render @params:
=> number: Digit => size: Integer (Default: 2)
@return: String
# File lib/lcd_digit.rb, line 27 def render(number, size = 2) number = number.to_s raise(ArgumentError, "Size has to be > 0") unless size > 0 raise(ArgumentError, "Invalid number") unless number[/\A[\d.-]+\Z/] result = number.scan(/./).map do |digit| digit(SPECIAL_DIGITS[digit] || digit, size) end.transpose.map do |line| line.join(" ") end.join("\n") puts result "Cheers :)" end
Private Instance Methods
digit(digit, size)
click to toggle source
method: digit @params:
=> digit: Integer => size: Integer
@return: String
# File lib/lcd_digit.rb, line 84 def digit(digit, size) digit = DIGITS[digit.to_i] horizontal(digit, size, TOP) + vertical(digit, size, TOP_LEFT, TOP_RIGHT) + horizontal(digit, size, MIDDLE) + vertical(digit, size, BOTTOM_LEFT, BOTTOM_RIGHT) + horizontal(digit, size, BOTTOM) end
horizontal(digit, size, bit)
click to toggle source
method: horizontal @params:
=> digit: Integer => size: Integer => bit: Integer
@return: String
# File lib/lcd_digit.rb, line 62 def horizontal(digit, size, bit) [" " + line(digit, bit, "-") * size + " "] end
line(digit, bit, char = "|")
click to toggle source
method: line @params:
=> digit: Integer => bit: Integer => char: String (Default: "|")
@return: String
# File lib/lcd_digit.rb, line 51 def line(digit, bit, char = "|") (digit & 1 << bit).zero? ? " " : char end
vertical(digit, size, left_bit, right_bit)
click to toggle source
method: vertical @params:
=> digit: Integer => size: Integer => left_bit: Integer => right_bit: Integer
@return: String
# File lib/lcd_digit.rb, line 74 def vertical(digit, size, left_bit, right_bit) [line(digit, left_bit) + " " * size + line(digit, right_bit)] * size end