class I2C::Drivers::LCD::Display
Driver class for the 2004/1602 I2C
LCD
Display
.
forked from https://github.com/nerab/i2c-ss1602
see github.com/andec/i2c 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
- LCD_LINE_0
lcd ram address
- LCD_LINE_1
- LCD_LINE_2
- LCD_LINE_3
Attributes
cols[R]
cursor[R]
device[R]
rows[R]
Public Class Methods
new(bus_or_bus_name, device_address, cols=20, rows=4, dotsize=8)
click to toggle source
# File lib/i2c/drivers/lcd/display.rb, line 16 def initialize(bus_or_bus_name, device_address, cols=20, rows=4, dotsize=8) 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 @cols = cols @rows = rows @dotsize = dotsize init_sequence @cursor = Cursor.new(self) end
Public Instance Methods
backlight_off()
click to toggle source
# File lib/i2c/drivers/lcd/display.rb, line 71 def backlight_off device.write(FLAG_NOBACKLIGHT) end
backlight_on()
click to toggle source
# File lib/i2c/drivers/lcd/display.rb, line 67 def backlight_on device.write(FLAG_BACKLIGHT) end
clear()
click to toggle source
# File lib/i2c/drivers/lcd/display.rb, line 32 def clear write(COMMAND_CLEARDISPLAY) write(COMMAND_RETURNHOME) end
off()
click to toggle source
# File lib/i2c/drivers/lcd/display.rb, line 63 def off write(COMMAND_DISPLAYCONTROL | FLAG_DISPLAYOFF) end
on()
click to toggle source
# File lib/i2c/drivers/lcd/display.rb, line 59 def on write(COMMAND_DISPLAYCONTROL | FLAG_DISPLAYON) end
text(string, row, pad = false)
click to toggle source
# File lib/i2c/drivers/lcd/display.rb, line 37 def text(string, row, pad = false) case row when 0 write(LCD_LINE_0) when 1 write(LCD_LINE_1) when 2 write(LCD_LINE_2) when 3 write(LCD_LINE_3) 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/lcd/display.rb, line 78 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/lcd/display.rb, line 161 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/lcd/display.rb, line 178 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/lcd/display.rb, line 185 def write_four_bits(data) @device.write(data | FLAG_BACKLIGHT) strobe(data) end