diff --git a/README.txt b/README.txt index 15ac4ba..1a3165e 100644 --- a/README.txt +++ b/README.txt @@ -10,7 +10,8 @@ Includes: - Helper methods for displaying numbers in decimal, hexadecimal and binary; - Support for multiple chained tm1638; - Reading simultaneous button presses; -- Support for dimming the display and LEDs. +- Support for dimming the display and LEDs; +- Support for writing text. See: TM1638 Display/LED module at http://www.dealextreme.com/p/81873?r=68099021 diff --git a/TM1638.cpp b/TM1638.cpp index 04ede46..cc17237 100644 --- a/TM1638.cpp +++ b/TM1638.cpp @@ -21,46 +21,6 @@ along with this program. If not, see . #include "WProgram.h" #include "TM1638.h" -/* -The bits are displayed by mapping bellow - -- 0 -- -| | -5 1 - -- 6 -- -4 2 -| | - -- 3 -- .7 -*/ -const byte NUMBER_DATA[] = { - 0b00111111, // 0 - 0b00000110, // 1 - 0b01011011, // 2 - 0b01001111, // 3 - 0b01100110, // 4 - 0b01101101, // 5 - 0b01111101, // 6 - 0b00000111, // 7 - 0b01111111, // 8 - 0b01101111, // 9 - 0b01110111, // A - 0b01111100, // B - 0b00111001, // C - 0b01011110, // D - 0b01111001, // E - 0b01110001 // F -}; - -const byte ERROR[] = { - 0b01111001, // E - 0b01010000, // r - 0b01010000, // r - 0b01011100, // o - 0b01010000, // r - 0, - 0, - 0 -}; - TM1638::TM1638(byte dataPin, byte clockPin, byte strobePin, boolean activateDisplay, byte intensity) { this->dataPin = dataPin; @@ -134,6 +94,20 @@ void TM1638::setDisplay(const byte values[]) } } +void TM1638::clearDisplay() +{ + for (int i = 0; i < 8; i++) { + sendData(i << 1, 0); + } +} + +void TM1638::setDisplayToString(const char* string, const byte font[]) +{ + for (int i = 0; i < 8; i++) { + sendData(i << 1, font[string[i] - 32]); + } +} + void TM1638::setLED(byte color, byte pos) { sendData((pos << 1) + 1, color); diff --git a/TM1638.h b/TM1638.h index cfb0646..a187cc4 100644 --- a/TM1638.h +++ b/TM1638.h @@ -22,6 +22,7 @@ along with this program. If not, see . #define TM1638_h #include +#include "TM1638Fonts.h" #define TM1638_COLOR_RED 1 #define TM1638_COLOR_GREEN 2 @@ -45,6 +46,10 @@ class TM1638 void setDisplayDigit(byte digit, byte pos, boolean dot); /** Set the display to the 8 values (left to right) */ void setDisplay(const byte values[]); + /** Clear the display */ + void clearDisplay(); + /** Set the display to the string (defaults to built in font) */ + void setDisplayToString(const char* string, const byte font[] = FONT_DEFAULT); /** Set the LED at pos to color (TM1638_COLOR_RED, TM1638_COLOR_GREEN or both) */ void setLED(byte color, byte pos); diff --git a/TM1638Fonts.h b/TM1638Fonts.h new file mode 100644 index 0000000..d79edda --- /dev/null +++ b/TM1638Fonts.h @@ -0,0 +1,166 @@ +/* +TM1638.h - Library for TM1638. + +Copyright (C) 2011 Ricardo Batista (rjbatista gmail com) + +Based on a sketch by: Martin Hubacek (http://www.martinhubacek.cz) + +This program is free software: you can redistribute it and/or modify +it under the terms of the version 3 GNU General Public License as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +The bits are displayed by mapping bellow + -- 0 -- +| | +5 1 + -- 6 -- +4 2 +| | + -- 3 -- .7 + +*/ + +#ifndef TM1638Fonts_h +#define TM1638Fonts_h + +// definition for standard hexadecimal numbers +const byte NUMBER_DATA[] = { + 0b00111111, // 0 + 0b00000110, // 1 + 0b01011011, // 2 + 0b01001111, // 3 + 0b01100110, // 4 + 0b01101101, // 5 + 0b01111101, // 6 + 0b00000111, // 7 + 0b01111111, // 8 + 0b01101111, // 9 + 0b01110111, // A + 0b01111100, // B + 0b00111001, // C + 0b01011110, // D + 0b01111001, // E + 0b01110001 // F +}; + +// definition for error +const byte ERROR[] = { + 0b01111001, // E + 0b01010000, // r + 0b01010000, // r + 0b01011100, // o + 0b01010000, // r + 0, + 0, + 0 +}; + +// definition for the displayable ASCII chars +const byte FONT_DEFAULT[] = { + 0b00000000, // (32) + 0b10000110, // (33) ! + 0b00100010, // (34) " + 0b01111110, // (35) # + 0b01101101, // (36) $ + 0b00000000, // (37) % + 0b00000000, // (38) & + 0b00000010, // (39) ' + 0b00110000, // (40) ( + 0b00000110, // (41) ) + 0b00000000, // (42) * + 0b00000000, // (43) + + 0b00000100, // (44) , + 0b01000000, // (45) - + 0b10000000, // (46) . + 0b01010010, // (47) / + 0b00111111, // (48) 0 + 0b00000110, // (49) 1 + 0b01011011, // (50) 2 + 0b01001111, // (51) 3 + 0b01100110, // (52) 4 + 0b01101101, // (53) 5 + 0b01111101, // (54) 6 + 0b00100111, // (55) 7 + 0b01111111, // (56) 8 + 0b01101111, // (57) 9 + 0b00000000, // (58) : + 0b00000000, // (59) ; + 0b00000000, // (60) < + 0b01001000, // (61) = + 0b00000000, // (62) > + 0b01010011, // (63) ? + 0b01011111, // (64) @ + 0b01110111, // (65) A + 0b01111111, // (66) B + 0b00111001, // (67) C + 0b00111111, // (68) D + 0b01111001, // (69) E + 0b01110001, // (70) F + 0b00111101, // (71) G + 0b01110110, // (72) H + 0b00000110, // (73) I + 0b00011111, // (74) J + 0b01101001, // (75) K + 0b00111000, // (76) L + 0b00010101, // (77) M + 0b00110111, // (78) N + 0b00111111, // (79) O + 0b01110011, // (80) P + 0b01100111, // (81) Q + 0b00110001, // (82) R + 0b01101101, // (83) S + 0b01111000, // (84) T + 0b00111110, // (85) U + 0b00101010, // (86) V + 0b00011101, // (87) W + 0b01110110, // (88) X + 0b01101110, // (89) Y + 0b01011011, // (90) Z + 0b00111001, // (91) [ + 0b01100100, // (92) \ (this can't be the last char on a line, even in comment or it'll concat) + 0b00001111, // (93) ] + 0b00000000, // (94) ^ + 0b00001000, // (95) _ + 0b00100000, // (96) ` + 0b01011111, // (97) a + 0b01111100, // (98) b + 0b01011000, // (99) c + 0b01011110, // (100) d + 0b01111011, // (101) e + 0b00110001, // (102) f + 0b01101111, // (103) g + 0b01110100, // (104) h + 0b00000100, // (105) i + 0b00001110, // (106) j + 0b01110101, // (107) k + 0b00110000, // (108) l + 0b01010101, // (109) m + 0b01010100, // (110) n + 0b01011100, // (111) o + 0b01110011, // (112) p + 0b01100111, // (113) q + 0b01010000, // (114) r + 0b01101101, // (115) s + 0b01111000, // (116) t + 0b00011100, // (117) u + 0b00101010, // (118) v + 0b00011101, // (119) w + 0b01110110, // (120) x + 0b01101110, // (121) y + 0b01000111, // (122) z + 0b01000110, // (123) { + 0b00000110, // (124) | + 0b01110000, // (125) } + 0b00000001, // (126) ~ +}; + +#endif diff --git a/examples/tm1638_scrolling_modules_example/tm1638_scrolling_modules_example.pde b/examples/tm1638_scrolling_modules_example/tm1638_scrolling_modules_example.pde new file mode 100644 index 0000000..33e1d91 --- /dev/null +++ b/examples/tm1638_scrolling_modules_example/tm1638_scrolling_modules_example.pde @@ -0,0 +1,56 @@ +/* +TM1638.h - Library for TM1638. + +Copyright (C) 2011 Ricardo Batista + +This program is free software: you can redistribute it and/or modify +it under the terms of the version 3 GNU General Public License as +published by the Free Software Foundation. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +*/ + +#include + +#define MODULES 4 + +// define a modules +TM1638 modules[] = { + TM1638(3, 2, 4), + TM1638(3, 2, 5), + TM1638(3, 2, 6), + TM1638(3, 2, 7) +}; + +void setup() { +} + +const char string[] = " SEE LIBRARY PROJECT AT CODE.GOOGLE.COM "; +int base = 0; + +void loop() { + for (int i = 0; i < MODULES; i++) { + const char* pos = string + base + (i * 8); + + if (pos >= string && pos + 8 < string + sizeof(string)) { + modules[i].setDisplayToString(pos); + } else { + modules[i].clearDisplay(); + } + } + + base++; + + if (base == sizeof(string) - 8) { + base = -MODULES * 8; + } + + delay(100); +} + diff --git a/keywords.txt b/keywords.txt index 71b2181..620dcb9 100644 --- a/keywords.txt +++ b/keywords.txt @@ -18,6 +18,8 @@ setDisplayToDecNumber KEYWORD2 setDisplayToBinNumber KEYWORD2 setDisplayDigit KEYWORD2 setDisplay KEYWORD2 +clearDisplay KEYWORD2 +setDisplayToString KEYWORD2 setLED KEYWORD2 setLEDs KEYWORD2 getButtons KEYWORD2