@@ -33,21 +33,15 @@ bool HT16K33::begin(uint8_t addressLeft, uint8_t addressLeftCenter, uint8_t addr
3333 _deviceAddressRight = addressRight; // grab the address of the alphanumeric
3434
3535 if (_deviceAddressRight != DEFAULT_NOTHING_ATTACHED)
36- {
3736 sizeOfDisplay = 16 ;
38- }
3937 else if (_deviceAddressRightCenter != DEFAULT_NOTHING_ATTACHED)
40- {
4138 sizeOfDisplay = 12 ;
42- }
4339 else if (_deviceAddressLeftCenter != DEFAULT_NOTHING_ATTACHED)
44- {
4540 sizeOfDisplay = 8 ;
46- Serial. println ( " Hello, I've increased sizeOfDisplay " );
47- }
41+ else
42+ sizeOfDisplay = 4 ;
4843
49- // TODO: try to figure this out
50- // malloc more displayRAM
44+ // TODO: malloc more displayRAM
5145
5246 // DEBUGGING
5347 Serial.print (" sizeOfDisplay: " );
@@ -92,45 +86,48 @@ bool HT16K33::isConnected(uint8_t displayNumber)
9286
9387 _i2cPort->beginTransmission (lookUpDisplayAddress (displayNumber));
9488 if (_i2cPort->endTransmission () == 0 )
95- {
9689 return true ;
97- }
9890 return false ;
9991}
10092
10193bool HT16K33::initialize (uint8_t displayNumber)
10294{
103- // DEBUGGIN
104- Serial.println (" In initialize()" );
105-
10695 uint8_t address = lookUpDisplayAddress (displayNumber);
10796
108- Serial.print (" The current address is : 0x" );
97+ Serial.print (" Initialize : 0x" );
10998 Serial.println (address, HEX);
11099
111- // We need this temp zero value when we only write one byte to HT16K33 RAM
112- uint8_t temp = 0 ;
113-
114100 // internal system clock enable
115101 if (writeOne (address, 0x21 ) == false )
116102 return false ;
117- // //ROW/INT output pin set, INT pin output level set
118- // if (writeRAM(address, 0xA0, (uint8_t *)&temp, 0) == false)
119- // return false;
120- // //Set brightness of display by duty cycle
121- // if (setBrightnessDisplay(displayNumber, 16) == false)
122- // {
123- // Serial.println("I've failed setBrightness()");
124- // return false;
125- // }
126- // //Blinking set - blinking off, display on
127- // if (setBlinkRateDisplay(displayNumber, 0) == false)
128- // {
129- // Serial.println("I've failed setBlinkRate()");
130- // blinkRate = 0b000;
131- // onState = 1;
132- // return false;
133- // }
103+
104+ // ROW/INT output pin set, INT pin output level set
105+ uint8_t temp = 0 ;
106+ if (writeRAM (address, 0xA0 , (uint8_t *)&temp, 0 ) == false )
107+ return false ;
108+
109+ // Set brightness of display by duty cycle
110+ if (setBrightnessDisplay (displayNumber, 16 ) == false )
111+ {
112+ Serial.println (" I've failed setBrightness()" );
113+ return false ;
114+ }
115+
116+ // Blinking set - blinking off, display on
117+ if (setBlinkRateDisplay (displayNumber, 0 ) == false )
118+ {
119+ Serial.println (" I've failed setBlinkRate()" );
120+ blinkRate = ALPHA_BLINK_RATE_NOBLINK;
121+ displayOnOff = 1 ;
122+ return false ;
123+ }
124+
125+ if (singleDisplayOn (displayNumber) == false )
126+ {
127+ Serial.println (" Failed display on" );
128+ return false ;
129+ }
130+
134131 return true ;
135132}
136133
@@ -239,67 +236,79 @@ bool HT16K33::setBlinkRateDisplay(uint8_t displayNumber, float rate)
239236
240237 if (rate == 2 )
241238 {
242- blinkRate = 0b010 ;
239+ blinkRate = ALPHA_BLINK_RATE_2HZ ;
243240 }
244241 else if (rate == 1 )
245242 {
246- blinkRate = 0b100 ;
243+ blinkRate = ALPHA_BLINK_RATE_1HZ ;
247244 }
248245 else if (rate == 0.5 )
249246 {
250- blinkRate = 0b110 ;
247+ blinkRate = ALPHA_BLINK_RATE_0_5HZ ;
251248 }
252249 // default to no blink
253250 else
254251 {
255- blinkRate = 0b000 ;
252+ blinkRate = ALPHA_BLINK_RATE_NOBLINK ;
256253 }
257254
258- // If the display is blinking, then it must also be on
259- onState = 1 ;
255+ uint8_t dataToWrite = ALPHA_CMD_DISPLAY_SETUP | (blinkRate << 1 ) | displayOnOff;
256+
257+ return (writeRAM (lookUpDisplayAddress (displayNumber), dataToWrite, (uint8_t *)&temp, 0 ));
258+ }
259+
260+ bool HT16K33::singleDisplayOn (uint8_t displayNumber)
261+ {
262+ return setSingleDisplayOn (displayNumber, true );
263+ }
264+ bool HT16K33::singleDisplayOff (uint8_t displayNumber)
265+ {
266+ return setSingleDisplayOn (displayNumber, false );
267+ }
268+
269+ // Set or clear the display on/off bit of a given display number
270+ bool HT16K33::setSingleDisplayOn (uint8_t displayNumber, bool turnOnDisplay)
271+ {
272+ if (turnOnDisplay == true )
273+ displayOnOff = ALPHA_DISPLAY_ON;
274+ else
275+ displayOnOff = ALPHA_DISPLAY_OFF;
276+
277+ int temp = 0 ;
278+ uint8_t dataToWrite = ALPHA_CMD_DISPLAY_SETUP | (blinkRate << 1 ) | displayOnOff;
260279
261- uint8_t writeBlinkRate = 0b10000001 ^ blinkRate;
262- return (writeRAM (lookUpDisplayAddress (displayNumber), writeBlinkRate, (uint8_t *)&temp, 0 ));
280+ return (writeRAM (lookUpDisplayAddress (displayNumber), dataToWrite, (uint8_t *)&temp, 0 ));
263281}
264282
283+ // Turn on/off the entire display
265284bool HT16K33::displayOn ()
266285{
267286 bool status = true ;
287+
288+ displayOnOff = ALPHA_DISPLAY_ON;
289+
268290 for (uint8_t i = 0 ; i < sizeOfDisplay / 4 ; i++)
269291 {
270292 if (singleDisplayOn (i) == false )
271293 status = false ;
272294 }
273- onState = 1 ;
274- return status;
275- }
276295
277- bool HT16K33::singleDisplayOn (uint8_t displayNumber)
278- {
279- int temp = 0 ;
280- uint8_t state = 0b10000001 ^ blinkRate;
281- return (writeRAM (lookUpDisplayAddress (displayNumber), state, (uint8_t *)&temp, 0 ));
296+ return status;
282297}
283298
284299bool HT16K33::displayOff ()
285300{
286301 bool status = true ;
302+
303+ displayOnOff = ALPHA_DISPLAY_OFF;
304+
287305 for (uint8_t i = 0 ; i < sizeOfDisplay / 4 ; i++)
288306 {
289307 if (singleDisplayOff (i) == false )
290308 status = false ;
291309 }
292- onState = 0 ;
293- return status;
294- }
295310
296- bool HT16K33::singleDisplayOff (uint8_t displayNumber)
297- {
298- // DEBUGGING:
299- Serial.println (" Turning single display off" );
300- int temp = 0 ;
301- uint8_t state = 0b10000000 ^ blinkRate;
302- return (writeRAM (lookUpDisplayAddress (displayNumber), state, (uint8_t *)&temp, 0 ));
311+ return status;
303312}
304313
305314/* ---------------------------- Light up functions ---------------------------------*/
0 commit comments