Arduino Helpers master
Utility library for Arduino


This example demonstrates the use of shift registers as if they were just normal IO pins. The SPI interface is used because it's easy and fast.

AVR, AVR USB, Nano Every, Nano 33 IoT, Nano 33 BLE, Pi Pico, Due, Teensy 3.x, ESP8266, ESP32


Connect an LED (and series resistor) between the first output of the shift register and ground.

Remember to connect the enable pin of the shift register to ground and the master reset pin to Vcc in order to enable it.


This sketch will blink the LED once a second.

Written by PieterP, 2018-09-01

#include <Arduino_Helpers.h> // Include the Arduino Helpers library.
using namespace ExtIO; // Bring the ExtIO pin functions into your sketch
// Instantiate a shift register with the SPI slave select pin as latch pin, most
// significant bit first, and a total of 8 outputs.
SPIShiftRegisterOut<8> sreg {SPI, SS, MSBFIRST};
const pin_t ledPin =; // first pin of the shift register
void setup() {
sreg.begin(); // Initialize the shift registers
pinMode(ledPin, OUTPUT); // You don't even need this line, since
// shift registers are always outputs
void loop() {
// Toggle the state of the LED every 1/2 second
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin, LOW);
constexpr PinStatus_t LOW
constexpr PinStatus_t HIGH
constexpr PinMode_t OUTPUT
Dummy header file for Arduino builder.
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
pin_t pin(pin_t pin) const
Get the extended IO pin number of a given physical pin of this extended IO element.
A class for serial-in/parallel-out shift registers, like the 74HC595 that are connected to the SPI bu...
void pinMode(pin_t pin, PinMode_t mode)
An ExtIO version of the Arduino function.
void digitalWrite(pin_t pin, PinStatus_t val)
An ExtIO version of the Arduino function.
A namespace with alternatives to the standard Arduino IO functions that can be used with extended IO ...