/*
Binary to 7 segment decoder
AnonEngineering 11/14/25
*/
#include "segment_lookup.h"
// define pins
const int SEG_PINS[8] = {13, 12, 6, 9, 8, 10, 11, 7}; // (A to G, DP)
const int SW_PINS[] = {5, 4, 3, 2}; // MSB > LSB
int oldValue = -1;
int getValue() {
int value = 0;
for (int bitNum = 0; bitNum < 4; bitNum++) {
int bitVal = !digitalRead(SW_PINS[bitNum]); // ! inverts state
value += bitVal << (3 - bitNum); // MSB
}
return value;
}
void showDigit(int num) {
for (int i = 0; i < 8; i++) {
digitalWrite(SEG_PINS[i], SEGMENTS[num][i]);
}
}
void setup() {
Serial.begin(115200);
for (int i = 0; i < 8; i++) {
pinMode(SEG_PINS[i], OUTPUT);
}
for (int i = 0; i < 4; i++) {
pinMode(SW_PINS[i], INPUT_PULLUP);
}
}
void loop() {
int value = getValue();
if (value != oldValue) {
Serial.print("Value: ");
Serial.println(value);
oldValue = value;
}
// this must be called frequently
showDigit(value);
}
MSB>LSB