/*
https://forum.arduino.cc/t/my-7-segment-4-digit-display-is-showing-6-6-6-6-and-a-a-a/1263953
*/
#include <SevSeg.h>
SevSeg sevseg; // Instantiate a seven segment object
uint8_t state = 0;
uint8_t numDigits;
const uint32_t INTERVAL_MS = 500;
byte stateSys = 0;
unsigned long lastStep;
unsigned long intervalStep = 1000;
int count = 1;
int counts = 0;
float total = 0.000;
int ds = 0;
void setup() {
// put your setup code here, to run once:
pinMode(2, OUTPUT);
pinMode(6, INPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
numDigits = 4;
byte digitPins[] = {7, 8, 9, 10};
byte segmentPins[] = {12, 13, 14, 15, 16, 17, 18, 19};
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_ANODE; // See README.md for options
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false;
bool stop = false;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90); // Set brightness if needed
Serial.begin(9600); // Initialize serial communication
}
void loop() {
unsigned long now = millis();
//pump that screen..
sevseg.refreshDisplay();
if (now - lastStep >= intervalStep){
switch (stateSys){
case 0: count = 1;
sevseg.blank();
stateSys++;
break;
case 1: if (count < 5){
count++;
digitalWrite(count, HIGH);
lastStep = now;
intervalStep = 1000;
} else {
stateSys++;
lastStep = now;
randomSeed(analogRead(0));
intervalStep = random(1000,5000);
}
break;
case 2: if (count > 1){
digitalWrite(count, LOW);
count--;
} else{
stateSys++;
counts = 0;
}
break;
case 3: if (digitalRead(6)== LOW){
counts++;
lastStep = now;
intervalStep = 1; //??? that's fast
} else stateSys++;
break;
case 4: total = (float)counts / 1000;
Serial.println(total+0.075, 3 );//why the math??
ds = round(total);
sevseg.setNumber(ds); // Display the calculated value
stateSys++;
lastStep = now;
intervalStep = 5000;
break;
case 5: stateSys = 0;
break;
} //end switch
} //end time for a step
}