25 #ifndef ACE_SEGMENT_LED_MATRIX_DIRECT_H
26 #define ACE_SEGMENT_LED_MATRIX_DIRECT_H
29 #include "LedMatrixBase.h"
31 class LedMatrixDirectTest_drawElements;
33 namespace ace_segment {
46 uint8_t groupOnPattern,
47 uint8_t elementOnPattern,
49 const uint8_t* groupPins,
51 const uint8_t* elementPins
55 mGroupPins(groupPins),
56 mElementPins(elementPins),
57 mNumGroups(numGroups),
58 mNumElements(numElements)
63 uint8_t output = (0x00 ^ mGroupXorMask) & 0x1;
64 for (uint8_t group = 0; group < mNumGroups; group++) {
65 uint8_t pin = mGroupPins[group];
66 mHardware.pinMode(pin, OUTPUT);
67 mHardware.digitalWrite(pin, output);
71 output = (0x00 ^ mElementXorMask) & 0x1;
72 for (uint8_t element = 0; element < mNumElements; element++) {
73 uint8_t elementPin = mElementPins[element];
74 mHardware.pinMode(elementPin, OUTPUT);
75 mHardware.digitalWrite(elementPin, output);
81 for (uint8_t group = 0; group < mNumGroups; group++) {
82 uint8_t pin = mGroupPins[group];
83 mHardware.pinMode(pin, INPUT);
87 for (uint8_t element = 0; element < mNumElements; element++) {
88 uint8_t elementPin = mElementPins[element];
89 mHardware.pinMode(elementPin, INPUT);
93 void draw(uint8_t group, uint8_t elementPattern)
const {
94 if (group != mPrevGroup) {
95 disableGroup(mPrevGroup);
98 drawElements(elementPattern);
103 void enableGroup(uint8_t group)
const {
104 writeGroupPin(group, 0x1);
108 void disableGroup(uint8_t group)
const {
109 writeGroupPin(group, 0x0);
114 for (uint8_t group = 0; group < mNumGroups; group++) {
121 friend class ::LedMatrixDirectTest_drawElements;
124 void drawElements(uint8_t pattern)
const {
125 for (uint8_t element = 0; element < mNumElements; element++) {
126 writeElementPin(element, pattern);
132 void writeElementPin(uint8_t element, uint8_t output)
const {
133 uint8_t elementPin = mElementPins[element];
134 mHardware.digitalWrite(elementPin, (output ^ mElementXorMask) & 0x1);
138 void writeGroupPin(uint8_t group, uint8_t output)
const {
139 uint8_t groupPin = mGroupPins[group];
140 mHardware.digitalWrite(groupPin, (output ^ mGroupXorMask) & 0x1);
145 const uint8_t*
const mGroupPins;
146 const uint8_t*
const mElementPins;
147 uint8_t
const mNumGroups;
148 uint8_t
const mNumElements;
151 mutable uint8_t mPrevGroup = 0;