/*
7-Segment Display - Four Digit, directly wired
7-seg-multi.ino
Print a number to a 4-digit 7-segment display
DroneBot Workshop 2022
https://dronebotworkshop.com
*/
// Include library
#include "SevSeg.h"
#define countUp A0
#define INT_EN A1
#define RST A2
byte counter = 0;
unsigned long t = millis();
// Create object
SevSeg sevseg;
// Number of digits in display
byte numDigits = 4;
// Display select pins
byte digitPins[] = {10, 11, 12, 13};
// Display segment pins A,B,C,D,E,F,G,DP
byte segmentPins[] = {9, 2, 3, 5, 6, 8, 7, 4};
// Dropping resistors used
bool resistorsOnSegments = true;
// Display type
byte hardwareConfig = COMMON_CATHODE;
void setup()
{
pinMode(countUp, INPUT_PULLUP);
pinMode(INT_EN, INPUT_PULLUP);
pinMode(RST, INPUT_PULLUP);
PCICR = B010;
PCMSK1 = B0000101;
//attachInterrupt(digitalPinToInterrupt(countUp), ISR_countUp, RISING);
// Start display object
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
// Set brightness
sevseg.setBrightness(0);
}
void loop()
{
// Set the number to display
sevseg.setNumber(counter);
// Refresh the display
sevseg.refreshDisplay();
}
ISR(PCINT1_vect)
{
if (millis()-t >= 50)
{
t = millis();
if(!digitalRead(countUp))
{ counter++; PCMSK1 = B0000110;}
if(!digitalRead(INT_EN))
{PCMSK1 = B0000101;}
if(!digitalRead(RST))
{counter = 0; PCMSK1 = B0000101;}
}
}