diff --git a/keywords.txt b/keywords.txt index 4711e16..23a09a0 100755 --- a/keywords.txt +++ b/keywords.txt @@ -1,6 +1,7 @@ ShiftRegister74HC595 KEYWORD1 setAll KEYWORD2 setAll_P KEYWORD2 +setRegister KEYWORD2 getAll KEYWORD2 set KEYWORD2 setNoUpdate KEYWORD2 diff --git a/src/ShiftRegister74HC595.h b/src/ShiftRegister74HC595.h index ac78fdf..9f8cfeb 100755 --- a/src/ShiftRegister74HC595.h +++ b/src/ShiftRegister74HC595.h @@ -16,6 +16,7 @@ class ShiftRegister74HC595 ShiftRegister74HC595(const uint8_t serialDataPin, const uint8_t clockPin, const uint8_t latchPin); void setAll(const uint8_t * digitalValues); + void setRegister(const uint8_t reg, const uint8_t digitalValues); #ifdef __AVR__ void setAll_P(const uint8_t * digitalValuesProgmem); // Experimental, PROGMEM data #endif diff --git a/src/ShiftRegister74HC595.hpp b/src/ShiftRegister74HC595.hpp index cb88886..2d40641 100644 --- a/src/ShiftRegister74HC595.hpp +++ b/src/ShiftRegister74HC595.hpp @@ -40,6 +40,17 @@ void ShiftRegister74HC595::setAll(const uint8_t * digitalValues) updateRegisters(); } +// Set all pins of a single shift registers at once. +// digitalVAlues is a uint8_t, reg is a uint8_t from 0 to Size -1 +template +void ShiftRegister74HC595::setRegister(const uint8_t reg, const uint8_t digitalValues) +{ + if (reg >=0 && reg < Size) { + memcpy( _digitalValues + reg, &digitalValues, 1); // dest, src, size + updateRegisters(); + } +} + // Experimental // The same as setAll, but the data is located in PROGMEM // For example with: