I've been banging my head all day to get it to work. The animation is from 3 bitmaps switched periodically. The code uses wire lib. Screen is 128x64, i2c, 1306 driver. The code is for Arduino Uno or Nano.
To convert image to code:
On a PC (MS Paint) save image as monochrom bmp.
Download LCD Assistant app from http://en.radzio.dxp.pl/bitmap_converter/
Set it to Byte Orientation - Vertical, Pixels/byte - 8. Save file as text file and copy the bitmap array to the code page.
To convert image to code:
On a PC (MS Paint) save image as monochrom bmp.
Download LCD Assistant app from http://en.radzio.dxp.pl/bitmap_converter/
Set it to Byte Orientation - Vertical, Pixels/byte - 8. Save file as text file and copy the bitmap array to the code page.
B4X:
'I2C OLED connections
'SDA to A4
'SCL to A5
Sub Process_Globals
Public Serial1 As Serial
Private master As WireMaster
Private const addr As Byte = 0x3C
Private tmr As Timer
Private in As Pin
End Sub
Private Sub AppStart
Serial1.Initialize(115200)
tmr.Initialize("tmr_Tick", 1000)
in.Initialize(in.A0, in.MODE_INPUT)
tmr.Enabled = True
master.Initialize
RunNative("speed", Null) 'set I2C to 400KHz
oled_init
Delay(1000)
clr_screen
bmp1(2,40)
End Sub
Sub tmr_Tick
bmp2(1,48)
Delay(500)
bmp3(1,48)
End Sub
Sub bmp1(y As Byte, x As Byte)
Dim page, h, i As Byte
Dim img1() As Byte = Array As Byte( _
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, 0xFC, 0xFC, 0xFC, 0xF8, 0xF8, 0xF8, 0xF8, 0xF0, 0xF0, 0xF0, 0xF0, 0xE0, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0, 0xE0, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, _
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, _
0xC0, 0xDF, 0xDF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xEF, 0xEF, 0xCF, 0xC6, 0x00, 0x00, _
0x00, 0x00, 0xFF, 0xFF, 0x3F, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, _
0xFF, 0xFF, 0xF7, 0xF7, 0xF7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, _
0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0xFF, 0xFF, 0x1F, 0x00, 0x00, _
0x00, 0x00, 0x0F, 0x0F, 0x18, 0xDF, 0x5F, 0x7F, 0x7F, 0x2F, 0xAF, 0xFF, 0xFF, 0x0F, 0x0F, 0x0F, _
0x0F, 0x0F, 0x07, 0x03, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0xE0, 0xF0, 0x70, 0x30, 0x30, 0x30, 0xF1, 0xFF, 0xFF, 0x30, 0x30, 0x30, _
0x70, 0xF0, 0xE0, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00) '209 w44 h38
For page=0 To 4
For h=0 To 2
Dim c(17) As Byte
c(0)=0x40
For i=1 To 16
c(i)=img1((i-1)+16*h+48*page)
Next
command(0x21) 'col addr
command(h*16+x) 'col start
command(h*16+x+16) 'col End
command(0x22) '0x22
command(y+page) ' Page start
command(y+1+page) ' Page End
master.WriteTo(addr,c)
Next
Next
End Sub
Sub bmp2(y As Byte, x As Byte)
Dim page, i As Byte
Dim img1() As Byte = Array As Byte( _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xE0, 0x80, 0x80, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x60, 0xF0, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, _
0x00, 0x00, 0x00, 0x02, 0x07, 0x03, 0x06, 0x00, 0x00, 0x80, 0x80, 0xC0, 0xC0, 0x80, 0x80, 0x00, _
0x00, 0x00, 0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFC, 0xFC, 0xFC, 0xFE, 0xFE, 0xFE, 0xFE, 0x7E, 0x3E, _
0x3E, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xBE) '75 w25 h24
For page=0 To 2
'For h=0 To 2
Dim c(26) As Byte
c(0)=0x40
For i=1 To 25
c(i)=img1((i-1)+25*page)
Next
command(0x21) 'col addr
command(x) 'col start
command(x+25) 'col End
command(0x22) '0x22
command(y+page) ' Page start
command(y+1+page) ' Page End
master.WriteTo(addr,c)
'Next
Next
End Sub
Sub bmp3(y As Byte, x As Byte)
Dim page, i As Byte
Dim img1() As Byte = Array As Byte( _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0xE0, 0xF0, 0xF0, _
0xF0, 0xF0, 0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0, _
0xE0, 0xF0, 0xF0, 0xF2, 0xFF, 0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x3F, 0x1F, 0x00, 0x00, _
0x00, 0x00, 0xC0, 0xF0, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x00, _
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00) '75 w25 h24
For page=0 To 2
'For h=0 To 2
Dim c(26) As Byte
c(0)=0x40
For i=1 To 25
c(i)=img1((i-1)+25*page)
Next
command(0x21) 'col addr
command(x) 'col start
command(x+25) 'col End
command(0x22) '0x22
command(y+page) ' Page start
command(y+1+page) ' Page End
master.WriteTo(addr,c)
'Next
Next
End Sub
Sub command(cmnd As Byte)
Dim cb(2) As Byte
cb(0)=0
cb(1)=cmnd
master.WriteTo(addr,cb)
End Sub
Sub oled_init
command(0xAE) 'DISPLAYOFF
command(0x8D) ' CHARGEPUMP *
command(0x14) ' 0x14-pump on
command(0x20) ' MEMORYMODE
command(0x0) ' 0x0=horizontal, 0x01=vertical, 0x02=page
command(0xA1) ' SEGREMAP * A0/A1=top/bottom
command(0xC8) ' COMSCANDEC * C0/C8=left/right
command(0xDA) ' SETCOMPINS *
command(0x12) '0x22=4rows, 0x12=8rows
command(0x81) ' SETCONTRAST
command(0x9F) '0x8F
command(0xAF) ' DISPLAYON
End Sub
Sub clr_screen
Dim x, y As Byte
Dim c() As Byte = Array As Byte(0x40,0,0,0,0,0,0,0,0)
For y = 0 To 7
For x = 0 To 15
command(0x21) 'col addr
command(8 * x) 'col start
command(8 * x + 7) 'col End
command(0x22) '0x22
command(y) ' Page start
command(y) ' Page End
master.WriteTo(addr,c)
Next
Next
End Sub
#if C
void speed (B4R::Object* o) {
Wire.setClock(400000); //400khz
}
#End if
Attachments
Last edited: