How do I display text on OLED using this method?
Use DrawText method:
Thereâs now also the âlow memoryâ section of GHI Electronics â Where Hardware Meets Software that talks about graphics.
@ GMod(Errol) - Thanks!
With this code I get âHello worldâ on the OLED, but how can I clear the lower part of the OLED (see image)?
Bitmap bitmap = new Bitmap(100, 20);
byte[] framebuffer = new byte[100 * 20 * 2];
bitmap.DrawText("Hello world!",Resources.GetFont(Resources.FontResources.small), GT.Color.Magenta, 10, 0);
Util.BitmapConvertBPP(bitmap.GetBitmap(), framebuffer, Util.BPP_Type.BPP16_RGB_BE);
oledDisplay.FlushRawBitmap(0, 0, 100, 20, framebuffer);
This code tells it where to put the image:
oledDisplay.FlushRawBitmap(0, 0, 100, 20, framebuffer);
So if you change it to:
oledDisplay.FlushRawBitmap(0, 20, 100, 20, framebuffer);
Then it will place the image lower on the screen. So, to clear the screen you need to empty the framebuffer and write it, consecutively, to the screen, starting at the top and working down in blocks of 20 pixelsâŚ
@ GMod(Errol) - That worked, thanks!
I also need the new version. I bought several Cerbuino and several Seed OledâŚ
I got my first Cerberus board and the OLED screen and of course ran into the same issuesâŚ
I couldnât get it to work correctly with the
oledDisplay.FlushRawBitmap(0, 0, 100, 20, framebuffer);
I would always end up with weird artifacts and could not get it to clear the screen correctly.
I ended up downloading all the source code and modifying the OledDisplay.cs this worked great in case anyone is interested. According to the spec for SSD1351 there are several modes for the display: 256?? (is that even true?) , 65K and 262K. Hereâs how you can enable the different modes:
Comment out the following in âInitializeDisplayâ and replace the parameter for
//vram = new byte[Width * Height * 2];
...
SendParams2(Cmd.SetRemapAndColorDepth1, CmdValue.RemapColor_262K_16bit); // This will set 262K colors
...
//SendParams(Cmd.WriteRAMCommand0, vram);
ClearScreen(); // new method
Add a new enum:
private enum CmdValue {
RemapColor_65K_16bit = 0x74,
RemapColor_256 = 0x34,
RemapColor_262K_16bit = 0xF4,
RemapColor_262K_18bit = 0xB4
}
Add a new method to allow for the above enum values, makes it cleaner:
private void SendParams2(Cmd cmd, CmdValue value) {
byte[] args = { (byte)value };
Send((byte)cmd, args);
}
âŚAnd finally the method that will clear the screen with a color
public void ClearScreen() {
byte[] vram = new byte[256];
for (int i = 0; i < vram.Length; i++) {
vram[i] = 127; // this is just a random color set it to whatever you want or zero/remove to clear to black
}
for (int i = 0; i < 128; i++) {
SendParams(Cmd.WriteRAMCommand0, vram);
}
}
By setting the background to a color you can really see the difference between the different modes 65K and 262K. It also clears the screen properly.
Looks very interesting, will give it a try. At a first glance though, doesnât look like it has any specific handling for the low-memory situation that occurs with the Cerberus?
Thatâs primarily what I was looking for.
Btw, do you happen to know the pin numbers for the SSD1351? Iâm looking for the RW pin number to allow reading back from the OLED memory.
There are two pins already defined:
_rst = new GTI.DigitalOutput(socket, Socket.Pin.Four, true, this);
_dc = new GTI.DigitalOutput(socket, Socket.Pin.Three, true, this);
I need this:
_rw = new GTI.DigitalOutput(socket, Socket.Pin.????, true, this);
The OLED is SPI based, so no RW pin. The SPI port has an input for reading data, but the OLED display doesnât have a output to connect to the input, so you canât read back. I was trying to use the OLEDâs ram as the frame buffer, doing a Read from display/Modify data/Write data back to display, but found there is no way of reading the data off the displayâŚ
Thanks, youâre right itâs write-only. I guess the only way you can do any sort of alpha blending would be by simultaneously sending the data to the display and to some sort of RAM cache that can be read back for processing.
@ Marcin - The link I provided was developed specifically for Cerb40 w/ OLED. You can have multiple full screen PicoBitmaps on the Cerb at once, and since you have access to the pixels in RAM you can then use them for alpha-blending.
Here it is running GPS, Keypad, Snake, Etc
adiT_dgygjk
Just saw this thread - bring it back from the dead!
@ Skewworks what project box is that? Mind shooting me an email about how you have things mounted inside (or some inside shots)?
@ Skewworks - forgot I had your email (whereâs the PM function ), will shoot you a note in case you arenât following this thread for some reason.