MAX6955 LED driver
MAX6955.cpp@2:f6c4ed9cbf0e, 2018-08-11 (annotated)
- Committer:
- Kentaro Okuda
- Date:
- Sat Aug 11 10:56:18 2018 -0400
- Revision:
- 2:f6c4ed9cbf0e
- Parent:
- 1:8936ddb97551
- Child:
- 3:fbcb79f6e0a8
refactoring
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 |
2:f6c4ed9cbf0e | 9 | static void prepareString(char* buffer, char* i2cData) { |
Kentaro Okuda |
2:f6c4ed9cbf0e | 10 | for (int i = 0; i < 8; i++) { |
Kentaro Okuda |
2:f6c4ed9cbf0e | 11 | if (buffer[i] < 32 || buffer[i] > 126) { // make sure its printable |
Kentaro Okuda |
2:f6c4ed9cbf0e | 12 | i2cData[i+1] = 32; // if not, replace it with "space" |
Kentaro Okuda |
2:f6c4ed9cbf0e | 13 | } else { |
Kentaro Okuda |
2:f6c4ed9cbf0e | 14 | i2cData[i+1] = buffer[i]; |
Kentaro Okuda |
2:f6c4ed9cbf0e | 15 | } |
Kentaro Okuda |
2:f6c4ed9cbf0e | 16 | } |
Kentaro Okuda |
2:f6c4ed9cbf0e | 17 | } |
Kentaro Okuda |
1:8936ddb97551 | 18 | |
Kentaro Okuda |
1:8936ddb97551 | 19 | int MAX6955::write(char command, char data) { |
lonesometraveler | 0:8c7de3096cac | 20 | char i2cData[2]; |
lonesometraveler | 0:8c7de3096cac | 21 | i2cData[0] = command; |
lonesometraveler | 0:8c7de3096cac | 22 | i2cData[1] = data; |
lonesometraveler | 0:8c7de3096cac | 23 | int result = i2c_.write(driver_, i2cData, 2); |
lonesometraveler | 0:8c7de3096cac | 24 | wait(0.07); |
lonesometraveler | 0:8c7de3096cac | 25 | return result; |
lonesometraveler | 0:8c7de3096cac | 26 | } |
lonesometraveler | 0:8c7de3096cac | 27 | |
Kentaro Okuda |
1:8936ddb97551 | 28 | int MAX6955::writeS(char* buffer) { |
Kentaro Okuda |
1:8936ddb97551 | 29 | char i2cData[9]; |
Kentaro Okuda |
1:8936ddb97551 | 30 | i2cData[0] = 0x20; // first digit |
Kentaro Okuda |
2:f6c4ed9cbf0e | 31 | prepareString(buffer, i2cData); |
Kentaro Okuda |
1:8936ddb97551 | 32 | int result = i2c_.write(driver_, (char *) i2cData, 9); |
lonesometraveler | 0:8c7de3096cac | 33 | wait(0.07); |
lonesometraveler | 0:8c7de3096cac | 34 | return result; |
lonesometraveler | 0:8c7de3096cac | 35 | } |
lonesometraveler | 0:8c7de3096cac | 36 | |
Kentaro Okuda |
1:8936ddb97551 | 37 | int MAX6955::init(void) { |
lonesometraveler | 0:8c7de3096cac | 38 | int result = 0; |
lonesometraveler | 0:8c7de3096cac | 39 | result = result + write(reg_decodeMode, 0x00); |
lonesometraveler | 0:8c7de3096cac | 40 | result = result + write(reg_scanLimit, 0x07); |
lonesometraveler | 0:8c7de3096cac | 41 | result = result + write(reg_configuration, 0x21); |
lonesometraveler | 0:8c7de3096cac | 42 | result = result + write(reg_globalIntensity, 0x08); |
lonesometraveler | 0:8c7de3096cac | 43 | result = result + write(reg_digitType, 0xFF); |
lonesometraveler | 0:8c7de3096cac | 44 | result = result + write(reg_displayTest, 0x00); |
lonesometraveler | 0:8c7de3096cac | 45 | return result; |
lonesometraveler | 0:8c7de3096cac | 46 | } |