This is a guide to customisation/advanced usage of the Freetronics OLED Shield. If you haven't yet hooked up your OLED Shield, you should read the QuickStart Guide first.

These instructions are for advanced users who want to further customise their OLED Shield.



Connection Pinout

The OLED Shield uses these pins on the Arduino:

Arduino PinSignalConnected To
2 OLED DNC OLED128 Pin 9
3 OLED RST OLED128 Pin 10
4 MicroSD CS OLED128 Pin 3
5 MicroSD CD (Not used on current OLED128) OLED128 Pin 4
6 Joystick Button (active low) Joystick
7 OLED CS OLED128 Pin 8
9 Piezo buzzer Piezo buzzer
A2 Joystick X position Joystick
A3 Joystick Y position Joystick

Driving Multiple Screens

OLED Shield includes a connector to direct mount an OLED128 module on top, and remote mount an OLED128 at the end of a cable.


If you connect an OLED128 to both of these connectors at once, output will be automatically mirrored on both of them. You don't need to do anything! Note that you can't have a MicroSD card inserted into both OLED128 modules at once, or neither will work.

Separate Displays

If you have good soldering skills, it is possible to use the cut-track jumpers on the shield together with some rewiring to treat the direct and remote mounted displays as separate displays, with different output on each.

To achieve this, cut between the pads of solder jumper "SJ4" on the underside of the OLED Shield. SJ4 can be found near the right-angle cable connector:



Cutting this jumper separates the "OLED CS" output on the 10-pin "remote display" cable connector from digital pin 7 and the "OLED CS" output on the direct mounting connector. You can then solder a wire from the solder pad or the small hole next to SJ4, back to a different (unused) pin on the OLEDShield.



We suggest wiring this pad to digital pin 8.

In your sketch, if you now create a second OLED128 class that uses this new CS pin (but shares the other pins with the onboard connector), you'll be able to update each screen independently of the other. The top of your sketch will look something like this: 

const byte pin_cs_onboard = 7;
const byte pin_cs_remote = 8;
const byte pin_dc = 2;
const byte pin_reset = 3;

OLED oled1(pin_cs_onboard, pin_dc, pin_reset);
OLED oled2(pin_cs_remote, pin_dc, -1);

void setup()

Note that we also set the reset pin on the second OLED, oled2, to -1. This is because both OLEDs are sharing a reset pin, and we want to stop resetting both modules when we call begin() on the oled2 instance (which would cause oled1 to lose its initialisation settings.)


Other Cut Track Jumpers

There are some other cut track jumpers on the OLED Shield that can be useful if you want to disable certain functionality or reuse a pin for another purpose:

Solder JumperConnects
SJ1 Piezo buzzer to Digital Pin 9.
Cut this jumper to reuse Pin 9 for something else.
SJ2 Joystick button to Digital Pin 6.
Cut this jumper to reuse Pin 6 for something else.
SJ3 Remote OLED MicroSD CS to Digital Pin 4
Cut this jumper and resolder to another digital pin if you want to access both MicroSD card slots independtly.
SJ4 Remote OLED CS to Digital Pin 7.
Cut this jumper and resolder to another digital pin if you want two separate screens (see above.)
SJ5 Remote OLED RST to Digital Pin 3.
Cut this jumper and resolder to another digital pin if you want to be able to reset each screen separately (this is not required to just have separate displays, you can just set the reset pin of the second screen to -1 as shown above.)