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
18 changes: 18 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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].

Expand Down Expand Up @@ -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
Expand Down
38 changes: 37 additions & 1 deletion SevSeg.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,10 @@ SevSeg::SevSeg() {
prevUpdateTime = 0;
resOnSegments = 0;
updateWithDelays = 0;
enableCenterDoubleDots = false;
dotsDigitNum = 0;
dotsPin = 0;
centerDoubleDotStatus = false;
}


Expand All @@ -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;
Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -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
Expand All @@ -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);
}

Expand Down Expand Up @@ -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) {
Expand Down
10 changes: 8 additions & 2 deletions SevSeg.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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:
Expand All @@ -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
Expand Down