diff --git a/ShiftRegister.cpp b/ShiftRegister.cpp new file mode 100644 index 0000000..2294df0 --- /dev/null +++ b/ShiftRegister.cpp @@ -0,0 +1,27 @@ +#include "ShiftRegister.h" + +void ShiftRegister::set(uint8_t value) +{ + for (uint8_t bit = 0; bit < 8; ++bit) + { + setSerialPin(value & (1 << (7 - bit))); + pulseShiftPin(); + } + + pulseStoragePin(); +} + +void ShiftRegister::pulseShiftPin() +{ + setShiftPin(false); + setShiftPin(true); + setShiftPin(false); +} + +void ShiftRegister::pulseStoragePin() +{ + setStoragePin(false); + setStoragePin(true); + setStoragePin(false); +} + diff --git a/ShiftRegister.h b/ShiftRegister.h new file mode 100644 index 0000000..f9a8e5f --- /dev/null +++ b/ShiftRegister.h @@ -0,0 +1,18 @@ +#pragma once + +#include + +class ShiftRegister +{ + public: + void set(uint8_t value); + + private: + virtual void setSerialPin(bool value) = 0; + virtual void setShiftPin(bool value) = 0; + virtual void setStoragePin(bool value) = 0; + + void pulseShiftPin(); + void pulseStoragePin(); +}; +