/* Based on SevSeg Counter Example Copyright 2020 Dean Reading added interrupt routine and reset button. optional todo feature: count direction switch final version expected to run on an Arduino Nano (smaller form factor) fjkraan@electrickery.nl, 2024-11-24 */ // Leonardo can use 0, 1, 2, 3, 7 // Uno, Nano can use 2, 3 #define interruptPin 2 int pulses = 0; bool direction = true; // true is incrementing // #define resetPin A0 #define directionPin A1 // SevSeg 3.7.0 by Dean Reading #include "SevSeg.h" SevSeg sevseg; //Instantiate a seven segment controller object void setup() { pinMode(interruptPin, INPUT_PULLUP); attachInterrupt(digitalPinToInterrupt(interruptPin), blink, RISING); pinMode(resetPin, INPUT_PULLUP); pinMode(directionPin, INPUT_PULLUP); byte numDigits = 4; byte digitPins[] = {10, 11, 12, 13}; byte segmentPins[] = {0, 3, 4, 5, 6, 7, 8, 9}; bool resistorsOnSegments = true; // '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; // Use 'true' if your decimal point doesn't exist or isn't connected sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments, updateWithDelays, leadingZeros, disableDecPoint); sevseg.setBrightness(90); } void loop() { static unsigned long timer = millis(); if (!digitalRead(resetPin)) { pulses = 0; direction = true; } if (!digitalRead(directionPin)) { direction = false; } if (millis() - timer >= 100) { sevseg.setNumber(pulses, -1); } sevseg.refreshDisplay(); // Must run repeatedly } void blink() { if (direction) { pulses++; } else { --pulses; } if (pulses > 9999) pulses = 0; if (pulses < 0) pulses = 9999; } /// END ///