Hello,
This is a (relatively long) post on an interesting and very crisp, cute, small, cheap, relatively fast, graphic display:
I have discovered recently (www.digole.com) a very small (0.96") but very nice graphic display, based on OLED, i.e. each pixel of the display can emit light, (instead of the standard LCD display where each pixel can block light from backlighting leds.
As a result, the display is extremely visible, even with sunlight present. Resolution is 128X64.
The particular reference I have been experimenting is Mono OLED--0.96" Serial: UART/I2C/SPI 128x64 OLED Display Blue DS12864OLED-2B(CN)...
3 interfaces type are there on the display, and one can choose by a simple jumper, either serial, or I2C, or SPI.
As a bonus, the display is reasonably fast (as seen on their posted demo), and moreover, only "high level" commands are sent to the display (which incorporate a microprocessor), saving memory the arduino. Fonts are preloaded, and I found that font 10 is still extremely readable and crisp.
With this font, up to 6 lines of 25 char/line may be displayed.
I have experimented with both the serial, and the i2C, and it worked out of the box with the libraries that they give.
A further point of interest that I had initially not identified, is the fact that the I2C address can be changed easily, and this change is persistent (survives power loss, e.g. is stored in EEPROM): As a result, it is possible to operate several screen in parallel on the I2C bus , multiplying the total display capacity !
I am presently operating 2 of those displays on the I2C bus on the same Arduino. Given the fairly low price of the unit, I now plan to add 3 or 4 such displays on my single Arduino.
A yet further point of interest (also that I had initially not identified), is the presence of a high-level command enabling the relatively fast displacement of a whole block of pixels on the screen: I realize now that this opens the way to displaying time data with a moving window, e.g. the new data point shifts the the left of the screen the older data points. I have not started such implementation, but this is begging for it.
A last point: they advertise that there is also a port on the display with 5 pins for digital output; actually (i) the library they give does not comprise such additional port control, and (ii), when testing with a voltmeter, pins 0,2,3,4 are set to zero, but curiously pin1 is set to 1 (on the 2 displays that I have)
Furthermore, (iii), I have tried to add the missing functionality to the library (simply following the general line of the writing of the library), but with no success.
Here below are the snippets of code I added, but without gaining control on the port !
Is there a suggestion on this last point for programming ? have others succeeded on controlling those pins ?
added to DigoleSerial.h :
void digitalOut(uint8_t zz); //** added: send Digital byte data to suppl. output pins (0 to 4)
added to DigoleSerial.cpp :
// Added : output byte on additional output pins on Display Board
void DigoleSerialDisp::digitalOut(uint8_t zz) { //
Print::print("DOUTB");
write(kk);
}