From 071d13450d205a546104b39e4a234a57e0d39f27 Mon Sep 17 00:00:00 2001 From: uvos Date: Thu, 10 Mar 2022 22:23:38 +0100 Subject: [PATCH] fix input shift register reading --- inputshiftreg.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/inputshiftreg.h b/inputshiftreg.h index 925b818..660001f 100644 --- a/inputshiftreg.h +++ b/inputshiftreg.h @@ -22,6 +22,12 @@ public: const unsigned char clk, const unsigned char serOut, const unsigned char parallelLoad): _port(portReg), _pin(pinReg), _pinSerOut(serOut), _pinClk(clk), _pinParallelLoad(parallelLoad) { + if constexpr(invert) + *_port &= ~(1<<_pinParallelLoad); + else + *_port |= (1<<_pinParallelLoad); + + read(); } bool getBit(unsigned char bit) { @@ -34,13 +40,11 @@ public: { if constexpr(invert) { - *_port &= ~(1<<_pinParallelLoad); *_port |= (1<<_pinParallelLoad); *_port &= ~(1<<_pinParallelLoad); - + for(unsigned char i = 0; i < BITS; ++i) { - *_port &= ~(1 << _pinClk); bool value = *_pin & (1 << _pinSerOut); if constexpr(invertInput) value = !value; @@ -48,14 +52,13 @@ public: data[i/8] |= (1<<(i%8)); else data[i/8] &= ~(1<<(i%8)); + *_port &= ~(1 << _pinClk); *_port |= (1 << _pinClk); } } else { - *_port |= (1<<_pinParallelLoad); *_port &= ~(1<<_pinParallelLoad); - *_port |= (1<<_pinParallelLoad); for(unsigned char i = 0; i < BITS; ++i) { @@ -69,6 +72,7 @@ public: data[i/8] &= ~(1<<(i%8)); *_port &= ~(1 << _pinClk); } + *_port |= (1<<_pinParallelLoad); } return data; }