Control Surface  1.2.0
MIDI Control Surface library for Arduino
ShiftRegisterOut.ipp
Go to the documentation of this file.
2 #include "ShiftRegisterOut.hpp"
3 
5 
6 template <uint8_t N>
8  pin_t latchPin, BitOrder_t bitOrder)
9  : ShiftRegisterOutBase<N>(latchPin, bitOrder), dataPin(dataPin),
10  clockPin(clockPin) {}
11 
12 template <uint8_t N>
14  ExtIO::pinMode(dataPin, OUTPUT);
15  ExtIO::pinMode(clockPin, OUTPUT);
16  ExtIO::pinMode(this->latchPin, OUTPUT);
17  updateBufferedOutputs();
18 }
19 
20 template <uint8_t N>
22  if (!this->dirty)
23  return;
24  ExtIO::digitalWrite(this->latchPin, LOW);
25  const uint8_t bufferLength = this->buffer.getBufferLength();
26  if (this->bitOrder == LSBFIRST)
27  for (uint8_t i = 0; i < bufferLength; i++)
28  ExtIO::shiftOut(dataPin, clockPin, LSBFIRST,
29  this->buffer.getByte(i));
30  else
31  for (int8_t i = bufferLength - 1; i >= 0; i--)
32  ExtIO::shiftOut(dataPin, clockPin, MSBFIRST,
33  this->buffer.getByte(i));
34 
35  ExtIO::digitalWrite(this->latchPin, HIGH);
36  this->dirty = false;
37 }
38 
LOW
const PinStatus_t LOW
Definition: ExtendedInputOutput.hpp:57
AH::ShiftRegisterOutBase
A class for serial-in/parallel-out shift registers, like the 74HC595.
Definition: ShiftRegisterOutBase.hpp:26
AH::ShiftRegisterOut
A class for serial-in/parallel-out shift registers, like the 74HC595.
Definition: ShiftRegisterOut.hpp:23
AH::pin_t
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
Definition: Hardware-Types.hpp:17
ShiftRegisterOut.hpp
ExtendedInputOutput.hpp
AH::ExtIO::digitalWrite
void digitalWrite(pin_t pin, PinStatus_t val)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:48
HIGH
const PinStatus_t HIGH
Definition: ExtendedInputOutput.hpp:56
AH::ShiftRegisterOut::begin
void begin() override
Initialize the shift register.
Definition: ShiftRegisterOut.ipp:13
OUTPUT
const PinMode_t OUTPUT
Definition: ExtendedInputOutput.hpp:60
AH::ExtIO::shiftOut
void shiftOut(pin_t dataPin, pin_t clockPin, BitOrder_t bitOrder, uint8_t val)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:178
AH::ShiftRegisterOut::updateBufferedOutputs
void updateBufferedOutputs() override
Write the state buffer to the physical outputs.
Definition: ShiftRegisterOut.ipp:21
BitOrder_t
uint8_t BitOrder_t
Definition: ExtendedInputOutput.hpp:53
AH::ExtIO::pinMode
void pinMode(pin_t pin, PinMode_t mode)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:36
BEGIN_AH_NAMESPACE
#define BEGIN_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:9
END_AH_NAMESPACE
#define END_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:10