Class: SSD1306::Display
- Inherits:
-
Object
- Object
- SSD1306::Display
- Defined in:
- lib/SSD1306/display.rb
Instance Attribute Summary collapse
-
#address ⇒ Object
Returns the value of attribute address.
-
#buffer ⇒ Object
Returns the value of attribute buffer.
-
#cursor ⇒ Object
Returns the value of attribute cursor.
-
#height ⇒ Object
Returns the value of attribute height.
-
#interface ⇒ Object
Returns the value of attribute interface.
-
#path ⇒ Object
Returns the value of attribute path.
-
#protocol ⇒ Object
Returns the value of attribute protocol.
-
#vccstate ⇒ Object
Returns the value of attribute vccstate.
-
#width ⇒ Object
Returns the value of attribute width.
Instance Method Summary collapse
- #clear ⇒ Object
- #clear! ⇒ Object
- #command(c) ⇒ Object
- #data(d) ⇒ Object
-
#debug_buffer ⇒ Object
1024 entries, not all of them are 0x00.
-
#dim(dim) ⇒ Object
Dim the display.
- #display! ⇒ Object
- #font_size ⇒ Object
- #font_size=(new_size) ⇒ Object
- #image(image) ⇒ Object
-
#initialize(opts = {}) ⇒ Display
constructor
A new instance of Display.
- #print(string) ⇒ Object
- #println(string) ⇒ Object
- #reset ⇒ Object
-
#set_contrast(contrast) ⇒ Object
TODO: Implement Contrast functionality.
Constructor Details
#initialize(opts = {}) ⇒ Display
Returns a new instance of Display.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/SSD1306/display.rb', line 42 def initialize(opts = {}) = { protocol: :i2c, path: '/dev/i2c-1', address: 0x3C, width: 128, height: 64, reset: 24, vccstate: SSD1306_SWITCHCAPVCC } = .merge(opts) @protocol = [:protocol] @path = [:path] @address = [:address] @width = [:width] @height = [:height] @vccstate = [:vccstate] @pages = @height / 8 @buffer = [0]*(@width*@pages) @cursor = Cursor.new @reset = [:reset] if @protocol == :i2c @interface = I2C.create(@path) elsif @protocol == :spi raise 'SPI Not Supported Currently' else raise 'Unrecognized protocol' end # For 128 x 64 display if @height == 64 self.command SSD1306_DISPLAYOFF self.command SSD1306_SETDISPLAYCLOCKDIV self.command 0x80 self.command SSD1306_SETMULTIPLEX self.command 0x3F self.command SSD1306_SETDISPLAYOFFSET self.command 0x0 self.command(SSD1306_SETSTARTLINE | 0x0) self.command SSD1306_CHARGEPUMP if @vccstate == SSD1306_EXTERNALVCC self.command 0x10 else self.command 0x14 end self.command SSD1306_MEMORYMODE self.command 0x00 self.command(SSD1306_SEGREMAP | 0x1) self.command SSD1306_COMSCANDEC self.command SSD1306_SETCOMPINS self.command 0x12 self.command SSD1306_SETCONTRAST if @vccstate == SSD1306_EXTERNALVCC self.command 0x9F else self.command 0xCf end self.command SSD1306_SETPRECHARGE if @vccstate == SSD1306_EXTERNALVCC self.command 0x22 else self.command 0xF1 end self.command SSD1306_SETVCOMDETECT self.command 0x40 self.command SSD1306_DISPLAYALLON_RESUME self.command SSD1306_NORMALDISPLAY end self.command SSD1306_DISPLAYON self.clear! end |
Instance Attribute Details
#address ⇒ Object
Returns the value of attribute address.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def address @address end |
#buffer ⇒ Object
Returns the value of attribute buffer.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def buffer @buffer end |
#cursor ⇒ Object
Returns the value of attribute cursor.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def cursor @cursor end |
#height ⇒ Object
Returns the value of attribute height.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def height @height end |
#interface ⇒ Object
Returns the value of attribute interface.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def interface @interface end |
#path ⇒ Object
Returns the value of attribute path.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def path @path end |
#protocol ⇒ Object
Returns the value of attribute protocol.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def protocol @protocol end |
#vccstate ⇒ Object
Returns the value of attribute vccstate.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def vccstate @vccstate end |
#width ⇒ Object
Returns the value of attribute width.
40 41 42 |
# File 'lib/SSD1306/display.rb', line 40 def width @width end |
Instance Method Details
#clear ⇒ Object
164 165 166 167 |
# File 'lib/SSD1306/display.rb', line 164 def clear @buffer = [0]*(@width*@pages) @cursor.reset end |
#clear! ⇒ Object
169 170 171 172 |
# File 'lib/SSD1306/display.rb', line 169 def clear! self.clear self.display! end |
#command(c) ⇒ Object
124 125 126 127 |
# File 'lib/SSD1306/display.rb', line 124 def command(c) control = 0x00 @interface.write @address, control, c end |
#data(d) ⇒ Object
129 130 131 132 |
# File 'lib/SSD1306/display.rb', line 129 def data(d) control = 0x40 @interface.write @address, control, d end |
#debug_buffer ⇒ Object
1024 entries, not all of them are 0x00
120 121 122 |
# File 'lib/SSD1306/display.rb', line 120 def debug_buffer # 1024 entries, not all of them are 0x00 @buffer = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x80, 0xFF, 0xFF, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x80, 0x80, 0x80, 0x80, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x8C, 0x8E, 0x84, 0x00, 0x00, 0x80, 0xF8, 0xF8, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0xE0, 0xC0, 0x80, 0x00, 0xE0, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFF, 0xC7, 0x01, 0x01, 0x01, 0x01, 0x83, 0xFF, 0xFF, 0x00, 0x00, 0x7C, 0xFE, 0xC7, 0x01, 0x01, 0x01, 0x01, 0x83, 0xFF, 0xFF, 0xFF, 0x00, 0x38, 0xFE, 0xC7, 0x83, 0x01, 0x01, 0x01, 0x83, 0xC7, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0x01, 0x01, 0x00, 0xFF, 0xFF, 0x07, 0x01, 0x01, 0x01, 0x00, 0x00, 0x7F, 0xFF, 0x80, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x3F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7, 0xC7, 0xC7, 0x8F, 0x8F, 0x9F, 0xBF, 0xFF, 0xFF, 0xC3, 0xC0, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x01, 0x01, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF9, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x1F, 0x0F, 0x87, 0xC7, 0xF7, 0xFF, 0xFF, 0x1F, 0x1F, 0x3D, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0x7C, 0x7D, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F, 0x07, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x1F, 0x7F, 0xFF, 0xFF, 0xF8, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xF8, 0xE0, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x0C, 0x06, 0x06, 0x0E, 0xFC, 0xF8, 0x00, 0x00, 0xF0, 0xF8, 0x1C, 0x0E, 0x06, 0x06, 0x06, 0x0C, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFE, 0xFC, 0x00, 0x18, 0x3C, 0x7E, 0x66, 0xE6, 0xCE, 0x84, 0x00, 0x00, 0x06, 0xFF, 0xFF, 0x06, 0x06, 0xFC, 0xFE, 0xFC, 0x0C, 0x06, 0x06, 0x06, 0x00, 0x00, 0xFE, 0xFE, 0x00, 0x00, 0xC0, 0xF8, 0xFC, 0x4E, 0x46, 0x46, 0x46, 0x4E, 0x7C, 0x78, 0x40, 0x18, 0x3C, 0x76, 0xE6, 0xCE, 0xCC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x0F, 0x1F, 0x1F, 0x3F, 0x3F, 0x3F, 0x3F, 0x1F, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x03, 0x07, 0x0E, 0x0C, 0x18, 0x18, 0x0C, 0x06, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x01, 0x0F, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07, 0x01, 0x00, 0x04, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x0F, 0x00, 0x00, 0x00, 0x07, 0x07, 0x0C, 0x0C, 0x18, 0x1C, 0x0C, 0x06, 0x06, 0x00, 0x04, 0x0E, 0x0C, 0x18, 0x0C, 0x0F, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00] end |
#dim(dim) ⇒ Object
Dim the display
203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/SSD1306/display.rb', line 203 def dim(dim) # dim = true: display is dimmed # dim = false: display is normal contrast = 0 # assume dim unless dim if @vccstate == SSD1306_EXTERNALVCC contrast = 0x9F else contrast = 0xCF end end self.command SSD1306_SETCONTRAST self.command contrast end |
#display! ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/SSD1306/display.rb', line 134 def display! self.command SSD1306_COLUMNADDR self.command 0 self.command(@width - 1) self.command SSD1306_PAGEADDR self.command 0 self.command(@pages - 1) # Write buffer data # TODO: This works for I2C only control = 0x40 @interface.write @address, control, @buffer.pack('c*') end |
#font_size ⇒ Object
189 190 191 |
# File 'lib/SSD1306/display.rb', line 189 def font_size return @cursor.size end |
#font_size=(new_size) ⇒ Object
193 194 195 |
# File 'lib/SSD1306/display.rb', line 193 def font_size=(new_size) @cursor.size = new_size end |
#image(image) ⇒ Object
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/SSD1306/display.rb', line 147 def image(image) image.image_type = BilevelType pix = image.export_pixels(0, 0, @width, @height, 'I') index = 0 for page in 0...@pages for x in 0...@width bits = 0 for bit in [0, 1, 2, 3, 4, 5, 6, 7] bits = bits << 1 bits |= pix[(page*8*@width) + x + ((7-bit)*@width)] == 0 ? 0 : 1 end @buffer[index] = bits index += 1 end end end |
#print(string) ⇒ Object
174 175 176 177 178 179 |
# File 'lib/SSD1306/display.rb', line 174 def print(string) string.each_byte do |c| self.print_char c end string end |
#println(string) ⇒ Object
181 182 183 184 185 186 187 |
# File 'lib/SSD1306/display.rb', line 181 def println(string) string.each_byte do |c| self.print_char c end self.print_char 10 # 10 is ASCII for \n string end |
#reset ⇒ Object
116 117 118 |
# File 'lib/SSD1306/display.rb', line 116 def reset #TODO Reset logic end |
#set_contrast(contrast) ⇒ Object
TODO: Implement Contrast functionality
198 199 200 |
# File 'lib/SSD1306/display.rb', line 198 def set_contrast(contrast) raise 'Contrast not yet implemented' end |