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
wim 0:68f5a3af8dc2 23 #ifndef TM1651_H
wim 0:68f5a3af8dc2 24 #define TM1651_H
wim 0:68f5a3af8dc2 25
wim 0:68f5a3af8dc2 26 // Select one of the testboards for TM1651 LED controller
wim 0:68f5a3af8dc2 27 #include "TM1651_Config.h"
wim 0:68f5a3af8dc2 28
wim 0:68f5a3af8dc2 29 /** An interface for driving TM1651 LED controller
wim 0:68f5a3af8dc2 30 *
wim 0:68f5a3af8dc2 31 * @code
wim 0:68f5a3af8dc2 32 * #include "mbed.h"
wim 0:68f5a3af8dc2 33 * #include "TM1651.h"
wim 0:68f5a3af8dc2 34 *
wim 0:68f5a3af8dc2 35 * Serial pc(USBTX, USBRX);
wim 0:68f5a3af8dc2 36 *
wim 0:68f5a3af8dc2 37 * //DisplayData_t size is 4 bytes (4 grids @ 7 segments)
wim 0:68f5a3af8dc2 38 * TM1651::DisplayData_t all_str = {0x7F, 0x7F, 0x7F, 0x7F};
wim 0:68f5a3af8dc2 39 *
wim 0:68f5a3af8dc2 40 * // KeyData_t size is 1 bytes
wim 0:68f5a3af8dc2 41 * TM1651::KeyData_t keydata;
wim 0:68f5a3af8dc2 42 *
wim 0:68f5a3af8dc2 43 * // TM1651 declaration, Select the desired type in TM1651_Config.h
wim 0:68f5a3af8dc2 44 * TM1651_OPENSMART OPENSMART(p6, p7); //LPC1768
wim 0:68f5a3af8dc2 45 * //TM1651_OPENSMART OPENSMART(D9, D10); //F401
wim 0:68f5a3af8dc2 46 *
wim 0:68f5a3af8dc2 47 * int main() {
wim 0:68f5a3af8dc2 48 * OPENSMART.cls();
wim 0:68f5a3af8dc2 49 * OPENSMART.writeData(all_str);
wim 0:68f5a3af8dc2 50 * wait(1);
wim 0:68f5a3af8dc2 51 * OPENSMART.setBrightness(TM1651_BRT0);
wim 0:68f5a3af8dc2 52 * wait(1);
wim 0:68f5a3af8dc2 53 * OPENSMART.setBrightness(TM1651_BRT3);
wim 0:68f5a3af8dc2 54 *
wim 0:68f5a3af8dc2 55 * float delay=0.1;
wim 0:68f5a3af8dc2 56 * while (1) {
wim 0:68f5a3af8dc2 57 * OPENSMART.cls();
wim 0:68f5a3af8dc2 58 * wait(0.5);
wim 0:68f5a3af8dc2 59 *
wim 0:68f5a3af8dc2 60 * // Levels
wim 0:68f5a3af8dc2 61 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_0); wait(delay);
wim 0:68f5a3af8dc2 62 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_1); wait(delay);
wim 0:68f5a3af8dc2 63 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_2); wait(delay);
wim 0:68f5a3af8dc2 64 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_3); wait(delay);
wim 0:68f5a3af8dc2 65 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_4); wait(delay);
wim 0:68f5a3af8dc2 66 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_5); wait(delay);
wim 0:68f5a3af8dc2 67 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_6); wait(delay);
wim 0:68f5a3af8dc2 68 * // Levels off
wim 0:68f5a3af8dc2 69 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_5); wait(delay);
wim 0:68f5a3af8dc2 70 * OPENSMART.setLevel(TM1651_OPENSMART::LVL_4); wait(delay);
wim 0:68f5a3af8dc2 71 *
wim 0:68f5a3af8dc2 72 * // Check and read keydata
wim 0:68f5a3af8dc2 73 * if (OPENSMART.getKeys(&keydata)) {
wim 0:68f5a3af8dc2 74 * pc.printf("Keydata = 0x%02x\r\n", keydata);
wim 0:68f5a3af8dc2 75 *
wim 0:68f5a3af8dc2 76 * if (keydata == TM1651_SW9_BIT) { //sw9
wim 0:68f5a3af8dc2 77 * OPENSMART.cls();
wim 0:68f5a3af8dc2 78 * OPENSMART.printf("--09");
wim 0:68f5a3af8dc2 79 * }
wim 0:68f5a3af8dc2 80 * } // Check keydata
wim 0:68f5a3af8dc2 81 * } // while
wim 0:68f5a3af8dc2 82 * }
wim 0:68f5a3af8dc2 83 * @endcode
wim 0:68f5a3af8dc2 84 */
wim 0:68f5a3af8dc2 85
wim 0:68f5a3af8dc2 86
wim 0:68f5a3af8dc2 87 //TM1651 Display data
wim 0:68f5a3af8dc2 88 #define TM1651_MAX_NR_GRIDS 4
wim 0:68f5a3af8dc2 89 #define TM1651_BYTES_PER_GRID 1
wim 0:68f5a3af8dc2 90
wim 0:68f5a3af8dc2 91 //Significant bits Keymatrix data
wim 0:68f5a3af8dc2 92 //#define TM1638_KEY_MSK 0xFF
wim 0:68f5a3af8dc2 93
wim 0:68f5a3af8dc2 94 //Memory size in bytes for Display and Keymatrix
wim 0:68f5a3af8dc2 95 #define TM1651_DISPLAY_MEM (TM1651_MAX_NR_GRIDS * TM1651_BYTES_PER_GRID)
wim 0:68f5a3af8dc2 96 #define TM1651_KEY_MEM 1
wim 0:68f5a3af8dc2 97
wim 0:68f5a3af8dc2 98 //Reserved bits for commands
wim 0:68f5a3af8dc2 99 #define TM1651_CMD_MSK 0xC0
wim 0:68f5a3af8dc2 100
wim 0:68f5a3af8dc2 101 //Data setting commands
wim 0:68f5a3af8dc2 102 #define TM1651_DATA_SET_CMD 0x40
wim 0:68f5a3af8dc2 103 #define TM1651_DATA_WR 0x00
wim 0:68f5a3af8dc2 104 #define TM1651_KEY_RD 0x02
wim 0:68f5a3af8dc2 105 #define TM1651_ADDR_INC 0x00
wim 0:68f5a3af8dc2 106 #define TM1651_ADDR_FIXED 0x04
wim 0:68f5a3af8dc2 107 #define TM1651_MODE_NORM 0x00
wim 0:68f5a3af8dc2 108 #define TM1651_MODE_TEST 0x08
wim 0:68f5a3af8dc2 109
wim 0:68f5a3af8dc2 110 //Address setting commands
wim 0:68f5a3af8dc2 111 #define TM1651_ADDR_SET_CMD 0xC0
wim 0:68f5a3af8dc2 112 #define TM1651_ADDR_MSK 0x03 //0..3
wim 0:68f5a3af8dc2 113
wim 0:68f5a3af8dc2 114 //Display control commands
wim 0:68f5a3af8dc2 115 #define TM1651_DSP_CTRL_CMD 0x80
wim 0:68f5a3af8dc2 116 #define TM1651_BRT_MSK 0x07
wim 0:68f5a3af8dc2 117 #define TM1651_BRT0 0x00 //Pulsewidth 1/16
wim 0:68f5a3af8dc2 118 #define TM1651_BRT1 0x01
wim 0:68f5a3af8dc2 119 #define TM1651_BRT2 0x02
wim 0:68f5a3af8dc2 120 #define TM1651_BRT3 0x03
wim 0:68f5a3af8dc2 121 #define TM1651_BRT4 0x04
wim 0:68f5a3af8dc2 122 #define TM1651_BRT5 0x05
wim 0:68f5a3af8dc2 123 #define TM1651_BRT6 0x06
wim 0:68f5a3af8dc2 124 #define TM1651_BRT7 0x07 //Pulsewidth 14/16
wim 0:68f5a3af8dc2 125
wim 0:68f5a3af8dc2 126 #define TM1651_BRT_DEF TM1651_BRT3
wim 0:68f5a3af8dc2 127
wim 0:68f5a3af8dc2 128 #define TM1651_DSP_OFF 0x00
wim 0:68f5a3af8dc2 129 #define TM1651_DSP_ON 0x08
wim 0:68f5a3af8dc2 130
wim 0:68f5a3af8dc2 131
wim 0:68f5a3af8dc2 132 //Access to 8 Switches
wim 0:68f5a3af8dc2 133 //S0 S1 S2 K1 K2 1 1 1
wim 0:68f5a3af8dc2 134 //K1 = 0 1
wim 0:68f5a3af8dc2 135 //K2 = 1
wim 0:68f5a3af8dc2 136 #define TM1651_SW1_BIT 0xEF
wim 0:68f5a3af8dc2 137 #define TM1651_SW2_BIT 0x6F
wim 0:68f5a3af8dc2 138 #define TM1651_SW3_BIT 0xAF
wim 0:68f5a3af8dc2 139 #define TM1651_SW4_BIT 0x2F
wim 0:68f5a3af8dc2 140 #define TM1651_SW5_BIT 0xCF
wim 0:68f5a3af8dc2 141 #define TM1651_SW6_BIT 0x4F
wim 0:68f5a3af8dc2 142 #define TM1651_SW7_BIT 0x8F
wim 0:68f5a3af8dc2 143
wim 0:68f5a3af8dc2 144 #define TM1651_SW_NONE 0xFF
wim 0:68f5a3af8dc2 145
wim 0:68f5a3af8dc2 146
wim 0:68f5a3af8dc2 147 //Segments
wim 0:68f5a3af8dc2 148 #define S7_S1 (1 << 0)
wim 0:68f5a3af8dc2 149 #define S7_S2 (1 << 1)
wim 0:68f5a3af8dc2 150 #define S7_S3 (1 << 2)
wim 0:68f5a3af8dc2 151 #define S7_S4 (1 << 3)
wim 0:68f5a3af8dc2 152 #define S7_S5 (1 << 4)
wim 0:68f5a3af8dc2 153 #define S7_S6 (1 << 5)
wim 0:68f5a3af8dc2 154 #define S7_S7 (1 << 6)
wim 0:68f5a3af8dc2 155
wim 0:68f5a3af8dc2 156
wim 0:68f5a3af8dc2 157 /** A class for driving TM1651 LED controller
wim 0:68f5a3af8dc2 158 *
wim 0:68f5a3af8dc2 159 * @brief Supports 4 Grids @ 7 Segments and 7 Keys.
wim 0:68f5a3af8dc2 160 * Serial bus interface device.
wim 0:68f5a3af8dc2 161 */
wim 0:68f5a3af8dc2 162 class TM1651 {
wim 0:68f5a3af8dc2 163 public:
wim 0:68f5a3af8dc2 164
wim 0:68f5a3af8dc2 165 /** Datatype for displaydata */
wim 0:68f5a3af8dc2 166 typedef char DisplayData_t[TM1651_DISPLAY_MEM];
wim 0:68f5a3af8dc2 167
wim 0:68f5a3af8dc2 168 /** Datatypes for keymatrix data */
wim 0:68f5a3af8dc2 169 typedef char KeyData_t;
wim 0:68f5a3af8dc2 170
wim 0:68f5a3af8dc2 171
wim 0:68f5a3af8dc2 172 /** Constructor for class for driving TM1651 LED controller
wim 0:68f5a3af8dc2 173 *
wim 0:68f5a3af8dc2 174 * @brief Supports 4 Grids @ 7 segments and 7 Keys.
wim 0:68f5a3af8dc2 175 * Serial bus interface device.
wim 0:68f5a3af8dc2 176 *
wim 0:68f5a3af8dc2 177 * @param PinName dio Serial bus DIO pin
wim 0:68f5a3af8dc2 178 * @param PinName sck Serial bus CLK pin
wim 0:68f5a3af8dc2 179 */
wim 0:68f5a3af8dc2 180 TM1651(PinName dio, PinName clk);
wim 0:68f5a3af8dc2 181
wim 0:68f5a3af8dc2 182
wim 0:68f5a3af8dc2 183 /** Clear the screen and locate to 0
wim 0:68f5a3af8dc2 184 */
wim 0:68f5a3af8dc2 185 void cls();
wim 0:68f5a3af8dc2 186
wim 0:68f5a3af8dc2 187 /** Write databyte to TM1651
wim 0:68f5a3af8dc2 188 * @param char data byte written at given address
wim 0:68f5a3af8dc2 189 * @param int address display memory location to write byte
wim 0:68f5a3af8dc2 190 * @return none
wim 0:68f5a3af8dc2 191 */
wim 0:68f5a3af8dc2 192 void writeData(char data, int address);
wim 0:68f5a3af8dc2 193
wim 0:68f5a3af8dc2 194 /** Write Display datablock to TM1651
wim 0:68f5a3af8dc2 195 * @param DisplayData_t data Array of TM1651_DISPLAY_MEM (=4) bytes for displaydata
wim 0:68f5a3af8dc2 196 * @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 197 * @param int address display memory location to write bytes (default = 0)
wim 0:68f5a3af8dc2 198 * @return none
wim 0:68f5a3af8dc2 199 */
wim 0:68f5a3af8dc2 200 void writeData(DisplayData_t data, int length = (TM1651_MAX_NR_GRIDS * TM1651_BYTES_PER_GRID), int address = 0);
wim 0:68f5a3af8dc2 201
wim 0:68f5a3af8dc2 202 /** Read keydata block from TM1651
wim 0:68f5a3af8dc2 203 * @param *keydata Ptr to bytes for keydata
wim 0:68f5a3af8dc2 204 * @return bool keypress True when at least one key was pressed
wim 0:68f5a3af8dc2 205 *
wim 0:68f5a3af8dc2 206 */
wim 0:68f5a3af8dc2 207 bool getKeys(KeyData_t *keydata);
wim 0:68f5a3af8dc2 208
wim 0:68f5a3af8dc2 209 /** Set Brightness
wim 0:68f5a3af8dc2 210 *
wim 0:68f5a3af8dc2 211 * @param char brightness (3 significant bits, valid range 0..7 (1/16 .. 14/16 dutycycle)
wim 0:68f5a3af8dc2 212 * @return none
wim 0:68f5a3af8dc2 213 */
wim 0:68f5a3af8dc2 214 void setBrightness(char brightness = TM1651_BRT_DEF);
wim 0:68f5a3af8dc2 215
wim 0:68f5a3af8dc2 216 /** Set the Display mode On/off
wim 0:68f5a3af8dc2 217 *
wim 0:68f5a3af8dc2 218 * @param bool display mode
wim 0:68f5a3af8dc2 219 */
wim 0:68f5a3af8dc2 220 void setDisplay(bool on);
wim 0:68f5a3af8dc2 221
wim 0:68f5a3af8dc2 222 private:
wim 0:68f5a3af8dc2 223 DigitalInOut _dio;
wim 0:68f5a3af8dc2 224 DigitalOut _clk;
wim 0:68f5a3af8dc2 225
wim 0:68f5a3af8dc2 226 char _display;
wim 0:68f5a3af8dc2 227 char _bright;
wim 0:68f5a3af8dc2 228
wim 0:68f5a3af8dc2 229 /** Init the Serial interface and the controller
wim 0:68f5a3af8dc2 230 * @param none
wim 0:68f5a3af8dc2 231 * @return none
wim 0:68f5a3af8dc2 232 */
wim 0:68f5a3af8dc2 233 void _init();
wim 0:68f5a3af8dc2 234
wim 0:68f5a3af8dc2 235
wim 0:68f5a3af8dc2 236 /** Generate Start condition for TM1651
wim 0:68f5a3af8dc2 237 * @param none
wim 0:68f5a3af8dc2 238 * @return none
wim 0:68f5a3af8dc2 239 */
wim 0:68f5a3af8dc2 240 void _start();
wim 0:68f5a3af8dc2 241
wim 0:68f5a3af8dc2 242 /** Generate Stop condition for TM1651
wim 0:68f5a3af8dc2 243 * @param none
wim 0:68f5a3af8dc2 244 * @return none
wim 0:68f5a3af8dc2 245 */
wim 0:68f5a3af8dc2 246 void _stop();
wim 0:68f5a3af8dc2 247
wim 0:68f5a3af8dc2 248 /** Send byte to TM1651
wim 0:68f5a3af8dc2 249 * @param int data
wim 0:68f5a3af8dc2 250 * @return none
wim 0:68f5a3af8dc2 251 */
wim 0:68f5a3af8dc2 252 void _write(int data);
wim 0:68f5a3af8dc2 253
wim 0:68f5a3af8dc2 254 /** Read byte from TM1651
wim 0:68f5a3af8dc2 255 * @return read byte
wim 0:68f5a3af8dc2 256 */
wim 0:68f5a3af8dc2 257 char _read();
wim 0:68f5a3af8dc2 258
wim 0:68f5a3af8dc2 259 /** Write command and parameter to TM1651
wim 0:68f5a3af8dc2 260 * @param int cmd Command byte
wim 0:68f5a3af8dc2 261 * &Param int data Parameters for command
wim 0:68f5a3af8dc2 262 * @return none
wim 0:68f5a3af8dc2 263 */
wim 0:68f5a3af8dc2 264 void _writeCmd(int cmd, int data);
wim 0:68f5a3af8dc2 265 };
wim 0:68f5a3af8dc2 266
wim 0:68f5a3af8dc2 267 #if (OPENSMART_TEST == 1)
wim 0:68f5a3af8dc2 268 // Derived class for TM1651 used in OPEN-SMART battery display unit with 10 Segments
wim 0:68f5a3af8dc2 269 //
wim 0:68f5a3af8dc2 270
wim 0:68f5a3af8dc2 271 #define OPENSMART_NR_GRIDS 4
wim 0:68f5a3af8dc2 272 #define OPENSMART_NR_DIGITS 4
wim 0:68f5a3af8dc2 273 #define OPENSMART_NR_UDC 0
wim 0:68f5a3af8dc2 274
wim 0:68f5a3af8dc2 275 //Battery level Icons mapping onto Segments
wim 0:68f5a3af8dc2 276 #define R12 S7_S1
wim 0:68f5a3af8dc2 277 #define Y3 S7_S2
wim 0:68f5a3af8dc2 278 #define Y4 S7_S3
wim 0:68f5a3af8dc2 279 #define Y5 S7_S4
wim 0:68f5a3af8dc2 280 #define G67 S7_S5
wim 0:68f5a3af8dc2 281 #define G89 S7_S6
wim 0:68f5a3af8dc2 282 #define B10 S7_S7
wim 0:68f5a3af8dc2 283
wim 0:68f5a3af8dc2 284
wim 0:68f5a3af8dc2 285 /** Constructor for class for driving TM1651 controller as used in OPENSMART
wim 0:68f5a3af8dc2 286 *
wim 0:68f5a3af8dc2 287 * @brief Supports battery display unit with 10 Segments.
wim 0:68f5a3af8dc2 288 *
wim 0:68f5a3af8dc2 289 * @param PinName dio Serial bus DIO pin
wim 0:68f5a3af8dc2 290 * @param PinName clk Serial bus CLK pin
wim 0:68f5a3af8dc2 291 */
wim 0:68f5a3af8dc2 292 class TM1651_OPENSMART : public TM1651 {
wim 0:68f5a3af8dc2 293 public:
wim 0:68f5a3af8dc2 294
wim 0:68f5a3af8dc2 295 /** Enums for Icons */
wim 0:68f5a3af8dc2 296 // Grid encoded in 8 MSBs, Pattern encoded in 16 LSBs
wim 0:68f5a3af8dc2 297 enum Icon {
wim 0:68f5a3af8dc2 298 LD12 = ( 1<<24) | R12, /**< LED1 (Red) & LED2 (Red)*/
wim 0:68f5a3af8dc2 299 LD3 = ( 1<<24) | Y3, /**< LED3 (Yellow)*/
wim 0:68f5a3af8dc2 300 LD4 = ( 1<<24) | Y4, /**< LED4 (Yellow)*/
wim 0:68f5a3af8dc2 301 LD5 = ( 1<<24) | Y5, /**< LED5 (Yellow)*/
wim 0:68f5a3af8dc2 302 LD67 = ( 1<<24) | G67, /**< LED6 (Green) & LED7 (Green)*/
wim 0:68f5a3af8dc2 303 LD89 = ( 1<<24) | G89, /**< LED8 (Green) & LED9 (Green)*/
wim 0:68f5a3af8dc2 304 LD10 = ( 1<<24) | B10, /**< LED10 (Blue) */
wim 0:68f5a3af8dc2 305 };
wim 0:68f5a3af8dc2 306
wim 0:68f5a3af8dc2 307 /** Enums for Batterylevels */
wim 0:68f5a3af8dc2 308 enum Level {
wim 0:68f5a3af8dc2 309 LVL_0, /**< Level 0 = R12 */
wim 0:68f5a3af8dc2 310 LVL_1, /**< Level 1 = R12 - Y3 */
wim 0:68f5a3af8dc2 311 LVL_2, /**< Level 2 = R12 - Y4 */
wim 0:68f5a3af8dc2 312 LVL_3, /**< Level 3 = R12 - Y5 */
wim 0:68f5a3af8dc2 313 LVL_4, /**< Level 4 = R12 - G67 */
wim 0:68f5a3af8dc2 314 LVL_5, /**< Level 5 = R12 - G89 */
wim 0:68f5a3af8dc2 315 LVL_6 /**< Level 6 = R12 - B10 */
wim 0:68f5a3af8dc2 316
wim 0:68f5a3af8dc2 317 #if(0)
wim 0:68f5a3af8dc2 318 LVL_0 = ( 1<<24) | R12, /**< Level 0 */
wim 0:68f5a3af8dc2 319 LVL_1 = ( 1<<24) | R12 | Y3, /**< Level 1 */
wim 0:68f5a3af8dc2 320 LVL_2 = ( 1<<24) | R12 | Y3 | Y4, /**< Level 2 */
wim 0:68f5a3af8dc2 321 LVL_3 = ( 1<<24) | R12 | Y3 | Y4 | Y5, /**< Level 3 */
wim 0:68f5a3af8dc2 322 LVL_4 = ( 1<<24) | R12 | Y3 | Y4 | Y5 | G67, /**< Level 4 */
wim 0:68f5a3af8dc2 323 LVL_5 = ( 1<<24) | R12 | Y3 | Y4 | Y5 | G67 | G89, /**< Level 5 */
wim 0:68f5a3af8dc2 324 LVL_6 = ( 1<<24) | R12 | Y3 | Y4 | Y5 | G67 | G89 | B10, /**< Level 6 */
wim 0:68f5a3af8dc2 325 #endif
wim 0:68f5a3af8dc2 326 };
wim 0:68f5a3af8dc2 327
wim 0:68f5a3af8dc2 328
wim 0:68f5a3af8dc2 329 /** Constructor for class for driving TM1651 LED controller
wim 0:68f5a3af8dc2 330 *
wim 0:68f5a3af8dc2 331 * @brief Supports battery display unit with 10 Segments.
wim 0:68f5a3af8dc2 332 * Serial bus interface device.
wim 0:68f5a3af8dc2 333 *
wim 0:68f5a3af8dc2 334 * @param PinName dio Serial bus DIO pin
wim 0:68f5a3af8dc2 335 * @param PinName sck Serial bus CLK pin
wim 0:68f5a3af8dc2 336 */
wim 0:68f5a3af8dc2 337 TM1651_OPENSMART(PinName dio, PinName clk);
wim 0:68f5a3af8dc2 338
wim 0:68f5a3af8dc2 339 /** Clear the screen and locate to 0
wim 0:68f5a3af8dc2 340 * @param none
wim 0:68f5a3af8dc2 341 * @return none
wim 0:68f5a3af8dc2 342 */
wim 0:68f5a3af8dc2 343 void cls();
wim 0:68f5a3af8dc2 344
wim 0:68f5a3af8dc2 345 /** Set Icon
wim 0:68f5a3af8dc2 346 *
wim 0:68f5a3af8dc2 347 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Pattern encoded in 16 LSBs
wim 0:68f5a3af8dc2 348 * @return none
wim 0:68f5a3af8dc2 349 */
wim 0:68f5a3af8dc2 350 void setIcon(Icon icon);
wim 0:68f5a3af8dc2 351
wim 0:68f5a3af8dc2 352 /** Clr Icon
wim 0:68f5a3af8dc2 353 *
wim 0:68f5a3af8dc2 354 * @param Icon icon Enums Icon has Grid position encoded in 8 MSBs, Pattern encoded in 16 LSBs
wim 0:68f5a3af8dc2 355 * @return none
wim 0:68f5a3af8dc2 356 */
wim 0:68f5a3af8dc2 357 void clrIcon(Icon icon);
wim 0:68f5a3af8dc2 358
wim 0:68f5a3af8dc2 359 /** Set Level
wim 0:68f5a3af8dc2 360 *
wim 0:68f5a3af8dc2 361 * @param Level level Enums Level indicates the Battery level to be displayed
wim 0:68f5a3af8dc2 362 * @return none
wim 0:68f5a3af8dc2 363 */
wim 0:68f5a3af8dc2 364 void setLevel(Level level);
wim 0:68f5a3af8dc2 365
wim 0:68f5a3af8dc2 366
wim 0:68f5a3af8dc2 367 /** Write databyte to TM1651
wim 0:68f5a3af8dc2 368 * @param char data byte written at given address
wim 0:68f5a3af8dc2 369 * @param int address display memory location to write byte
wim 0:68f5a3af8dc2 370 * @return none
wim 0:68f5a3af8dc2 371 */
wim 0:68f5a3af8dc2 372 void writeData(char data, int address){
wim 0:68f5a3af8dc2 373 TM1651::writeData(data, address);
wim 0:68f5a3af8dc2 374 }
wim 0:68f5a3af8dc2 375
wim 0:68f5a3af8dc2 376 /** Write Display datablock to TM1651
wim 0:68f5a3af8dc2 377 * @param DisplayData_t data Array of TM1651_DISPLAY_MEM (=4) bytes for displaydata
wim 0:68f5a3af8dc2 378 * @param length number bytes to write (valid range 0..(OPENSMART_NR_GRIDS * TM1651_BYTES_PER_GRID) (=4), when starting at address 0)
wim 0:68f5a3af8dc2 379 * @param int address display memory location to write bytes (default = 0)
wim 0:68f5a3af8dc2 380 * @return none
wim 0:68f5a3af8dc2 381 */
wim 0:68f5a3af8dc2 382 void writeData(DisplayData_t data, int length = (OPENSMART_NR_GRIDS * TM1651_BYTES_PER_GRID), int address = 0) {
wim 0:68f5a3af8dc2 383 TM1651::writeData(data, length, address);
wim 0:68f5a3af8dc2 384 }
wim 0:68f5a3af8dc2 385
wim 0:68f5a3af8dc2 386 protected:
wim 0:68f5a3af8dc2 387
wim 0:68f5a3af8dc2 388 private:
wim 0:68f5a3af8dc2 389 DisplayData_t _displaybuffer;
wim 0:68f5a3af8dc2 390
wim 0:68f5a3af8dc2 391 };
wim 0:68f5a3af8dc2 392 #endif
wim 0:68f5a3af8dc2 393
wim 0:68f5a3af8dc2 394 #endif