Library for TM1651 LED controller Initial version, Battery monitor

Dependents:   mbed_TM1651

See here for more information.

Committer:
wim
Date:
Wed Oct 04 20:38:36 2017 +0000
Revision:
1:799f85133209
Parent:
0:68f5a3af8dc2
Minor Documentation fixes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:68f5a3af8dc2 1 /* mbed TM1651 Library, for TM1651 LED controller
wim 1:799f85133209 2 * Copyright (c) 2017, v01: WH, Initial version, Battery monitor
wim 0:68f5a3af8dc2 3 *
wim 0:68f5a3af8dc2 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
wim 0:68f5a3af8dc2 5 * of this software and associated documentation files (the "Software"), to deal
wim 0:68f5a3af8dc2 6 * in the Software without restriction, inclumosig without limitation the rights
wim 0:68f5a3af8dc2 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
wim 0:68f5a3af8dc2 8 * copies of the Software, and to permit persons to whom the Software is
wim 0:68f5a3af8dc2 9 * furnished to do so, subject to the following conditions:
wim 0:68f5a3af8dc2 10 *
wim 0:68f5a3af8dc2 11 * The above copyright notice and this permission notice shall be included in
wim 0:68f5a3af8dc2 12 * all copies or substantial portions of the Software.
wim 0:68f5a3af8dc2 13 *
wim 0:68f5a3af8dc2 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
wim 0:68f5a3af8dc2 15 * IMPLIED, INCLUmosiG BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
wim 0:68f5a3af8dc2 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
wim 0:68f5a3af8dc2 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
wim 0:68f5a3af8dc2 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
wim 0:68f5a3af8dc2 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
wim 0:68f5a3af8dc2 20 * THE SOFTWARE.
wim 0:68f5a3af8dc2 21 */
wim 0:68f5a3af8dc2 22 #include "mbed.h"
wim 0:68f5a3af8dc2 23 #include "TM1651.h"
wim 0:68f5a3af8dc2 24
wim 0:68f5a3af8dc2 25
wim 0:68f5a3af8dc2 26 /** Constructor for class for driving TM1651 LED controller with Serial bus interface device.
wim 0:68f5a3af8dc2 27 * @brief Supports 4 digits @ 7 segments and 7 Keys.
wim 0:68f5a3af8dc2 28 *
wim 0:68f5a3af8dc2 29 * @param PinName dio Serial bus DIO pin
wim 0:68f5a3af8dc2 30 * @param PinName clk Serial bus CLK pin
wim 0:68f5a3af8dc2 31 */
wim 0:68f5a3af8dc2 32 TM1651::TM1651(PinName dio, PinName clk) : _dio(dio), _clk(clk) {
wim 0:68f5a3af8dc2 33
wim 0:68f5a3af8dc2 34 _init();
wim 0:68f5a3af8dc2 35 }
wim 0:68f5a3af8dc2 36
wim 0:68f5a3af8dc2 37
wim 0:68f5a3af8dc2 38 /** Init the Serial interface and the controller
wim 0:68f5a3af8dc2 39 * @param none
wim 0:68f5a3af8dc2 40 * @return none
wim 0:68f5a3af8dc2 41 */
wim 0:68f5a3af8dc2 42 void TM1651::_init(){
wim 0:68f5a3af8dc2 43
wim 0:68f5a3af8dc2 44 //TM1651 uses a Serial bus that looks like I2C, but really is not.
wim 0:68f5a3af8dc2 45 //It has Start and Stop conditions like I2C and an Ack pulse, but instead of slaveaddresses and a RW bit it just transmits commands and data.
wim 0:68f5a3af8dc2 46
wim 0:68f5a3af8dc2 47 //init Serial bus
wim 0:68f5a3af8dc2 48 _dio.output();
wim 0:68f5a3af8dc2 49 // _dio.mode(PullUp);
wim 0:68f5a3af8dc2 50 wait_us(1);
wim 0:68f5a3af8dc2 51
wim 0:68f5a3af8dc2 52 _dio=1;
wim 0:68f5a3af8dc2 53 _clk=1;
wim 0:68f5a3af8dc2 54
wim 0:68f5a3af8dc2 55 //init controller
wim 0:68f5a3af8dc2 56 _display = TM1651_DSP_ON;
wim 0:68f5a3af8dc2 57 _bright = TM1651_BRT_DEF;
wim 0:68f5a3af8dc2 58 _writeCmd(TM1651_DSP_CTRL_CMD, _display | _bright ); // Display control cmd, display on/off, brightness
wim 0:68f5a3af8dc2 59
wim 0:68f5a3af8dc2 60 _writeCmd(TM1651_DATA_SET_CMD, TM1651_DATA_WR | TM1651_ADDR_INC | TM1651_MODE_NORM); // Data set cmd, normal mode, auto incr, write data
wim 0:68f5a3af8dc2 61 }
wim 0:68f5a3af8dc2 62
wim 0:68f5a3af8dc2 63
wim 0:68f5a3af8dc2 64 /** Clear the screen and locate to 0
wim 0:68f5a3af8dc2 65 */
wim 0:68f5a3af8dc2 66 void TM1651::cls() {
wim 0:68f5a3af8dc2 67
wim 0:68f5a3af8dc2 68 _start();
wim 0:68f5a3af8dc2 69
wim 0:68f5a3af8dc2 70 _write(TM1651_ADDR_SET_CMD | 0x00); // Address set cmd, 0
wim 0:68f5a3af8dc2 71 for (int cnt=0; cnt<TM1651_DISPLAY_MEM; cnt++) {
wim 0:68f5a3af8dc2 72 _write(0x00); // data
wim 0:68f5a3af8dc2 73 }
wim 0:68f5a3af8dc2 74
wim 0:68f5a3af8dc2 75 _stop();
wim 0:68f5a3af8dc2 76 }
wim 0:68f5a3af8dc2 77
wim 0:68f5a3af8dc2 78 /** Set Brightness
wim 0:68f5a3af8dc2 79 *
wim 0:68f5a3af8dc2 80 * @param char brightness (3 significant bits, valid range 0..7 (1/16 .. 14/14 dutycycle)
wim 0:68f5a3af8dc2 81 * @return none
wim 0:68f5a3af8dc2 82 */
wim 0:68f5a3af8dc2 83 void TM1651::setBrightness(char brightness){
wim 0:68f5a3af8dc2 84
wim 0:68f5a3af8dc2 85 _bright = brightness & TM1651_BRT_MSK; // mask invalid bits
wim 0:68f5a3af8dc2 86
wim 0:68f5a3af8dc2 87 _writeCmd(TM1651_DSP_CTRL_CMD, _display | _bright ); // Display control cmd, display on/off, brightness
wim 0:68f5a3af8dc2 88 }
wim 0:68f5a3af8dc2 89
wim 0:68f5a3af8dc2 90 /** Set the Display mode On/off
wim 0:68f5a3af8dc2 91 *
wim 0:68f5a3af8dc2 92 * @param bool display mode
wim 0:68f5a3af8dc2 93 */
wim 0:68f5a3af8dc2 94 void TM1651::setDisplay(bool on) {
wim 0:68f5a3af8dc2 95
wim 0:68f5a3af8dc2 96 if (on) {
wim 0:68f5a3af8dc2 97 _display = TM1651_DSP_ON;
wim 0:68f5a3af8dc2 98 }
wim 0:68f5a3af8dc2 99 else {
wim 0:68f5a3af8dc2 100 _display = TM1651_DSP_OFF;
wim 0:68f5a3af8dc2 101 }
wim 0:68f5a3af8dc2 102
wim 0:68f5a3af8dc2 103 _writeCmd(TM1651_DSP_CTRL_CMD, _display | _bright ); // Display control cmd, display on/off, brightness
wim 0:68f5a3af8dc2 104 }
wim 0:68f5a3af8dc2 105
wim 0:68f5a3af8dc2 106 /** Write databyte to TM1651
wim 0:68f5a3af8dc2 107 * @param int address display memory location to write byte
wim 0:68f5a3af8dc2 108 * @param char data byte written at given address
wim 0:68f5a3af8dc2 109 * @return none
wim 0:68f5a3af8dc2 110 */
wim 0:68f5a3af8dc2 111 void TM1651::writeData(char data, int address) {
wim 0:68f5a3af8dc2 112
wim 0:68f5a3af8dc2 113 _start();
wim 0:68f5a3af8dc2 114
wim 0:68f5a3af8dc2 115 _write(TM1651_ADDR_SET_CMD | (address & TM1651_ADDR_MSK)); // Set Address cmd
wim 0:68f5a3af8dc2 116 _write(data); // data
wim 0:68f5a3af8dc2 117
wim 0:68f5a3af8dc2 118 _stop();
wim 0:68f5a3af8dc2 119 }
wim 0:68f5a3af8dc2 120
wim 0:68f5a3af8dc2 121 /** Write Display datablock to TM1651
wim 0:68f5a3af8dc2 122 * @param DisplayData_t data Array of TM1651_DISPLAY_MEM (=4) bytes for displaydata
wim 0:68f5a3af8dc2 123 * @param length number bytes to write (valid range 0..(TM1651_MAX_NR_GRIDS * TM1651_BYTES_PER_GRID) (=4), when starting at address 0)
wim 0:68f5a3af8dc2 124 * @param int address display memory location to write bytes (default = 0)
wim 0:68f5a3af8dc2 125 * @return none
wim 0:68f5a3af8dc2 126 */
wim 0:68f5a3af8dc2 127 void TM1651::writeData(DisplayData_t data, int length, int address) {
wim 0:68f5a3af8dc2 128
wim 0:68f5a3af8dc2 129 _start();
wim 0:68f5a3af8dc2 130
wim 0:68f5a3af8dc2 131 // sanity check
wim 0:68f5a3af8dc2 132 address &= TM1651_ADDR_MSK;
wim 0:68f5a3af8dc2 133 if (length < 0) {length = 0;}
wim 0:68f5a3af8dc2 134 if ((length + address) > TM1651_DISPLAY_MEM) {length = (TM1651_DISPLAY_MEM - address);}
wim 0:68f5a3af8dc2 135
wim 0:68f5a3af8dc2 136 // _write(TM1651_ADDR_SET_CMD | 0x00); // Set Address at 0
wim 0:68f5a3af8dc2 137 _write(TM1651_ADDR_SET_CMD | address); // Set Address
wim 0:68f5a3af8dc2 138
wim 0:68f5a3af8dc2 139 for (int idx=0; idx<length; idx++) {
wim 0:68f5a3af8dc2 140 // _write(data[idx]); // data
wim 0:68f5a3af8dc2 141 _write(data[address + idx]); // data
wim 0:68f5a3af8dc2 142 }
wim 0:68f5a3af8dc2 143
wim 0:68f5a3af8dc2 144 _stop();
wim 0:68f5a3af8dc2 145 }
wim 0:68f5a3af8dc2 146
wim 0:68f5a3af8dc2 147 /** Read keydata block from TM1651
wim 0:68f5a3af8dc2 148 * @param *keydata Ptr to bytes for keydata
wim 0:68f5a3af8dc2 149 * @return bool keypress True when at least one key was pressed
wim 0:68f5a3af8dc2 150 */
wim 0:68f5a3af8dc2 151 bool TM1651::getKeys(KeyData_t *keydata) {
wim 0:68f5a3af8dc2 152
wim 0:68f5a3af8dc2 153 _start();
wim 0:68f5a3af8dc2 154
wim 0:68f5a3af8dc2 155 // Enable Key Read mode
wim 0:68f5a3af8dc2 156 _write(TM1651_DATA_SET_CMD | TM1651_KEY_RD | TM1651_ADDR_INC | TM1651_MODE_NORM); // Data set cmd, normal mode, auto incr, read data
wim 0:68f5a3af8dc2 157
wim 0:68f5a3af8dc2 158 // Read keys
wim 0:68f5a3af8dc2 159 // Bitpattern S0 S1 S2 K1 K2 1 1 1
wim 0:68f5a3af8dc2 160 *keydata = _read();
wim 0:68f5a3af8dc2 161 // printf("Key = 0x%02x\r\n", *keydata);
wim 0:68f5a3af8dc2 162
wim 0:68f5a3af8dc2 163 _stop();
wim 0:68f5a3af8dc2 164
wim 0:68f5a3af8dc2 165 // Restore Data Write mode
wim 0:68f5a3af8dc2 166 _writeCmd(TM1651_DATA_SET_CMD, TM1651_DATA_WR | TM1651_ADDR_INC | TM1651_MODE_NORM); // Data set cmd, normal mode, auto incr, write data
wim 0:68f5a3af8dc2 167
wim 0:68f5a3af8dc2 168 return (*keydata != TM1651_SW_NONE);
wim 0:68f5a3af8dc2 169 }
wim 0:68f5a3af8dc2 170
wim 0:68f5a3af8dc2 171
wim 0:68f5a3af8dc2 172 /** Generate Start condition for TM1651
wim 0:68f5a3af8dc2 173 * @param none
wim 0:68f5a3af8dc2 174 * @return none
wim 0:68f5a3af8dc2 175 */
wim 0:68f5a3af8dc2 176 void TM1651::_start() {
wim 0:68f5a3af8dc2 177
wim 0:68f5a3af8dc2 178 _dio=0;
wim 0:68f5a3af8dc2 179 wait_us(1);
wim 0:68f5a3af8dc2 180 _clk=0;
wim 0:68f5a3af8dc2 181 wait_us(1);
wim 0:68f5a3af8dc2 182 }
wim 0:68f5a3af8dc2 183
wim 0:68f5a3af8dc2 184 /** Generate Stop condition for TM1651
wim 0:68f5a3af8dc2 185 * @param none
wim 0:68f5a3af8dc2 186 * @return none
wim 0:68f5a3af8dc2 187 */
wim 0:68f5a3af8dc2 188 void TM1651::_stop() {
wim 0:68f5a3af8dc2 189
wim 0:68f5a3af8dc2 190 _dio=0;
wim 0:68f5a3af8dc2 191 wait_us(1);
wim 0:68f5a3af8dc2 192 _clk=1;
wim 0:68f5a3af8dc2 193 wait_us(1);
wim 0:68f5a3af8dc2 194 _dio=1;
wim 0:68f5a3af8dc2 195 wait_us(1);
wim 0:68f5a3af8dc2 196 }
wim 0:68f5a3af8dc2 197
wim 0:68f5a3af8dc2 198 /** Send byte to TM1651
wim 0:68f5a3af8dc2 199 * @param int data
wim 0:68f5a3af8dc2 200 * @return none
wim 0:68f5a3af8dc2 201 */
wim 0:68f5a3af8dc2 202 void TM1651::_write(int data) {
wim 0:68f5a3af8dc2 203
wim 0:68f5a3af8dc2 204 for (int bit=0; bit<8; bit++) {
wim 0:68f5a3af8dc2 205 //The TM1651 expects LSB first
wim 0:68f5a3af8dc2 206 if (((data >> bit) & 0x01) == 0x01) {
wim 0:68f5a3af8dc2 207 _dio=1;
wim 0:68f5a3af8dc2 208 }
wim 0:68f5a3af8dc2 209 else {
wim 0:68f5a3af8dc2 210 _dio=0;
wim 0:68f5a3af8dc2 211 }
wim 0:68f5a3af8dc2 212 wait_us(1);
wim 0:68f5a3af8dc2 213 _clk=1;
wim 0:68f5a3af8dc2 214 wait_us(1);
wim 0:68f5a3af8dc2 215 _clk=0;
wim 0:68f5a3af8dc2 216 wait_us(1);
wim 0:68f5a3af8dc2 217 }
wim 0:68f5a3af8dc2 218
wim 0:68f5a3af8dc2 219 _dio=1;
wim 0:68f5a3af8dc2 220
wim 0:68f5a3af8dc2 221 // Prepare DIO to read data
wim 0:68f5a3af8dc2 222 _dio.input();
wim 0:68f5a3af8dc2 223 wait_us(3);
wim 0:68f5a3af8dc2 224
wim 0:68f5a3af8dc2 225 // dummy Ack
wim 0:68f5a3af8dc2 226 _clk=1;
wim 0:68f5a3af8dc2 227 wait_us(1);
wim 0:68f5a3af8dc2 228 // _ack = _dio;
wim 0:68f5a3af8dc2 229 _clk=0;
wim 0:68f5a3af8dc2 230 wait_us(1);
wim 0:68f5a3af8dc2 231
wim 0:68f5a3af8dc2 232 // Return DIO to output mode
wim 0:68f5a3af8dc2 233 _dio.output();
wim 0:68f5a3af8dc2 234 wait_us(3);
wim 0:68f5a3af8dc2 235
wim 0:68f5a3af8dc2 236 _dio=1; //idle
wim 0:68f5a3af8dc2 237 }
wim 0:68f5a3af8dc2 238
wim 0:68f5a3af8dc2 239 /** Read byte from TM1651
wim 0:68f5a3af8dc2 240 * @return read byte
wim 0:68f5a3af8dc2 241 */
wim 0:68f5a3af8dc2 242 char TM1651::_read() {
wim 0:68f5a3af8dc2 243 char keycode = 0;
wim 0:68f5a3af8dc2 244
wim 0:68f5a3af8dc2 245 // Prepare DIO to read data
wim 0:68f5a3af8dc2 246 _dio.input();
wim 0:68f5a3af8dc2 247 wait_us(3);
wim 0:68f5a3af8dc2 248
wim 0:68f5a3af8dc2 249 for (int bit=0; bit<8; bit++) {
wim 0:68f5a3af8dc2 250
wim 0:68f5a3af8dc2 251 //The TM1651 sends bitpattern: S0 S1 S2 K1 K2 1 1 1
wim 0:68f5a3af8dc2 252 //Data is shifted out by the TM1651 on the falling edge of CLK
wim 0:68f5a3af8dc2 253 //Observe sufficient delay to allow the Open Drain DIO to rise to H levels
wim 0:68f5a3af8dc2 254 // Prepare to read next bit, LSB (ie S0) first.
wim 0:68f5a3af8dc2 255 // The code below flips bits for easier matching with datasheet
wim 0:68f5a3af8dc2 256 keycode = keycode << 1;
wim 0:68f5a3af8dc2 257
wim 0:68f5a3af8dc2 258 _clk=1;
wim 0:68f5a3af8dc2 259 wait_us(1);
wim 0:68f5a3af8dc2 260
wim 0:68f5a3af8dc2 261 // Read next bit
wim 0:68f5a3af8dc2 262 if (_dio) { keycode |= 0x01; }
wim 0:68f5a3af8dc2 263
wim 0:68f5a3af8dc2 264 _clk=0;
wim 0:68f5a3af8dc2 265 wait_us(5); // Delay to allow for slow risetime
wim 0:68f5a3af8dc2 266 }
wim 0:68f5a3af8dc2 267
wim 0:68f5a3af8dc2 268 // Return DIO to output mode
wim 0:68f5a3af8dc2 269 _dio.output();
wim 0:68f5a3af8dc2 270 wait_us(3);
wim 0:68f5a3af8dc2 271
wim 0:68f5a3af8dc2 272 // dummy Ack
wim 0:68f5a3af8dc2 273 _dio=0; //Ack
wim 0:68f5a3af8dc2 274 wait_us(1);
wim 0:68f5a3af8dc2 275
wim 0:68f5a3af8dc2 276 _clk=1;
wim 0:68f5a3af8dc2 277 wait_us(1);
wim 0:68f5a3af8dc2 278 _clk=0;
wim 0:68f5a3af8dc2 279 wait_us(1);
wim 0:68f5a3af8dc2 280
wim 0:68f5a3af8dc2 281 _dio=1; //idle
wim 0:68f5a3af8dc2 282
wim 0:68f5a3af8dc2 283 return keycode;
wim 0:68f5a3af8dc2 284 }
wim 0:68f5a3af8dc2 285
wim 0:68f5a3af8dc2 286 /** Write command and parameter to TM1651
wim 0:68f5a3af8dc2 287 * @param int cmd Command byte
wim 0:68f5a3af8dc2 288 * &Param int data Parameters for command
wim 0:68f5a3af8dc2 289 * @return none
wim 0:68f5a3af8dc2 290 */
wim 0:68f5a3af8dc2 291 void TM1651::_writeCmd(int cmd, int data){
wim 0:68f5a3af8dc2 292
wim 0:68f5a3af8dc2 293 _start();
wim 0:68f5a3af8dc2 294
wim 0:68f5a3af8dc2 295 _write((cmd & TM1651_CMD_MSK) | (data & ~TM1651_CMD_MSK));
wim 0:68f5a3af8dc2 296
wim 0:68f5a3af8dc2 297 _stop();
wim 0:68f5a3af8dc2 298 }
wim 0:68f5a3af8dc2 299
wim 0:68f5a3af8dc2 300
wim 0:68f5a3af8dc2 301 #if (OPENSMART_TEST == 1)
wim 0:68f5a3af8dc2 302 // Derived class for TM1651 used in OPEN_SMART battery display unit
wim 0:68f5a3af8dc2 303 //
wim 0:68f5a3af8dc2 304
wim 0:68f5a3af8dc2 305 /** Constructor for class for driving TM1651 LED controller
wim 0:68f5a3af8dc2 306 *
wim 0:68f5a3af8dc2 307 * @brief Supports battery display unit with 10 segments.
wim 0:68f5a3af8dc2 308 * Serial bus interface device.
wim 0:68f5a3af8dc2 309 *
wim 0:68f5a3af8dc2 310 * @param PinName dio Serial bus DIO pin
wim 0:68f5a3af8dc2 311 * @param PinName sck Serial bus CLK pin
wim 0:68f5a3af8dc2 312 */
wim 0:68f5a3af8dc2 313 TM1651_OPENSMART::TM1651_OPENSMART(PinName dio, PinName clk) : TM1651(dio, clk) {
wim 0:68f5a3af8dc2 314
wim 0:68f5a3af8dc2 315 }
wim 0:68f5a3af8dc2 316
wim 0:68f5a3af8dc2 317 /** Clear the screen and locate to 0
wim 0:68f5a3af8dc2 318 * @param none
wim 0:68f5a3af8dc2 319 * @return none
wim 0:68f5a3af8dc2 320 */
wim 0:68f5a3af8dc2 321 void TM1651_OPENSMART::cls() {
wim 0:68f5a3af8dc2 322
wim 0:68f5a3af8dc2 323 //clear local buffer
wim 0:68f5a3af8dc2 324 for (int idx=0; idx < OPENSMART_NR_GRIDS; idx++) {
wim 0:68f5a3af8dc2 325 _displaybuffer[idx] = 0x00;
wim 0:68f5a3af8dc2 326 }
wim 0:68f5a3af8dc2 327
wim 0:68f5a3af8dc2 328 writeData(_displaybuffer, (OPENSMART_NR_GRIDS * TM1651_BYTES_PER_GRID), 0);
wim 0:68f5a3af8dc2 329 }
wim 0:68f5a3af8dc2 330
wim 0:68f5a3af8dc2 331 /** Set Icon
wim 0:68f5a3af8dc2 332 *
wim 0:68f5a3af8dc2 333 * @param Icon Icon Enums Icon has Grid position encoded in 8 MSBs, Pattern encoded in 16 LSBs
wim 0:68f5a3af8dc2 334 * @return none
wim 0:68f5a3af8dc2 335 */
wim 0:68f5a3af8dc2 336 void TM1651_OPENSMART::setIcon(Icon icon) {
wim 0:68f5a3af8dc2 337 int addr, ld;
wim 0:68f5a3af8dc2 338
wim 0:68f5a3af8dc2 339 ld = icon & 0x7F;
wim 0:68f5a3af8dc2 340 addr = (icon >> 24) & 0xFF;
wim 0:68f5a3af8dc2 341 addr = (addr - 1);
wim 0:68f5a3af8dc2 342
wim 0:68f5a3af8dc2 343 //Set bits for Icon to write
wim 0:68f5a3af8dc2 344 _displaybuffer[addr] |= ld;
wim 0:68f5a3af8dc2 345 writeData(_displaybuffer, TM1651_BYTES_PER_GRID, addr);
wim 0:68f5a3af8dc2 346 }
wim 0:68f5a3af8dc2 347
wim 0:68f5a3af8dc2 348 /** Clr Icon
wim 0:68f5a3af8dc2 349 *
wim 0:68f5a3af8dc2 350 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Pattern encoded in 16 LSBs
wim 0:68f5a3af8dc2 351 * @return none
wim 0:68f5a3af8dc2 352 */
wim 0:68f5a3af8dc2 353 void TM1651_OPENSMART::clrIcon(Icon icon) {
wim 0:68f5a3af8dc2 354 int addr, ld;
wim 0:68f5a3af8dc2 355
wim 0:68f5a3af8dc2 356 ld = icon & 0x7F;
wim 0:68f5a3af8dc2 357 addr = (icon >> 24) & 0xFF;
wim 0:68f5a3af8dc2 358 addr = (addr - 1);
wim 0:68f5a3af8dc2 359
wim 0:68f5a3af8dc2 360 //Set bits for Icon to clear
wim 0:68f5a3af8dc2 361 _displaybuffer[addr] &= ~ld;
wim 0:68f5a3af8dc2 362 writeData(_displaybuffer, TM1651_BYTES_PER_GRID, addr);
wim 0:68f5a3af8dc2 363 }
wim 0:68f5a3af8dc2 364
wim 0:68f5a3af8dc2 365
wim 0:68f5a3af8dc2 366 /** Set Level
wim 0:68f5a3af8dc2 367 *
wim 0:68f5a3af8dc2 368 * @param Level level Enums Level indicates the Battery level to be displayed
wim 0:68f5a3af8dc2 369 * @return none
wim 0:68f5a3af8dc2 370 */
wim 0:68f5a3af8dc2 371 void TM1651_OPENSMART::setLevel(Level level) {
wim 0:68f5a3af8dc2 372
wim 0:68f5a3af8dc2 373 //clear local buffer
wim 0:68f5a3af8dc2 374 _displaybuffer[0] = 0x00;
wim 0:68f5a3af8dc2 375
wim 0:68f5a3af8dc2 376 //Set bits for level to write
wim 0:68f5a3af8dc2 377 switch (level) {
wim 0:68f5a3af8dc2 378 case LVL_0 :
wim 0:68f5a3af8dc2 379 _displaybuffer[0] = R12;
wim 0:68f5a3af8dc2 380 break;
wim 0:68f5a3af8dc2 381
wim 0:68f5a3af8dc2 382 case LVL_1 :
wim 0:68f5a3af8dc2 383 _displaybuffer[0] = R12 | Y3;
wim 0:68f5a3af8dc2 384 break;
wim 0:68f5a3af8dc2 385
wim 0:68f5a3af8dc2 386 case LVL_2 :
wim 0:68f5a3af8dc2 387 _displaybuffer[0] = R12 | Y3 | Y4;
wim 0:68f5a3af8dc2 388 break;
wim 0:68f5a3af8dc2 389
wim 0:68f5a3af8dc2 390 case LVL_3 :
wim 0:68f5a3af8dc2 391 _displaybuffer[0] = R12 | Y3 | Y4 | Y5;
wim 0:68f5a3af8dc2 392 break;
wim 0:68f5a3af8dc2 393
wim 0:68f5a3af8dc2 394 case LVL_4 :
wim 0:68f5a3af8dc2 395 _displaybuffer[0] = R12 | Y3 | Y4 | Y5 | G67;
wim 0:68f5a3af8dc2 396 break;
wim 0:68f5a3af8dc2 397
wim 0:68f5a3af8dc2 398 case LVL_5 :
wim 0:68f5a3af8dc2 399 _displaybuffer[0] = R12 | Y3 | Y4 | Y5 | G67 | G89;
wim 0:68f5a3af8dc2 400 break;
wim 0:68f5a3af8dc2 401
wim 0:68f5a3af8dc2 402 case LVL_6 :
wim 0:68f5a3af8dc2 403 _displaybuffer[0] = R12 | Y3 | Y4 | Y5 | G67 | G89 | B10;
wim 0:68f5a3af8dc2 404 break;
wim 0:68f5a3af8dc2 405
wim 0:68f5a3af8dc2 406 default:
wim 1:799f85133209 407 _displaybuffer[0] = 0;
wim 0:68f5a3af8dc2 408 break;
wim 0:68f5a3af8dc2 409 }
wim 0:68f5a3af8dc2 410
wim 0:68f5a3af8dc2 411 writeData(_displaybuffer, TM1651_BYTES_PER_GRID, 0);
wim 0:68f5a3af8dc2 412 }
wim 0:68f5a3af8dc2 413
wim 0:68f5a3af8dc2 414 #endif