I am looking for a good way to display numbers on a total of 8 seven-segment displays.
For my project, the displays are grouped as follows: Digits 1, 2, and 3 are one group (score) , digits 4, 5, and 6 (high score) are a second group, and the third group is digits 7 and 8 (time). I have taken some of the test code shown in the SevSeg Library and that makes my displays work. However, in the process of tweaking that code for my use, I am having problems. With the code shown below, all eight displays show a solid number "8". If I put a short delay in the code, I can see each digit simultaneously turn on and off segments A-G one at a time and repeat. The wiring is correct so my code is not.
Here's other information that might be helpful. I have a Mega Arduino. Here is my wiring schematic. Please note this circuit is working perfectly. This is a programming flaw. If you see something I'm missing, please let me know. Thanks in advance.
/*
Sample code to test how to get a total of eight 7-digit diplays working together using the SevSeg Library.
Note the eight digits will be split up as follows: [2 digit time][3 digit high score][3digit score]
e.g. if there is 87 seconds AND high score is 654 AND score is 321 then the resulting number array would be 87654321
*/
#include <SevSeg.h> // Library for seven segment display
SevSeg sevSeg;
// *********************************************************************** //
// Variables for set up
// *********************************************************************** //
//General variables
unsigned long numberToShow = 0;
// Variables for scoring
int Score = 0; //0 to 990; //game score
int HighScore = 0;
// Variables for time
int TimeRemaining = 0; // Values 0 to 30
// *********************************************************************** //
void setup() {
// *********************************************************************** //
//Set up for seven segment displays
byte segDPins[] = {38, 39, 40, 41, 42, 43, 44}; // Segments A, B, C, D, E, F, G
byte ccDPins[] = {45, 46, 47, 48, 49, 50, 51, 52}; // Common cathodes for dispays 1, 2, 3, 4, 5, 6, 7, 8
sevSeg.begin(COMMON_CATHODE, 8, ccDPins, segDPins, false, false, false, true);
sevSeg.setNumber (numberToShow, 0, LOW);
sevSeg.setBrightness(120); // Can range -200 to +200 with normal range 0 to 100
//Data output assignments of Arduino board pins
pinMode(38, OUTPUT); //Seven segment display anode - segment A on all digits
pinMode(39, OUTPUT); //Seven segment display anode - segment B on all digits
pinMode(40, OUTPUT); //Seven segment display anode - segment C on all digits
pinMode(41, OUTPUT); //Seven segment display anode - segment D on all digits
pinMode(42, OUTPUT); //Seven segment display anode - segment E on all digits
pinMode(43, OUTPUT); //Seven segment display anode - segment F on all digits
pinMode(44, OUTPUT); //Seven segment display anode - segment G on all digits
pinMode(45, OUTPUT); //Seven segment display cathode - digit 1 (1's digit of Score)
pinMode(46, OUTPUT); //Seven segment display cathode - digit 2 (10's digit of Score)
pinMode(47, OUTPUT); //Seven segment display cathode - digit 3 (100's digit of Score)
pinMode(48, OUTPUT); //Seven segment display cathode - digit 4 (1's digit of HighScore)
pinMode(49, OUTPUT); //Seven segment display cathode - digit 5 (10's digit of HighScore)
pinMode(50, OUTPUT); //Seven segment display cathode - digit 6 (100's digit of HighScore)
pinMode(51, OUTPUT); //Seven segment display cathode - digit 7 (1's digit of time)
pinMode(52, OUTPUT); //Seven segment display cathode - digit 8 (10's digit of time)
sevSeg.blank();
int Score = 321; // values 0 to 990
int HighScore = 654; // values 0 to 990
int TimeRemaining = 87; // Values 0 to 120
} //end set up
// *********************************************************************** //
void loop() {
// *********************************************************************** //
numberToShow = TimeRemaining * pow(10, 6) + HighScore * pow(10, 3) + Score; // [2 digts time remaining][3 digits high score][3 digits score] = 8 digit number
sevSeg.refreshDisplay();
} // End of loop ()
