// Pin assignment
const int SW1 = 11;
const int SW2 = 10;
const int SW3 = 9;
const int pbtn1 = 13;
const int pbtn2 = 12;
// Pin assignment for 7 segs
const int segmentPins[] = {2, 3, 4, 5, 6, 7, 8}; // a, b, c, d, e, f, g
// Delay Variables
unsigned long blinkDelay = 1000; // Starting delay of 1 second
unsigned long lastBlink = 0;
bool isDisplayOn = false;
// Binary to 7seg display
const byte digits[10][7] = {
{1, 1, 1, 1, 1, 1, 0}, // 0
{0, 1, 1, 0, 0, 0, 0}, // 1
{1, 1, 0, 1, 1, 0, 1}, // 2
{1, 1, 1, 1, 0, 0, 1}, // 3
{0, 1, 1, 0, 0, 1, 1}, // 4
{1, 0, 1, 1, 0, 1, 1}, // 5
{1, 0, 1, 1, 1, 1, 1}, // 6
{1, 1, 1, 0, 0, 0, 0}, // 7
{1, 1, 1, 1, 1, 1, 1}, // 8
{1, 1, 1, 1, 0, 1, 1} // 9
};
void setup() {
// Set up switch and button pins
pinMode(SW1, INPUT);
pinMode(SW2, INPUT);
pinMode(SW3, INPUT);
pinMode(pbtn1, INPUT);
pinMode(pbtn2, INPUT);
// Assign output pins of 7seg
for (int i = 0; i < 7; i++) {
pinMode(segmentPins[i], OUTPUT);
}
}
void loop() {
// Reading binary input from switches
int binaryInput = (digitalRead(SW1) << 2) | (digitalRead(SW2) << 1) | digitalRead(SW3);
// Adjust blink delay with buttons
if (digitalRead(pbtn1) == HIGH) {
blinkDelay = min(10000, blinkDelay + 200); // Increase delay (max 10 seconds)
delay(200); // Debounce
}
if (digitalRead(pbtn2) == HIGH) {
blinkDelay = max(200, blinkDelay - 200); // Decrease delay (min 200 ms)
delay(200); // Debounce
}
// Blinking logic
if (millis() - lastBlink >= blinkDelay) {
isDisplayOn = !isDisplayOn;
lastBlink = millis();
}
// Display number if display is ON
if (isDisplayOn) {
displayNumber(binaryInput);
} else {
clearDisplay();
}
}
void displayNumber(int num) {
// Set each segment based on lookup table for the number
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], digits[num][i]);
}
}
void clearDisplay() {
// Turn off all segments
for (int i = 0; i < 7; i++) {
digitalWrite(segmentPins[i], LOW);
}
}