class I2C::Drivers::SS1602::Display
Driver class for the SainSmart 1602 I2C
LCD Display
.
Parts copied from github.com/paulbarber/raspi-gpio/blob/master/lcd_display.py
Constants
- BIT_EN
- BIT_RS
- BIT_RW
- COMMAND_CLEARDISPLAY
commands
- COMMAND_CURSORSHIFT
- COMMAND_DISPLAYCONTROL
- COMMAND_ENTRYMODESET
- COMMAND_FUNCTIONSET
- COMMAND_RETURNHOME
- COMMAND_SETCGRAMADDR
- COMMAND_SETDDRAMADDR
- FLAG_1LINE
- FLAG_2LINE
- FLAG_4BITMODE
- FLAG_5x10DOTS
- FLAG_5x8DOTS
- FLAG_8BITMODE
flags for function set
- FLAG_BACKLIGHT
flags for backlight control
- FLAG_BLINKOFF
- FLAG_BLINKON
- FLAG_CURSORMOVE
- FLAG_CURSOROFF
- FLAG_CURSORON
- FLAG_DISPLAYMOVE
flags for display/cursor shift
- FLAG_DISPLAYOFF
- FLAG_DISPLAYON
flags for display on/off control
- FLAG_ENTRYLEFT
- FLAG_ENTRYRIGHT
flags for display entry mode
- FLAG_ENTRYSHIFTDECREMENT
- FLAG_ENTRYSHIFTINCREMENT
- FLAG_MOVELEFT
- FLAG_MOVERIGHT
- FLAG_NOBACKLIGHT
Attributes
cols[R]
cursor[R]
rows[R]
Public Class Methods
new(bus_or_bus_name, device_address)
click to toggle source
# File lib/i2c/drivers/ss1602/display.rb, line 16 def initialize(bus_or_bus_name, device_address) if bus_or_bus_name.respond_to?(:write) @device = BusDevice.new(bus_or_bus_name, device_address) else @device = BusDevice.new(I2C.create(bus_or_bus_name), device_address) end @rows = 2 @cols = 16 init_sequence @cursor = Cursor.new(self) end
Public Instance Methods
clear()
click to toggle source
# File lib/i2c/drivers/ss1602/display.rb, line 31 def clear write(COMMAND_CLEARDISPLAY) write(COMMAND_RETURNHOME) end
off()
click to toggle source
# File lib/i2c/drivers/ss1602/display.rb, line 58 def off write(COMMAND_DISPLAYCONTROL | FLAG_DISPLAYOFF) end
on()
click to toggle source
# File lib/i2c/drivers/ss1602/display.rb, line 54 def on write(COMMAND_DISPLAYCONTROL | FLAG_DISPLAYON) end
text(string, row, pad = false)
click to toggle source
# File lib/i2c/drivers/ss1602/display.rb, line 36 def text(string, row, pad = false) case row when 0 write(0x80) when 1 write(0xC0) else raise "Only rows #{0..(@rows - 1)} are supported" end # Right-pad with spaces so that the line only shows string string = sprintf('%-1$*2$s', string, @cols) if pad string.each_char do |c| write(c.ord, BIT_RS) end end
write(cmd, mode = 0)
click to toggle source
Send a low-level command to the display
# File lib/i2c/drivers/ss1602/display.rb, line 65 def write(cmd, mode = 0) write_four_bits(mode | (cmd & 0xF0)) write_four_bits(mode | ((cmd << 4) & 0xF0)) end
Private Instance Methods
init_sequence()
click to toggle source
# File lib/i2c/drivers/ss1602/display.rb, line 142 def init_sequence write(0x03) write(0x03) write(0x03) write(0x02) write(COMMAND_FUNCTIONSET | FLAG_2LINE | FLAG_5x8DOTS | FLAG_4BITMODE) on clear write(COMMAND_ENTRYMODESET | FLAG_ENTRYLEFT) sleep(0.2) end
strobe(data)
click to toggle source
Clocks EN to latch command
# File lib/i2c/drivers/ss1602/display.rb, line 159 def strobe(data) @device.write(data | BIT_EN | FLAG_BACKLIGHT) sleep(0.0005) @device.write(((data & ~BIT_EN) | FLAG_BACKLIGHT)) sleep(0.001) end
write_four_bits(data)
click to toggle source
# File lib/i2c/drivers/ss1602/display.rb, line 166 def write_four_bits(data) @device.write(data | FLAG_BACKLIGHT) strobe(data) end