Skip to content
10 changes: 6 additions & 4 deletions seesaw_neopixel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -284,13 +284,15 @@ void seesaw_NeoPixel::clear() {
// Clear local pixel buffer
memset(pixels, 0, numBytes);

// Now clear the pixels on the seesaw
uint8_t writeBuf[32];
memset(writeBuf, 0, 32);
// Now clear the pixels on the seesaw.
// Max write buffer size is I2C buffer limit (32 bytes) minus sizes
// for seesaw regHigh (1 byte) and regLow (1 byte).
uint8_t writeBuf[30];
memset(writeBuf, 0, 30);
for (uint8_t offset = 0; offset < numBytes; offset += 32 - 4) {
writeBuf[0] = (offset >> 8);
writeBuf[1] = offset;
this->write(SEESAW_NEOPIXEL_BASE, SEESAW_NEOPIXEL_BUF, writeBuf, 32);
this->write(SEESAW_NEOPIXEL_BASE, SEESAW_NEOPIXEL_BUF, writeBuf, 30);
}
}

Expand Down