MAX6955 LED driver
MAX6955.cpp@3:fbcb79f6e0a8, 2018-08-11 (annotated)
- Committer:
- Kentaro Okuda
- Date:
- Sat Aug 11 15:27:43 2018 -0400
- Revision:
- 3:fbcb79f6e0a8
- Parent:
- 2:f6c4ed9cbf0e
refactoring. extract a method to generate printable char.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Kentaro Okuda |
1:8936ddb97551 | 1 | /** |
Kentaro Okuda |
1:8936ddb97551 | 2 | * @file MAX6955.cpp |
Kentaro Okuda |
1:8936ddb97551 | 3 | */ |
Kentaro Okuda |
1:8936ddb97551 | 4 | |
lonesometraveler | 0:8c7de3096cac | 5 | #include "MAX6955.h" |
lonesometraveler | 0:8c7de3096cac | 6 | |
lonesometraveler | 0:8c7de3096cac | 7 | MAX6955::MAX6955(PinName sda, PinName scl, char driver): i2c_(sda, scl), driver_(driver){} |
lonesometraveler | 0:8c7de3096cac | 8 | |
Kentaro Okuda |
3:fbcb79f6e0a8 | 9 | static char getPrintableChar(char c) { |
Kentaro Okuda |
3:fbcb79f6e0a8 | 10 | if (c < 32 || c > 126) { // make sure its printable |
Kentaro Okuda |
3:fbcb79f6e0a8 | 11 | return 32; // if not, replace it with "space" |
Kentaro Okuda |
3:fbcb79f6e0a8 | 12 | } |
Kentaro Okuda |
3:fbcb79f6e0a8 | 13 | return c; |
Kentaro Okuda |
3:fbcb79f6e0a8 | 14 | } |
Kentaro Okuda |
3:fbcb79f6e0a8 | 15 | |
Kentaro Okuda |
3:fbcb79f6e0a8 | 16 | static char* getString(char* buffer) { |
Kentaro Okuda |
3:fbcb79f6e0a8 | 17 | static char i2cData[9]; |
Kentaro Okuda |
3:fbcb79f6e0a8 | 18 | i2cData[0] = 0x20; // first digit |
Kentaro Okuda |
2:f6c4ed9cbf0e | 19 | for (int i = 0; i < 8; i++) { |
Kentaro Okuda |
3:fbcb79f6e0a8 | 20 | i2cData[i+1] = getPrintableChar(buffer[i]); |
Kentaro Okuda |
2:f6c4ed9cbf0e | 21 | } |
Kentaro Okuda |
3:fbcb79f6e0a8 | 22 | return i2cData; |
Kentaro Okuda |
2:f6c4ed9cbf0e | 23 | } |
Kentaro Okuda |
1:8936ddb97551 | 24 | |
Kentaro Okuda |
1:8936ddb97551 | 25 | int MAX6955::write(char command, char data) { |
lonesometraveler | 0:8c7de3096cac | 26 | char i2cData[2]; |
lonesometraveler | 0:8c7de3096cac | 27 | i2cData[0] = command; |
lonesometraveler | 0:8c7de3096cac | 28 | i2cData[1] = data; |
lonesometraveler | 0:8c7de3096cac | 29 | int result = i2c_.write(driver_, i2cData, 2); |
lonesometraveler | 0:8c7de3096cac | 30 | wait(0.07); |
lonesometraveler | 0:8c7de3096cac | 31 | return result; |
lonesometraveler | 0:8c7de3096cac | 32 | } |
lonesometraveler | 0:8c7de3096cac | 33 | |
Kentaro Okuda |
1:8936ddb97551 | 34 | int MAX6955::writeS(char* buffer) { |
Kentaro Okuda |
3:fbcb79f6e0a8 | 35 | char* i2cData; |
Kentaro Okuda |
3:fbcb79f6e0a8 | 36 | i2cData = getString(buffer); |
Kentaro Okuda |
3:fbcb79f6e0a8 | 37 | int result = i2c_.write(driver_, i2cData, 9); |
lonesometraveler | 0:8c7de3096cac | 38 | wait(0.07); |
lonesometraveler | 0:8c7de3096cac | 39 | return result; |
lonesometraveler | 0:8c7de3096cac | 40 | } |
lonesometraveler | 0:8c7de3096cac | 41 | |
Kentaro Okuda |
1:8936ddb97551 | 42 | int MAX6955::init(void) { |
lonesometraveler | 0:8c7de3096cac | 43 | int result = 0; |
lonesometraveler | 0:8c7de3096cac | 44 | result = result + write(reg_decodeMode, 0x00); |
lonesometraveler | 0:8c7de3096cac | 45 | result = result + write(reg_scanLimit, 0x07); |
lonesometraveler | 0:8c7de3096cac | 46 | result = result + write(reg_configuration, 0x21); |
lonesometraveler | 0:8c7de3096cac | 47 | result = result + write(reg_globalIntensity, 0x08); |
lonesometraveler | 0:8c7de3096cac | 48 | result = result + write(reg_digitType, 0xFF); |
lonesometraveler | 0:8c7de3096cac | 49 | result = result + write(reg_displayTest, 0x00); |
lonesometraveler | 0:8c7de3096cac | 50 | return result; |
lonesometraveler | 0:8c7de3096cac | 51 | } |