Control Surface  1.1.1
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  update();
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, uint8_t(LSBFIRST),
29  this->buffer.getByte(i));
30  else
31  for (int8_t i = bufferLength - 1; i >= 0; i--)
32  ExtIO::shiftOut(dataPin, clockPin, uint8_t(MSBFIRST),
33  this->buffer.getByte(i));
34 
35  ExtIO::digitalWrite(this->latchPin, HIGH);
36  this->dirty = false;
37 }
38 
AH::ExtIO::pinMode
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:36
AH::ShiftRegisterOutBase
A class for serial-in/parallel-out shift registers, like the 74HC595.
Definition: ShiftRegisterOutBase.hpp:25
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
HIGH
const uint8_t HIGH
Definition: ExtendedInputOutput.hpp:46
AH::ShiftRegisterOut::begin
void begin() override
Initialize the shift register.
Definition: ShiftRegisterOut.ipp:13
LOW
const uint8_t LOW
Definition: ExtendedInputOutput.hpp:47
AH::ShiftRegisterOut::BitOrder_t
typename ShiftRegisterOutBase< N >::BitOrder_t BitOrder_t
Definition: ShiftRegisterOut.hpp:25
AH::ShiftRegisterOut::update
void update() override
Write the state buffer to the physical outputs.
Definition: ShiftRegisterOut.ipp:21
BEGIN_AH_NAMESPACE
#define BEGIN_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:9
OUTPUT
const uint8_t OUTPUT
Definition: ExtendedInputOutput.hpp:50
END_AH_NAMESPACE
#define END_AH_NAMESPACE
Definition: AH/Settings/NamespaceSettings.hpp:10
AH::ExtIO::digitalWrite
void digitalWrite(pin_t pin, uint8_t val)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:48
AH::ExtIO::shiftOut
void shiftOut(pin_t dataPin, pin_t clockPin, uint8_t bitOrder, uint8_t val)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:73