From 6b2f0efc89b7e3d053d1e21f5fe48b2ae2e80185 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Mik=C3=A1cz=C3=B3?= Date: Fri, 6 Dec 2024 04:32:35 +0100 Subject: [PATCH 1/2] Added support for 7 segment displays with double dots in the center ":". --- SevSeg.cpp | 38 +++++++++++++++++++++++++++++++++++++- SevSeg.h | 10 ++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/SevSeg.cpp b/SevSeg.cpp index cbb6988..0fa2956 100644 --- a/SevSeg.cpp +++ b/SevSeg.cpp @@ -104,6 +104,10 @@ SevSeg::SevSeg() { prevUpdateTime = 0; resOnSegments = 0; updateWithDelays = 0; + enableCenterDoubleDots = false; + dotsDigitNum = 0; + dotsPin = 0; + centerDoubleDotStatus = false; } @@ -119,7 +123,11 @@ SevSeg::SevSeg() { // which case there are only 7 segments. void SevSeg::begin(uint8_t hardwareConfig, uint8_t numDigitsIn, const uint8_t digitPinsIn[], const uint8_t segmentPinsIn[], bool resOnSegmentsIn, - bool updateWithDelaysIn, bool leadingZerosIn, bool disableDecPoint) { + bool updateWithDelaysIn, bool leadingZerosIn, bool disableDecPoint, bool enableCenterDoubleDotsIn, uint8_t dotsDigitNumIn, uint8_t dotsPinIn) { + + dotsDigitNum = dotsDigitNumIn; + dotsPin = dotsPinIn; + enableCenterDoubleDots = enableCenterDoubleDotsIn; resOnSegments = resOnSegmentsIn; updateWithDelays = updateWithDelaysIn; @@ -186,6 +194,9 @@ void SevSeg::begin(uint8_t hardwareConfig, uint8_t numDigitsIn, const uint8_t di digitalWrite(segmentPins[segmentNum], segmentOffVal); } + pinMode(dotsPin, OUTPUT); + digitalWrite(dotsPin, segmentOffVal); + blank(); // Initialise the display } @@ -346,6 +357,13 @@ void SevSeg::digitOn(uint8_t digitNum) { digitalWrite(segmentPins[segmentNum], segmentOnVal); } } + if (digitNum == dotsDigitNum) { + if (enableCenterDoubleDots) { + if (centerDoubleDotStatus) { + digitalWrite(dotsPin, segmentOnVal); + } + } + } } // digitOff @@ -355,6 +373,11 @@ void SevSeg::digitOff(uint8_t digitNum) { for (uint8_t segmentNum = 0 ; segmentNum < numSegments ; segmentNum++) { digitalWrite(segmentPins[segmentNum], segmentOffVal); } + if (digitNum == dotsDigitNum) { + if (enableCenterDoubleDots) { + digitalWrite(dotsPin, segmentOffVal); + } + } digitalWrite(digitPins[digitNum], digitOffVal); } @@ -505,6 +528,19 @@ void SevSeg::setChars(const char str[]) { } } + +// toggleCenterDoubleDots +/******************************************************************************/ +void SevSeg::toggleCenterDoubleDots(void) { + if(enableCenterDoubleDots) centerDoubleDotStatus = !centerDoubleDotStatus; +} + +// setCenterDoubleDots +/******************************************************************************/ +void SevSeg::setCenterDoubleDots(bool dots) { + if(enableCenterDoubleDots) centerDoubleDotStatus = dots; +} + // blank /******************************************************************************/ void SevSeg::blank(void) { diff --git a/SevSeg.h b/SevSeg.h index 25c0999..ea20d09 100644 --- a/SevSeg.h +++ b/SevSeg.h @@ -40,7 +40,7 @@ class SevSeg void begin(uint8_t hardwareConfig, uint8_t numDigitsIn, const uint8_t digitPinsIn[], const uint8_t segmentPinsIn[], bool resOnSegmentsIn=0, bool updateWithDelaysIn=0, bool leadingZerosIn=0, - bool disableDecPoint=0); + bool disableDecPoint=0, bool enableCenterDoubleDots=0, uint8_t dotsDigitNum=0, uint8_t dotsPin=0); void setBrightness(int16_t brightnessIn); // A number from 0..100 void setNumber(int32_t numToShow, int8_t decPlaces=-1, bool hex=0); @@ -52,6 +52,10 @@ class SevSeg void setChars(const char str[]); void blank(void); + void toggleCenterDoubleDots(void); + bool getCenterDoubleDots(void) { return centerDoubleDotStatus; }; + void setCenterDoubleDots(bool dots); + uint8_t getNumDigits() { return numDigits; } private: @@ -64,11 +68,13 @@ class SevSeg void digitOff(uint8_t digitNum); uint8_t digitOnVal,digitOffVal,segmentOnVal,segmentOffVal; - bool resOnSegments, updateWithDelays, leadingZeros; + bool resOnSegments, updateWithDelays, leadingZeros, enableCenterDoubleDots, centerDoubleDotStatus; uint8_t digitPins[MAXNUMDIGITS]; uint8_t segmentPins[8]; uint8_t numDigits; uint8_t numSegments; + uint8_t dotsDigitNum; + uint8_t dotsPin; uint8_t prevUpdateIdx; // The previously updated segment or digit uint8_t digitCodes[MAXNUMDIGITS]; // The active setting of each segment of each digit uint32_t prevUpdateTime; // The time (millis()) when the display was last updated From 44f2b237bfa3f66a0b3f5975c4664f60e5f78a17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A1vid=20Mik=C3=A1cz=C3=B3?= Date: Fri, 6 Dec 2024 04:46:37 +0100 Subject: [PATCH 2/2] Center dots update on README.md --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index 7d4b134..6d826f7 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Supports: - decimal place - input numbers as int or float - alphanumeric characters (as accurately as possible) + - center double dots ":" [Download it from GitHub][1]. @@ -181,6 +182,23 @@ Numbers greater than 100 and less than -100 may cause noticeable flickering. Note that a 0 does not correspond to no brightness - nor does -200. If your display has noticeable flickering, modifying the brightness towards 0 may correct it. Results will vary for each implementation. The brightness seen depends on the display characteristics, the arduino model driving it, the resistors used, and the amount of time spent doing other things in the program. +### Center double dots +To use the ":" in the middle(if your display has them), you need to enable it first. + +```c++ +bool enableCenterDoubleDots = true; // Enable the dots +int dotsDigitNum = 1; // You need to specify to which digit is the extra dots segment connected to, in this case, it is the 2nd one. +int dotsPin = 13; // Pin of the extra segment. + +sevseg.begin(COMMON_ANODE, 4, digitPins, segmentPins, true, false, false, false, enableCenterDoubleDots, dotsDigitNum, dotsPin); +``` +```c++ +toggleCenterDoubleDots(); // toggles the dots on/off +bool status = getCenterDoubleDots(); // current status of the dots +setCenterDoubleDots(true); // ":" on +setCenterDoubleDots(false); // ":" off +``` + ## License MIT License