From d105b47d44617f25bf5af27864f05afecd419bf2 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 10 Mar 2018 18:38:33 +0100 Subject: [PATCH 1/2] Update P07 Plugin added suppor for other version of TM1637 modules (4dgt+colon, 4dgt+dots,6dgt+dots) --- src/_P073_7DGT.ino | 284 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 221 insertions(+), 63 deletions(-) diff --git a/src/_P073_7DGT.ino b/src/_P073_7DGT.ino index 33f4eaafe2..e9f34c44ac 100644 --- a/src/_P073_7DGT.ino +++ b/src/_P073_7DGT.ino @@ -2,21 +2,24 @@ //################### Plugin 073 - 7-segment display plugin TM1637/MAX7219 ###################### //####################################################################################################### // -// Chip supported: -// - TM1637 -- 2 pins - 4 digits and colon in the middle (XX:XX) -// - MAX7219/21 -- 3 pins - 8 digits and dot on each digit +// Chips/displays supported: +// 0 - TM1637 -- 2 pins - 4 digits and colon in the middle (XX:XX) +// 1 - TM1637 -- 2 pins - 4 digits and dot on each digit (X.X.X.X.) +// 2 - TM1637 -- 2 pins - 6 digits and dot on each digit (X.X.X.X.X.X.) +// 3 - MAX7219/21 -- 3 pins - 8 digits and dot on each digit (X.X.X.X.) // // Plugin can be setup as: // - Manual -- display is manually updated sending commands -// "7dn," (number can be negative or positive) +// "7dn," (number can be negative or positive, even with decimal) // "7dt," (temperature can be negative or positive and containing decimals) // - Clock-Blink -- display is automatically updated with current time and blinking dot/lines // - Clock-NoBlink -- display is automatically updated with current time and steady dot/lines +// - Date -- display is automatically updated with current date // // Generic commands: // - "7don" -- turn ON the display // - "7doff" -- turn OFF the display -// - "7db,<0-15> -- set brightness to specifi value between 0 and 15 +// - "7db,<0-15> -- set brightness to specific value between 0 and 15 // #ifdef PLUGIN_BUILD_TESTING @@ -24,7 +27,7 @@ #define PLUGIN_073 #define PLUGIN_ID_073 73 #define PLUGIN_NAME_073 "Display - 7-segment display [TESTING]" -#define PLUGIN_073_DEBUG true //activate extra log info in the debug +#define PLUGIN_073_DEBUG false //activate extra log info in the debug //--------------------------------------------------- // Class used by plugin @@ -44,10 +47,13 @@ p073_7dgt *Plugin_073_7dgt; uint8_t p073_showbuffer[8]; byte p073_spidata[2]; byte p073_dotpos; +bool p073_shift; -#define TM1637_POWER_ON 0b10001000 -#define TM1637_POWER_OFF 0b10000000 -#define TM1637_BIT_DELAY 50 +#define TM1637_POWER_ON B10001000 +#define TM1637_POWER_OFF B10000000 +#define TM1637_CLOCKDELAY 40 +#define TM1637_4DIGIT 4 +#define TM1637_6DIGIT 2 // each char table is specific for each display and maps all numbers/symbols needed: // - pos 0-9 - Numbers from 0 to 9 @@ -90,8 +96,8 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) { addFormNote(string, F("TM1637: 1st=CLK-Pin, 2nd=DIO-Pin")); addFormNote(string, F("MAX7219: 1st=DIN-Pin, 2nd=CLK-Pin, 3rd=CS-Pin")); - String displtype[3] = { F("TM1637 - 4 digit"), F("MAX7219 - 8 digit")}; - addFormSelector(string, F("Display Type"), F("plugin_073_displtype"), 2, displtype, NULL, Settings.TaskDevicePluginConfig[event->TaskIndex][0]); + String displtype[5] = { F("TM1637 - 4 digit (colon)"), F("TM1637 - 4 digit (dots)"), F("TM1637 - 6 digit"), F("MAX7219 - 8 digit")}; + addFormSelector(string, F("Display Type"), F("plugin_073_displtype"), 4, displtype, NULL, Settings.TaskDevicePluginConfig[event->TaskIndex][0]); String displout[4] = { F("Manual"), F("Clock - Blink"), F("Clock - No Blink"), F("Date") }; addFormSelector(string, F("Display Output"), F("plugin_073_displout"), 4, displout, NULL, Settings.TaskDevicePluginConfig[event->TaskIndex][1]); addFormNumericBox(string, F("Brightness"), F("plugin_073_brightness"), Settings.TaskDevicePluginConfig[event->TaskIndex][2], 0, 15); @@ -115,6 +121,8 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) switch (Settings.TaskDevicePluginConfig[event->TaskIndex][0]) { case 0: // set brightness of TM1637 + case 1: + case 2: { int tm1637_bright = Settings.TaskDevicePluginConfig[event->TaskIndex][2] / 2; tm1637_SetPowerBrightness(Settings.TaskDevicePin1[event->TaskIndex], Settings.TaskDevicePin2[event->TaskIndex], tm1637_bright, true); @@ -122,7 +130,7 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) tm1637_ClearDisplay(Settings.TaskDevicePin1[event->TaskIndex], Settings.TaskDevicePin2[event->TaskIndex]); break; } - case 1: // set brightness of MAX7219 + case 3: // set brightness of MAX7219 { max7219_SetPowerBrightness(Settings.TaskDevicePin1[event->TaskIndex], Settings.TaskDevicePin2[event->TaskIndex], Settings.TaskDevicePin3[event->TaskIndex], Settings.TaskDevicePluginConfig[event->TaskIndex][2], true); if (Settings.TaskDevicePluginConfig[event->TaskIndex][1] == 0) @@ -148,13 +156,15 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) switch (Settings.TaskDevicePluginConfig[event->TaskIndex][0]) { case 0: + case 1: + case 2: { tm1637_InitDisplay(Settings.TaskDevicePin1[event->TaskIndex], Settings.TaskDevicePin2[event->TaskIndex]); int tm1637_bright = Settings.TaskDevicePluginConfig[event->TaskIndex][2] / 2; tm1637_SetPowerBrightness(Settings.TaskDevicePin1[event->TaskIndex], Settings.TaskDevicePin2[event->TaskIndex], tm1637_bright, true); break; } - case 1: + case 3: { max7219_InitDisplay(Settings.TaskDevicePin1[event->TaskIndex], Settings.TaskDevicePin2[event->TaskIndex], Settings.TaskDevicePin3[event->TaskIndex]); max7219_SetPowerBrightness(Settings.TaskDevicePin1[event->TaskIndex], Settings.TaskDevicePin2[event->TaskIndex], Settings.TaskDevicePin3[event->TaskIndex], Settings.TaskDevicePluginConfig[event->TaskIndex][2], true); @@ -182,18 +192,38 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) if (tmpString.equalsIgnoreCase(F("7dn"))) { if (Plugin_073_7dgt->output != 0) break; + String log = F("7DGT : Show Number="); + log += event->Par1; + addLog(LOG_LEVEL_INFO, log); switch (Plugin_073_7dgt->type) { case 0: - { if (event->Par1 > -1000 && event->Par1 < 10000) p073_FillBufferWithNumber(String(int(event->Par1))); else p073_FillBufferWithDash(); - tm1637_ShowBuffer(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2); + tm1637_ShowBuffer(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, TM1637_4DIGIT); break; - } case 1: + { + if (event->Par1 > -1000 && event->Par1 < 10000) + p073_FillBufferWithNumber(tmpStr.substring(comma1+1).c_str()); + else + p073_FillBufferWithDash(); + tm1637_ShowBuffer(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, TM1637_4DIGIT); + break; + } + case 2: + { + if (event->Par1 > -100000 && event->Par1 < 1000000) + p073_FillBufferWithNumber(tmpStr.substring(comma1+1).c_str()); + else + p073_FillBufferWithDash(); + tm1637_SwapDigitInBuffer(); // only needed for 6-digits displays + tm1637_ShowBuffer(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, TM1637_6DIGIT); + break; + } + case 3: { if (comma1 > 0) { if (event->Par1 > -10000000 && event->Par1 < 100000000) { @@ -213,9 +243,13 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) bool p073_tempflagdot = false; if (comma1 > 0) p073_temptemp = atof(tmpStr.substring(comma1+1).c_str()); + String log = F("7DGT : Show Temperature="); + log += p073_temptemp; + addLog(LOG_LEVEL_INFO, log); switch (Plugin_073_7dgt->type) { case 0: + case 1: { if (p073_temptemp > 999 || p073_temptemp < -99.9) p073_FillBufferWithDash(); @@ -228,10 +262,26 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) if (p073_temptemp == 0 && p073_tempflagdot) p073_showbuffer[5] = 0; } - tm1637_ShowTimeTemp(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, p073_tempflagdot, 4); + tm1637_ShowTimeTemp4(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, p073_tempflagdot, 4); break; } - case 1: + case 2: + { + if (p073_temptemp > 999 || p073_temptemp < -99.9) + p073_FillBufferWithDash(); + else { + if (p073_temptemp < 100 && p073_temptemp > -10) { + p073_temptemp = int(p073_temptemp*10); + p073_tempflagdot = true; + } + p073_FillBufferWithTemp(p073_temptemp); + if (p073_temptemp == 0 && p073_tempflagdot) + p073_showbuffer[5] = 0; + } + tm1637_ShowTemp6(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, p073_tempflagdot); + break; + } + case 3: { p073_temptemp = int(p073_temptemp*10); p073_FillBufferWithTemp(p073_temptemp); @@ -245,15 +295,22 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) bool p073_validcmd = false; bool p073_displayon; if (tmpString.equalsIgnoreCase(F("7don"))) { + String log = F("7DGT : Display ON"); + addLog(LOG_LEVEL_INFO, log); p073_displayon = true; p073_validcmd = true; } else if (tmpString.equalsIgnoreCase(F("7doff"))) { + String log = F("7DGT : Display OFF"); + addLog(LOG_LEVEL_INFO, log); p073_displayon = false; p073_validcmd = true; } else if (tmpString.equalsIgnoreCase(F("7db"))) { if (event->Par1 >= 0 && event->Par1 < 16) { + String log = F("7DGT : Brightness="); + log += event->Par1; + addLog(LOG_LEVEL_INFO, log); Plugin_073_7dgt->brightness = event->Par1; p073_displayon = true; p073_validcmd = true; @@ -263,10 +320,12 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) switch (Plugin_073_7dgt->type) { case 0: + case 1: + case 2: { int tm1637_bright = Plugin_073_7dgt->brightness / 2; tm1637_SetPowerBrightness(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, tm1637_bright, p073_displayon); break; } - case 1: + case 3: { max7219_SetPowerBrightness(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, Plugin_073_7dgt->pin3, Plugin_073_7dgt->brightness, p073_displayon); break; } } @@ -294,11 +353,20 @@ boolean Plugin_073(byte function, struct EventStruct *event, String& string) switch (Plugin_073_7dgt->type) { case 0: + case 1: { - tm1637_ShowTimeTemp(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, Plugin_073_7dgt->timesep, 0); + tm1637_ShowTimeTemp4(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, Plugin_073_7dgt->timesep, 0); break; } - case 1: + case 2: + { + if (Settings.TaskDevicePluginConfig[event->TaskIndex][1] == 3) + tm1637_ShowDate6(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, Plugin_073_7dgt->timesep); + else + tm1637_ShowTime6(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, Plugin_073_7dgt->timesep); + break; + } + case 3: { if (Settings.TaskDevicePluginConfig[event->TaskIndex][1] == 3) max7219_ShowDate(Plugin_073_7dgt->pin1, Plugin_073_7dgt->pin2, Plugin_073_7dgt->pin3); @@ -416,62 +484,88 @@ void tm1637_bitDelay(){ void tm1637_i2cStart (uint8_t clk_pin, uint8_t dio_pin) { - CLK_HIGH(); + if (PLUGIN_073_DEBUG) { + String log = F("7DGT : Comm Start"); + addLog(LOG_LEVEL_INFO, log); + } DIO_HIGH(); - tm1637_bitDelay(); + CLK_HIGH(); + delayMicroseconds(TM1637_CLOCKDELAY); DIO_LOW(); } void tm1637_i2cStop (uint8_t clk_pin, uint8_t dio_pin) { + if (PLUGIN_073_DEBUG) { + String log = F("7DGT : Comm Stop"); + addLog(LOG_LEVEL_INFO, log); + } CLK_LOW(); - tm1637_bitDelay(); + delayMicroseconds(TM1637_CLOCKDELAY); DIO_LOW(); - tm1637_bitDelay(); + delayMicroseconds(TM1637_CLOCKDELAY); CLK_HIGH(); - tm1637_bitDelay(); + delayMicroseconds(TM1637_CLOCKDELAY); DIO_HIGH(); } void tm1637_i2cAck (uint8_t clk_pin, uint8_t dio_pin) { + bool dummyAck = false; CLK_LOW(); - DIO_HIGH(); - tm1637_bitDelay(); - while(digitalRead(dio_pin)); + pinMode(dio_pin, INPUT_PULLUP); + //DIO_HIGH(); + delayMicroseconds(TM1637_CLOCKDELAY); + //while(digitalRead(dio_pin)); + dummyAck = digitalRead(dio_pin); + if (PLUGIN_073_DEBUG) { + String log = F("7DGT : Comm ACK="); + if (dummyAck == 0) { log += F("TRUE"); } else { log += F("FALSE"); } + addLog(LOG_LEVEL_INFO, log); + } CLK_HIGH(); - tm1637_bitDelay(); + delayMicroseconds(TM1637_CLOCKDELAY); CLK_LOW(); + pinMode(dio_pin, OUTPUT); } void tm1637_i2cWrite (uint8_t clk_pin, uint8_t dio_pin, uint8_t bytetoprint) { + if (PLUGIN_073_DEBUG) { + String log = F("7DGT : WriteByte"); + addLog(LOG_LEVEL_INFO, log); + } uint8_t i; for(i=0; i<8; i++) { CLK_LOW(); (bytetoprint & B00000001)? DIO_HIGH() : DIO_LOW(); - tm1637_bitDelay(); + delayMicroseconds(TM1637_CLOCKDELAY); bytetoprint = bytetoprint >> 1; CLK_HIGH(); - tm1637_bitDelay(); + delayMicroseconds(TM1637_CLOCKDELAY); } } void tm1637_ClearDisplay (uint8_t clk_pin, uint8_t dio_pin) { tm1637_i2cStart(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, 0xC0); - tm1637_i2cAck(clk_pin, dio_pin); tm1637_i2cWrite(clk_pin, dio_pin, 0); - tm1637_i2cAck(clk_pin, dio_pin); tm1637_i2cWrite(clk_pin, dio_pin, 0); - tm1637_i2cAck(clk_pin, dio_pin); tm1637_i2cWrite(clk_pin, dio_pin, 0); - tm1637_i2cAck(clk_pin, dio_pin); tm1637_i2cWrite(clk_pin, dio_pin, 0); - tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0xC0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0); tm1637_i2cAck(clk_pin, dio_pin); tm1637_i2cStop(clk_pin, dio_pin); } void tm1637_SetPowerBrightness (uint8_t clk_pin, uint8_t dio_pin, uint8_t brightlvl, bool poweron) { + if (PLUGIN_073_DEBUG) { + String log = F("7DGT : Set BRIGHT"); + addLog(LOG_LEVEL_INFO, log); + } uint8_t brightvalue = (brightlvl & 0b111); if (poweron) brightvalue = TM1637_POWER_ON | brightvalue; @@ -485,10 +579,12 @@ void tm1637_SetPowerBrightness (uint8_t clk_pin, uint8_t dio_pin, uint8_t bright void tm1637_InitDisplay(uint8_t clk_pin, uint8_t dio_pin) { - pinMode(dio_pin, OUTPUT); - digitalWrite(dio_pin, LOW); - pinMode(dio_pin, INPUT_PULLUP); pinMode(clk_pin, OUTPUT); + pinMode(dio_pin, OUTPUT); + CLK_HIGH(); + DIO_HIGH(); +// pinMode(dio_pin, INPUT_PULLUP); +// pinMode(clk_pin, OUTPUT); tm1637_i2cStart(clk_pin, dio_pin); tm1637_i2cWrite(clk_pin, dio_pin, 0x40); tm1637_i2cAck(clk_pin, dio_pin); @@ -496,38 +592,99 @@ void tm1637_InitDisplay(uint8_t clk_pin, uint8_t dio_pin) tm1637_ClearDisplay(clk_pin, dio_pin); } -void tm1637_ShowTimeTemp(uint8_t clk_pin, uint8_t dio_pin, bool sep, byte bufoffset) +void tm1637_ShowTime6(uint8_t clk_pin, uint8_t dio_pin, bool sep) { + byte p073_datashowpos1; tm1637_i2cStart(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, 0xc0); - tm1637_i2cAck(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[0+bufoffset]]); - tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0xC0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[2]]); tm1637_i2cAck(clk_pin, dio_pin); + // add bit for colon on second digit if required + p073_datashowpos1 = CharTableTM1637[p073_showbuffer[1]]; + if (sep) p073_datashowpos1 |= 0b10000000; + tm1637_i2cWrite(clk_pin, dio_pin, p073_datashowpos1); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[0]]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[5]]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[4]]); tm1637_i2cAck(clk_pin, dio_pin); + // add bit for colon on fourth digit if required + p073_datashowpos1 = CharTableTM1637[p073_showbuffer[3]]; + if (sep) p073_datashowpos1 |= 0b10000000; + tm1637_i2cWrite(clk_pin, dio_pin, p073_datashowpos1); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cStop(clk_pin, dio_pin); +} + +void tm1637_ShowDate6(uint8_t clk_pin, uint8_t dio_pin, bool sep) +{ + byte p073_datashowpos1; + tm1637_i2cStart(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0xC0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[2]]); tm1637_i2cAck(clk_pin, dio_pin); + // add bit for colon on second digit if required + p073_datashowpos1 = CharTableTM1637[p073_showbuffer[1]]; + if (sep) p073_datashowpos1 |= 0b10000000; + tm1637_i2cWrite(clk_pin, dio_pin, p073_datashowpos1); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[0]]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[7]]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[6]]); tm1637_i2cAck(clk_pin, dio_pin); + // add bit for colon on fourth digit if required + p073_datashowpos1 = CharTableTM1637[p073_showbuffer[3]]; + if (sep) p073_datashowpos1 |= 0b10000000; + tm1637_i2cWrite(clk_pin, dio_pin, p073_datashowpos1); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cStop(clk_pin, dio_pin); +} + +void tm1637_ShowTemp6(uint8_t clk_pin, uint8_t dio_pin, bool sep) +{ + tm1637_i2cStart(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0xC0); tm1637_i2cAck(clk_pin, dio_pin); + // add bit for colon on second digit if required + byte p073_datashowpos1 = CharTableTM1637[p073_showbuffer[5]]; + if (sep) p073_datashowpos1 |= 0b10000000; + tm1637_i2cWrite(clk_pin, dio_pin, p073_datashowpos1); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[4]]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[10]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[10]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[7]]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[6]]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cStop(clk_pin, dio_pin); +} + +void tm1637_ShowTimeTemp4(uint8_t clk_pin, uint8_t dio_pin, bool sep, byte bufoffset) +{ + tm1637_i2cStart(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0xC0); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[0+bufoffset]]); tm1637_i2cAck(clk_pin, dio_pin); // add bit for colon on second digit if required byte p073_datashowpos1 = CharTableTM1637[p073_showbuffer[1+bufoffset]]; if (sep) p073_datashowpos1 |= 0b10000000; - tm1637_i2cWrite(clk_pin, dio_pin, p073_datashowpos1); - tm1637_i2cAck(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[2+bufoffset]]); - tm1637_i2cAck(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[3+bufoffset]]); - tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, p073_datashowpos1); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[2+bufoffset]]); tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[3+bufoffset]]); tm1637_i2cAck(clk_pin, dio_pin); tm1637_i2cStop(clk_pin, dio_pin); } -void tm1637_ShowBuffer(uint8_t clk_pin, uint8_t dio_pin) +void tm1637_SwapDigitInBuffer() { + uint8_t p073_temp; + p073_temp = p073_showbuffer[4]; p073_showbuffer[4] = p073_showbuffer[2]; p073_showbuffer[2] = p073_temp; + p073_temp = p073_showbuffer[5]; p073_showbuffer[5] = p073_showbuffer[7]; p073_showbuffer[7] = p073_temp; + switch (p073_dotpos) + { + case 2: { p073_dotpos = 4; break; } + case 4: { p073_dotpos = 2; break; } + case 5: { p073_dotpos = 7; break; } + case 7: { p073_dotpos = 5; break; } + } +} + +void tm1637_ShowBuffer(uint8_t clk_pin, uint8_t dio_pin, byte digits) { + byte p073_datashowpos1; tm1637_i2cStart(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, 0xc0); - tm1637_i2cAck(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[4]]); - tm1637_i2cAck(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[5]]); - tm1637_i2cAck(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[6]]); - tm1637_i2cAck(clk_pin, dio_pin); - tm1637_i2cWrite(clk_pin, dio_pin, CharTableTM1637[p073_showbuffer[7]]); - tm1637_i2cAck(clk_pin, dio_pin); + tm1637_i2cWrite(clk_pin, dio_pin, 0xC0); tm1637_i2cAck(clk_pin, dio_pin); + for(int i=digits;i<8;i++) { + p073_datashowpos1 = CharTableTM1637[p073_showbuffer[i]]; + if (p073_dotpos == i) p073_datashowpos1 |= 0b10000000; + tm1637_i2cWrite(clk_pin, dio_pin, p073_datashowpos1); tm1637_i2cAck(clk_pin, dio_pin); + } tm1637_i2cStop(clk_pin, dio_pin); } @@ -631,3 +788,4 @@ void max7219_ShowBuffer(uint8_t din_pin, uint8_t clk_pin, uint8_t cs_pin) } #endif + From bff60a2e27626f8461473d0dd5c921d5f28903a3 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 10 Mar 2018 21:28:09 +0100 Subject: [PATCH 2/2] [P073] Remove tm1637_bitDelay() Not used anymore --- src/_P073_7DGT.ino | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/_P073_7DGT.ino b/src/_P073_7DGT.ino index e9f34c44ac..e2ed2a0400 100644 --- a/src/_P073_7DGT.ino +++ b/src/_P073_7DGT.ino @@ -478,10 +478,6 @@ void p073_FillBufferWithDash() // in case of error show all dashes #define DIO_HIGH() pinMode(dio_pin, INPUT) #define DIO_LOW() pinMode(dio_pin, OUTPUT) -void tm1637_bitDelay(){ - delayMicroseconds(TM1637_BIT_DELAY); -} - void tm1637_i2cStart (uint8_t clk_pin, uint8_t dio_pin) { if (PLUGIN_073_DEBUG) { @@ -788,4 +784,3 @@ void max7219_ShowBuffer(uint8_t din_pin, uint8_t clk_pin, uint8_t cs_pin) } #endif -