mirror of
https://github.com/arendst/Tasmota.git
synced 2025-07-25 19:56:30 +00:00
parent
d84b5fdfd8
commit
b2e1258e22
@ -144,7 +144,7 @@
|
|||||||
#define SCROLL_MAX_LEN 50
|
#define SCROLL_MAX_LEN 50
|
||||||
|
|
||||||
#include "SevenSegmentTM1637.h"
|
#include "SevenSegmentTM1637.h"
|
||||||
SevenSegmentTM1637 *display;
|
SevenSegmentTM1637 *tm1637display;
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
char scroll_text[CMD_MAX_LEN];
|
char scroll_text[CMD_MAX_LEN];
|
||||||
@ -166,21 +166,20 @@ struct {
|
|||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
void TM1637Init(void) {
|
void TM1637Init(void) {
|
||||||
if (PinUsed(GPIO_TM1637CLK) && PinUsed(GPIO_TM1637DIO)) {
|
if (PinUsed(GPIO_TM1637CLK) && PinUsed(GPIO_TM1637DIO)) {
|
||||||
display = new SevenSegmentTM1637(Pin(GPIO_TM1637CLK), Pin(GPIO_TM1637DIO) );
|
tm1637display = new SevenSegmentTM1637(Pin(GPIO_TM1637CLK), Pin(GPIO_TM1637DIO));
|
||||||
if (display) {
|
if (tm1637display) {
|
||||||
Settings.display_model = XDSP_15;
|
Settings.display_model = XDSP_15;
|
||||||
|
|
||||||
TM1637Data.num_digits = Settings.display_size > 3 ? Settings.display_size : 4;
|
TM1637Data.num_digits = Settings.display_size > 3 ? Settings.display_size : 4;
|
||||||
Settings.display_size = TM1637Data.num_digits;
|
Settings.display_size = TM1637Data.num_digits;
|
||||||
display->begin(TM1637Data.num_digits, 1);
|
tm1637display->begin(TM1637Data.num_digits, 1);
|
||||||
display->setBacklight(TM1637Data.brightness * 10);
|
tm1637display->setBacklight(TM1637Data.brightness * 10);
|
||||||
TM1637ClearDisplay();
|
TM1637ClearDisplay();
|
||||||
AddLog(LOG_LEVEL_INFO, PSTR("DSP: TM1637"));
|
AddLog(LOG_LEVEL_INFO, PSTR("DSP: TM1637"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* Displays number without decimal, with/without leading zeros, specifying start-position
|
* Displays number without decimal, with/without leading zeros, specifying start-position
|
||||||
* and length, optionally skipping clearing display before displaying the number.
|
* and length, optionally skipping clearing display before displaying the number.
|
||||||
@ -229,17 +228,17 @@ bool CmndTM1637Number(bool clear) {
|
|||||||
char pad = (leadingzeros ? '0': ' ');
|
char pad = (leadingzeros ? '0': ' ');
|
||||||
uint32_t i = position;
|
uint32_t i = position;
|
||||||
uint8_t rawBytes[1];
|
uint8_t rawBytes[1];
|
||||||
rawBytes[0] = display->encode(pad);
|
rawBytes[0] = tm1637display->encode(pad);
|
||||||
for(; i<position + (length - strlen(txt)); i++) {
|
for(; i<position + (length - strlen(txt)); i++) {
|
||||||
if(i>TM1637Data.num_digits) break;
|
if(i>TM1637Data.num_digits) break;
|
||||||
display->printRaw(rawBytes, 1, i);
|
tm1637display->printRaw(rawBytes, 1, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
for(uint32_t j = 0; i< position + length; i++, j++) {
|
for(uint32_t j = 0; i< position + length; i++, j++) {
|
||||||
if(txt[j] == 0) break;
|
if(txt[j] == 0) break;
|
||||||
rawBytes[0] = display->encode(txt[j]);
|
rawBytes[0] = tm1637display->encode(txt[j]);
|
||||||
if(i>TM1637Data.num_digits) break;
|
if(i>TM1637Data.num_digits) break;
|
||||||
display->printRaw(rawBytes, 1, i);
|
tm1637display->printRaw(rawBytes, 1, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -296,14 +295,14 @@ bool CmndTM1637Float(bool clear) {
|
|||||||
uint8_t rawBytes[1];
|
uint8_t rawBytes[1];
|
||||||
for(uint32_t i=0, j=0; i<length; i++, j++) {
|
for(uint32_t i=0, j=0; i<length; i++, j++) {
|
||||||
if(txt[i] == 0) break;
|
if(txt[i] == 0) break;
|
||||||
rawBytes[0] = display->encode(txt[i]);
|
rawBytes[0] = tm1637display->encode(txt[i]);
|
||||||
if(txt[i+1] == '.') {
|
if(txt[i+1] == '.') {
|
||||||
rawBytes[0] = rawBytes[0] | 128;
|
rawBytes[0] = rawBytes[0] | 128;
|
||||||
i++;
|
i++;
|
||||||
length++;
|
length++;
|
||||||
}
|
}
|
||||||
if((j+position) > TM1637Data.num_digits) break;
|
if((j+position) > TM1637Data.num_digits) break;
|
||||||
display->printRaw(rawBytes, 1, j+position);
|
tm1637display->printRaw(rawBytes, 1, j+position);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -325,7 +324,7 @@ bool CmndTM1637Clear(void) {
|
|||||||
void TM1637ClearDisplay (void) {
|
void TM1637ClearDisplay (void) {
|
||||||
unsigned char arr[] = {0};
|
unsigned char arr[] = {0};
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("Clearing digit %d"), TM1637Data.num_digits);
|
AddLog(LOG_LEVEL_DEBUG, PSTR("Clearing digit %d"), TM1637Data.num_digits);
|
||||||
for(int i=0; i<TM1637Data.num_digits; i++) display->printRaw(arr, 1, i);
|
for(int i=0; i<TM1637Data.num_digits; i++) tm1637display->printRaw(arr, 1, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -386,8 +385,8 @@ void TM1637ScrollText(void) {
|
|||||||
if(i > (TM1637Data.num_digits-1)) break;
|
if(i > (TM1637Data.num_digits-1)) break;
|
||||||
if(TM1637Data.scroll_text[j] == 0) {clr = true;};
|
if(TM1637Data.scroll_text[j] == 0) {clr = true;};
|
||||||
char charToDisp = (clr ? ' ' : TM1637Data.scroll_text[j]);
|
char charToDisp = (clr ? ' ' : TM1637Data.scroll_text[j]);
|
||||||
rawBytes[0] = display->encode(charToDisp);
|
rawBytes[0] = tm1637display->encode(charToDisp);
|
||||||
display->printRaw(rawBytes, 1, i);
|
tm1637display->printRaw(rawBytes, 1, i);
|
||||||
}
|
}
|
||||||
TM1637Data.scroll_index++;
|
TM1637Data.scroll_index++;
|
||||||
}
|
}
|
||||||
@ -424,7 +423,7 @@ bool CmndTM1637Level(void) {
|
|||||||
uint8_t value = (((i%2) == 0) ? 54 : 48);
|
uint8_t value = (((i%2) == 0) ? 54 : 48);
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: CmndTM1637Level value %d"), value);
|
AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: CmndTM1637Level value %d"), value);
|
||||||
rawBytes[0] = value;
|
rawBytes[0] = value;
|
||||||
display->printRaw(rawBytes, 1, digit);
|
tm1637display->printRaw(rawBytes, 1, digit);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -494,7 +493,7 @@ bool CmndTM1637Raw(void) {
|
|||||||
for(uint32_t i=position; i<position+length; i++ ) {
|
for(uint32_t i=position; i<position+length; i++ ) {
|
||||||
if(i>(TM1637Data.num_digits-1)) break;
|
if(i>(TM1637Data.num_digits-1)) break;
|
||||||
rawBytes[0] = DATA[i-position];
|
rawBytes[0] = DATA[i-position];
|
||||||
display->printRaw(rawBytes, 1, i);
|
tm1637display->printRaw(rawBytes, 1, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -540,14 +539,14 @@ bool CmndTM1637Text(bool clear) {
|
|||||||
for(uint32_t j = 0; i< position + length; i++, j++) {
|
for(uint32_t j = 0; i< position + length; i++, j++) {
|
||||||
if(i > (TM1637Data.num_digits-1)) break;
|
if(i > (TM1637Data.num_digits-1)) break;
|
||||||
if(sString[j] == 0) break;
|
if(sString[j] == 0) break;
|
||||||
rawBytes[0] = display->encode(sString[j]);
|
rawBytes[0] = tm1637display->encode(sString[j]);
|
||||||
if(sString[j+1] == '.') {
|
if(sString[j+1] == '.') {
|
||||||
rawBytes[0] = rawBytes[0] | 128;
|
rawBytes[0] = rawBytes[0] | 128;
|
||||||
j++;
|
j++;
|
||||||
} else if(sString[j] == '^') {
|
} else if(sString[j] == '^') {
|
||||||
rawBytes[0] = 1 | 2 | 32 | 64;
|
rawBytes[0] = 1 | 2 | 32 | 64;
|
||||||
}
|
}
|
||||||
display->printRaw(rawBytes, 1, i);
|
tm1637display->printRaw(rawBytes, 1, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -573,7 +572,7 @@ bool CmndTM1637Brightness(void) {
|
|||||||
}
|
}
|
||||||
TM1637Data.brightness = val;
|
TM1637Data.brightness = val;
|
||||||
|
|
||||||
display->setBacklight(TM1637Data.brightness*10);
|
tm1637display->setBacklight(TM1637Data.brightness*10);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -629,9 +628,9 @@ void TM1637ShowTime() {
|
|||||||
}
|
}
|
||||||
uint8_t rawBytes[1];
|
uint8_t rawBytes[1];
|
||||||
for(uint32_t i = 0; i< 4; i++) {
|
for(uint32_t i = 0; i< 4; i++) {
|
||||||
rawBytes[0] = display->encode(tm[i]);
|
rawBytes[0] = tm1637display->encode(tm[i]);
|
||||||
if((millis() % 1000) > 500 && (i == 1)) rawBytes[0] = rawBytes[0] | 128;
|
if((millis() % 1000) > 500 && (i == 1)) rawBytes[0] = rawBytes[0] | 128;
|
||||||
display->printRaw(rawBytes, 1, i);
|
tm1637display->printRaw(rawBytes, 1, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,9 +642,9 @@ bool TM1637Cmd(uint8_t fn) {
|
|||||||
TM1637Data.num_digits = Settings.display_size;
|
TM1637Data.num_digits = Settings.display_size;
|
||||||
if(TM1637Data.prev_num_digits != TM1637Data.num_digits) { // Cleck for change of display size, and re-init the library
|
if(TM1637Data.prev_num_digits != TM1637Data.num_digits) { // Cleck for change of display size, and re-init the library
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Size changed. Re-initializing library..."));
|
AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Size changed. Re-initializing library..."));
|
||||||
display = new SevenSegmentTM1637(Pin(GPIO_SSPI_SCLK), Pin(GPIO_SSPI_MOSI) );
|
tm1637display = new SevenSegmentTM1637(Pin(GPIO_TM1637CLK), Pin(GPIO_TM1637DIO));
|
||||||
display->begin(TM1637Data.num_digits, 1);
|
tm1637display->begin(TM1637Data.num_digits, 1);
|
||||||
display->setBacklight(40);
|
tm1637display->setBacklight(40);
|
||||||
TM1637ClearDisplay();
|
TM1637ClearDisplay();
|
||||||
TM1637Data.prev_num_digits = TM1637Data.num_digits;
|
TM1637Data.prev_num_digits = TM1637Data.num_digits;
|
||||||
AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Re-initialized library"));
|
AddLog(LOG_LEVEL_DEBUG, PSTR("TM7: Re-initialized library"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user