25 #ifndef ACE_SEGMENT_HT16K33_MODULE_H
26 #define ACE_SEGMENT_HT16K33_MODULE_H
30 #include "../LedModule.h"
32 class Ht16k33ModuleTest_patternForChipPos_colonDisabled;
33 class Ht16k33ModuleTest_patternForChipPos_colonEnabled;
35 namespace ace_segment {
65 template <
typename T_WIREI, u
int8_t T_DIGITS>
94 memset(mPatterns, 0, T_DIGITS);
95 writeCommand(kSystemOn);
96 writeCommand(kDisplayOn);
100 writeCommand(kDisplayOff);
101 writeCommand(kSystemOff);
114 mEnableColon = enable;
125 mPatterns[pos] = pattern;
129 return mPatterns[pos];
133 mBrightness = brightness & 0xF;
161 mWire.beginTransmission(mAddr);
164 for (uint8_t chipPos = 0; chipPos < T_DIGITS + 1; ++chipPos) {
165 uint8_t pattern = patternForChipPos(chipPos, mPatterns, mEnableColon);
166 mWire.write(pattern);
169 mWire.endTransmission(
false);
172 writeCommand(mBrightness | kBrightness);
176 friend class ::Ht16k33ModuleTest_patternForChipPos_colonDisabled;
177 friend class ::Ht16k33ModuleTest_patternForChipPos_colonEnabled;
180 void writeCommand(uint8_t command) {
181 mWire.beginTransmission(mAddr);
182 mWire.write(command);
183 mWire.endTransmission();
190 static uint8_t patternForChipPos(
191 uint8_t chipPos,
const uint8_t patterns[],
bool enableColon) {
196 uint8_t pattern = patterns[1];
206 bool hasColon = patterns[1] & 0x80;
207 return hasColon ? 0x02 : 0x00;
222 static uint8_t
const kSystemOff = 0x20;
223 static uint8_t
const kSystemOn = 0x21;
224 static uint8_t
const kDisplayOff = 0x80;
225 static uint8_t
const kDisplayOn = 0x81;
226 static uint8_t
const kBrightness = 0xE0;
238 uint8_t mPatterns[T_DIGITS];