Control Surface  1.1.1
MIDI Control Surface library for Arduino
MAX7219_Base.hpp
Go to the documentation of this file.
1 /* ✔ */
2 
3 #pragma once
4 
6 AH_DIAGNOSTIC_WERROR() // Enable errors on warnings
7 
8 #include <AH/Hardware/ExtendedInputOutput/ExtendedInputOutput.hpp>
9 
11 #include <SPI.h>
13 
15 
23 class MAX7219_Base {
24  public:
31  MAX7219_Base(pin_t loadPin) : loadPin(loadPin) {}
32 
33  static constexpr uint8_t DECODEMODE = 9;
34  static constexpr uint8_t INTENSITY = 10;
35  static constexpr uint8_t SCANLIMIT = 11;
36  static constexpr uint8_t SHUTDOWN = 12;
37  static constexpr uint8_t DISPLAYTEST = 15;
38 
43  void init() {
44  ExtIO::digitalWrite(loadPin, HIGH);
45  ExtIO::pinMode(loadPin, OUTPUT);
46  SPI.begin();
47  sendRaw(DISPLAYTEST, 0); // Normal operation, no test mode
48  sendRaw(SCANLIMIT, 7); // Scan all 8 digits
49  sendRaw(DECODEMODE, 0); // Raw LED addressing
50  sendRaw(INTENSITY, 0xF); // Maximum intensity
51  clear();
52  sendRaw(SHUTDOWN, 1); // Enable the display
53  }
54 
58  void clear() {
59  for (uint8_t j = 1; j < 8 + 1; j++)
60  sendRaw(j, 0);
61  }
62 
71  void send(uint8_t digit, uint8_t value) {
72  sendRaw((digit & 0x7) + 1, value);
73  }
74 
83  void sendRaw(uint8_t opcode, uint8_t value) {
84  ExtIO::digitalWrite(loadPin, LOW);
85  SPI.beginTransaction(settings);
86  SPI.transfer(opcode);
87  SPI.transfer(value);
88  ExtIO::digitalWrite(loadPin, HIGH);
89  SPI.endTransaction();
90  }
91 
98  void setIntensity(uint8_t intensity) {
99  sendRaw(INTENSITY, intensity & 0xF);
100  }
101 
102  private:
104  SPISettings settings = {SPI_MAX_SPEED, MSBFIRST, SPI_MODE0};
105 };
106 
108 
AH::ExtIO::pinMode
void pinMode(pin_t pin, uint8_t mode)
An ExtIO version of the Arduino function.
Definition: ExtendedInputOutput.cpp:36
AH::MAX7219_Base
A base class for classes that control MAX7219 LED drivers.
Definition: MAX7219_Base.hpp:23
AH::SPI_MAX_SPEED
constexpr static Frequency SPI_MAX_SPEED
Definition: AH/Settings/Settings.hpp:85
Warnings.hpp
AH::MAX7219_Base::send
void send(uint8_t digit, uint8_t value)
Send the value to the given digit.
Definition: MAX7219_Base.hpp:71
AH::MAX7219_Base::setIntensity
void setIntensity(uint8_t intensity)
Set the intensity of the LEDs.
Definition: MAX7219_Base.hpp:98
AH::MAX7219_Base::clear
void clear()
Turn off all LEDs.
Definition: MAX7219_Base.hpp:58
AH::pin_t
uint16_t pin_t
The type for Arduino pins (and ExtendedIOElement pins).
Definition: Hardware-Types.hpp:17
AH_DIAGNOSTIC_POP
#define AH_DIAGNOSTIC_POP()
Definition: Warnings.hpp:17
AH::MAX7219_Base::MAX7219_Base
MAX7219_Base(pin_t loadPin)
Create a MAX7219_Base object.
Definition: MAX7219_Base.hpp:31
AH::MAX7219_Base::sendRaw
void sendRaw(uint8_t opcode, uint8_t value)
Send a raw opcode and value to the MAX7219.
Definition: MAX7219_Base.hpp:83
HIGH
const uint8_t HIGH
Definition: ExtendedInputOutput.hpp:46
AH::MAX7219_Base::loadPin
pin_t loadPin
Definition: MAX7219_Base.hpp:103
LOW
const uint8_t LOW
Definition: ExtendedInputOutput.hpp:47
AH_DIAGNOSTIC_EXTERNAL_HEADER
#define AH_DIAGNOSTIC_EXTERNAL_HEADER()
Definition: Warnings.hpp:18
AH_DIAGNOSTIC_WERROR
#define AH_DIAGNOSTIC_WERROR()
Definition: Warnings.hpp:16
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::MAX7219_Base::init
void init()
Initialize the Arduino pins, SPI, and the MAX7219.
Definition: MAX7219_Base.hpp:43