1 Commits

Author SHA1 Message Date
rjbatista@gmail.com
d8e29fd5d4 Version 1.1.0 2011-08-10 00:24:26 +00:00
9 changed files with 55 additions and 313 deletions

View File

@@ -1,24 +0,0 @@
Version 1.3.2
- ISSUE #5: Correction of string library import
Version 1.3.1
- changed pins on the examples to match schematics on project site.
Version 1.3.0
- added support for String Object;
- added support for removing leading zeros in displaying numbers.
Version 1.2.0
- added support for writing text.
Version 1.1.0
- restructuring and added 2 proper examples, available in the arduino ide.
Version 1.0.0
- initial release.

View File

@@ -10,8 +10,7 @@ Includes:
- Helper methods for displaying numbers in decimal, hexadecimal and binary; - Helper methods for displaying numbers in decimal, hexadecimal and binary;
- Support for multiple chained tm1638; - Support for multiple chained tm1638;
- Reading simultaneous button presses; - 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 See: TM1638 Display/LED module at http://www.dealextreme.com/p/81873?r=68099021

View File

@@ -20,7 +20,46 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "WProgram.h" #include "WProgram.h"
#include "TM1638.h" #include "TM1638.h"
#include "string.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) TM1638::TM1638(byte dataPin, byte clockPin, byte strobePin, boolean activateDisplay, byte intensity)
{ {
@@ -52,19 +91,15 @@ void TM1638::setupDisplay(boolean active, byte intensity)
} }
void TM1638::setDisplayToHexNumber(unsigned long number, byte dots, boolean leadingZeros) void TM1638::setDisplayToHexNumber(unsigned long number, byte dots)
{ {
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
if (!leadingZeros && number == 0) { setDisplayDigit(number & 0xF, 7 - i, (dots & (1 << i)) != 0);
clearDisplayDigit(7 - i, (dots & (1 << i)) != 0); number >>= 4;
} else {
setDisplayDigit(number & 0xF, 7 - i, (dots & (1 << i)) != 0);
number >>= 4;
}
} }
} }
void TM1638::setDisplayToDecNumber(unsigned long number, byte dots, boolean leadingZeros) void TM1638::setDisplayToDecNumber(unsigned long number, byte dots)
{ {
if (number > 99999999L) { if (number > 99999999L) {
setDisplay(ERROR); setDisplay(ERROR);
@@ -74,11 +109,7 @@ void TM1638::setDisplayToDecNumber(unsigned long number, byte dots, boolean lead
setDisplayDigit(number % 10, 7 - i, (dots & (1 << i)) != 0); setDisplayDigit(number % 10, 7 - i, (dots & (1 << i)) != 0);
number /= 10; number /= 10;
} else { } else {
if (leadingZeros) { setDisplayDigit(0, 7 - i, (dots & (1 << i)) != 0);
setDisplayDigit(0, 7 - i, (dots & (1 << i)) != 0);
} else {
clearDisplayDigit(7 - i, (dots & (1 << i)) != 0);
}
} }
} }
} }
@@ -96,11 +127,6 @@ void TM1638::setDisplayDigit(byte digit, byte pos, boolean dot)
sendData(pos << 1, NUMBER_DATA[digit & 0xF] | (dot ? 0b10000000 : 0)); sendData(pos << 1, NUMBER_DATA[digit & 0xF] | (dot ? 0b10000000 : 0));
} }
void TM1638::clearDisplayDigit(byte pos, boolean dot)
{
sendData(pos << 1, (dot ? 0b10000000 : 0));
}
void TM1638::setDisplay(const byte values[]) void TM1638::setDisplay(const byte values[])
{ {
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
@@ -108,33 +134,6 @@ 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::setDisplayToString(const String string, const byte font[])
{
int stringLength = string.length();
for (int i = 0; i < 8; i++) {
if (i < stringLength) {
sendData(i << 1, font[string.charAt(i) - 32]);
} else {
sendData(i << 1, 0);
}
}
}
void TM1638::setLED(byte color, byte pos) void TM1638::setLED(byte color, byte pos)
{ {
sendData((pos << 1) + 1, color); sendData((pos << 1) + 1, color);

View File

@@ -22,7 +22,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define TM1638_h #define TM1638_h
#include <WProgram.h> #include <WProgram.h>
#include "TM1638Fonts.h"
#define TM1638_COLOR_RED 1 #define TM1638_COLOR_RED 1
#define TM1638_COLOR_GREEN 2 #define TM1638_COLOR_GREEN 2
@@ -36,24 +35,16 @@ class TM1638
/** Set the display (segments and LEDs) active or off and intensity (range from 0-7). */ /** Set the display (segments and LEDs) active or off and intensity (range from 0-7). */
void setupDisplay(boolean active, byte intensity); void setupDisplay(boolean active, byte intensity);
/** Set the display to a unsigned hexadecimal number (with or without leading zeros) */ /** Set the display to a unsigned hexadecimal number */
void setDisplayToHexNumber(unsigned long number, byte dots, boolean leadingZeros = true); void setDisplayToHexNumber(unsigned long number, byte dots);
/** Set the display to a unsigned decimal number (with or without leading zeros) */ /** Set the display to a unsigned decimal number */
void setDisplayToDecNumber(unsigned long number, byte dots, boolean leadingZeros = true); void setDisplayToDecNumber(unsigned long number, byte dots);
/** Set the display to a unsigned binary number */ /** Set the display to a unsigned binary number */
void setDisplayToBinNumber(byte number, byte dots); void setDisplayToBinNumber(byte number, byte dots);
/** Set a single display at pos (starting at 0) to a digit (left to right) */ /** Set a single display at pos (starting at 0) to a digit (left to right) */
void setDisplayDigit(byte digit, byte pos, boolean dot); void setDisplayDigit(byte digit, byte pos, boolean dot);
/** Clear a single display at pos (starting at 0, left to right) */
void clearDisplayDigit(byte pos, boolean dot);
/** Set the display to the 8 values (left to right) */ /** Set the display to the 8 values (left to right) */
void setDisplay(const byte values[]); 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 display to the String (defaults to built in font) */
void setDisplayToString(String string, const byte font[] = FONT_DEFAULT);
/** Set the LED at pos to color (TM1638_COLOR_RED, TM1638_COLOR_GREEN or both) */ /** Set the LED at pos to color (TM1638_COLOR_RED, TM1638_COLOR_GREEN or both) */
void setLED(byte color, byte pos); void setLED(byte color, byte pos);
@@ -76,3 +67,4 @@ class TM1638
}; };
#endif #endif

View File

@@ -1,166 +0,0 @@
/*
TM1638.h - Library for TM1638.
Copyright (C) 2011 Ricardo Batista (rjbatista <at> gmail <dot> 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 <http://www.gnu.org/licenses/>.
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) <space>
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

View File

@@ -18,8 +18,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include <TM1638.h> #include <TM1638.h>
// define a module on data pin 3, clock pin 9 and strobe pin 7 // define a module on data pin 3, clock pin 2 and strobe pin 4
TM1638 module(8, 9, 7); TM1638 module(3, 2, 4);
void setup() { void setup() {
// display a hexadecimal number and set the left 4 dots // display a hexadecimal number and set the left 4 dots

View File

@@ -1,56 +0,0 @@
/*
TM1638.h - Library for TM1638.
Copyright (C) 2011 Ricardo Batista <rjbatista at gmail dot com>
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 <http://www.gnu.org/licenses/>.
*/
#include <TM1638.h>
#define MODULES 4
// define a modules
TM1638 modules[] = {
TM1638(8, 9, 7),
TM1638(8, 9, 6),
TM1638(8, 9, 5),
TM1638(8, 9, 4)
};
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);
}

View File

@@ -24,9 +24,9 @@ const byte hello[] = {
}; };
// define the first module // define the first module
TM1638 module1(8, 9, 7); TM1638 module1(3, 2, 4);
// to chain modules, use the same clk and data - just specify a different strobe pin // to chain modules, use the same clk and data - just specify a different strobe pin
TM1638 module2(8, 9, 6); TM1638 module2(3, 2, 5);
unsigned long value = 0L; unsigned long value = 0L;
boolean state = true; boolean state = true;

View File

@@ -18,8 +18,6 @@ setDisplayToDecNumber KEYWORD2
setDisplayToBinNumber KEYWORD2 setDisplayToBinNumber KEYWORD2
setDisplayDigit KEYWORD2 setDisplayDigit KEYWORD2
setDisplay KEYWORD2 setDisplay KEYWORD2
clearDisplay KEYWORD2
setDisplayToString KEYWORD2
setLED KEYWORD2 setLED KEYWORD2
setLEDs KEYWORD2 setLEDs KEYWORD2
getButtons KEYWORD2 getButtons KEYWORD2