Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 30 additions & 2 deletions examples/TM1650_example01/TM1650_example01.ino
Original file line number Diff line number Diff line change
Expand Up @@ -77,9 +77,37 @@ void loop()
}
}


d.displayString(" A");
d.setPosition(0, SEG_A);
delay(1000);
d.displayString(" B");
d.setPosition(0, SEG_B);
delay(1000);
d.displayString(" C");
d.setPosition(0, SEG_C);
delay(1000);
d.displayString(" D");
d.setPosition(0, SEG_D);
delay(1000);
d.displayString(" E");
d.setPosition(0, SEG_E);
delay(1000);
d.displayString(" F");
d.setPosition(0, SEG_F);
delay(1000);
d.displayString(" G");
d.setPosition(0, SEG_G);
delay(1000);
d.displayString(" DP");
d.setPosition(0, SEG_DP);
delay(1000);

if (d.displayRunning("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz")) {
while (d.displayRunningShift()) delay(500);
}
delay(2000);
}




1 change: 1 addition & 0 deletions keywords.txt
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ setPosition KEYWORD2
setDot KEYWORD2
getPosition KEYWORD2
getNumPositions KEYWORD2
displayChar KEYWORD2

#######################################
# Constants (LITERAL1)
Expand Down
57 changes: 57 additions & 0 deletions src/TM1650.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@

//#define TM1650_USE_PROGMEM

#define REPLACE_NON_EXISTING_CHARACTERS

#ifdef TM1650_USE_PROGMEM
#if (defined(__AVR__))
#include <avr\pgmspace.h>
Expand All @@ -49,6 +51,22 @@
#define TM1650_MIN_BRIGHT 0
#define TM1650_MAX_BRIGHT 7

#define SEG_A 0b00000001
#define SEG_B 0b00000010
#define SEG_C 0b00000100
#define SEG_D 0b00001000
#define SEG_E 0b00010000
#define SEG_F 0b00100000
#define SEG_G 0b01000000
#define SEG_DP 0b10000000
// A
// ---
// F | | B
// -G-
// E | | C
// ---
// D . DP

#ifndef TM1650_USE_PROGMEM
const byte TM1650_CDigits[128] {
#else
Expand Down Expand Up @@ -80,6 +98,7 @@ class TM1650 {
void setBrightness(unsigned int aValue = TM1650_MAX_BRIGHT);
void setBrightnessGradually(unsigned int aValue = TM1650_MAX_BRIGHT);
inline unsigned int getBrightness() { return iBrightness; };
void displayChar(char aString, int pos);

void controlPosition(unsigned int aPos, byte aValue);
void setPosition(unsigned int aPos, byte aValue);
Expand Down Expand Up @@ -263,6 +282,16 @@ void TM1650::displayString(char *aString)
iBuffer[i] = TM1650_CDigits[a];
#else
iBuffer[i] = pgm_read_byte_near(TM1650_CDigits + a);
#endif
#ifdef REPLACE_NON_EXISTING_CHARACTERS
if(a=='m'||a=='M'){
setPosition(i,SEG_E|SEG_F|SEG_A|SEG_B|SEG_C);
} else if(a=='k'||a=='K'){
setPosition(i,SEG_E|SEG_F|SEG_G);
} else if(a=='i') {
setPosition(i,SEG_C);
}
else
#endif
if (a) {
Wire.beginTransmission(TM1650_DISPLAY_BASE+i);
Expand All @@ -275,6 +304,34 @@ void TM1650::displayString(char *aString)
}
}

/** Display a single character on the display
* aString = character array to be displayed
* i = digit position
*
* Internal buffer is updated as well
* Only first N positions of the string are displayed if
* the string is longer than the number of digits
@new
*/
void TM1650::displayChar(char aString, int i)
{
if (!iActive) return;
if(i<iNumDigits){
byte a = ((byte) aString) & 0b01111111;
byte dot = ((byte) aString) & 0b10000000;
#ifndef TM1650_USE_PROGMEM
iBuffer[i] = TM1650_CDigits[a];
#else
iBuffer[i] = pgm_read_byte_near(TM1650_CDigits + a);
#endif
if (a) {
Wire.beginTransmission(TM1650_DISPLAY_BASE+i);
Wire.write(iBuffer[i] | dot);
Wire.endTransmission();
}
}
}

/** Display string on the display in a running fashion
* aString = character array to be displayed
*
Expand Down