#include <stdint.h>
const char segmentToBinary[] = { // Map numbers into seven segment digits
0b00111111,
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111100,
0b00000111,
0b01111111,
0b01100111
};
uint8_t segmentPins[] = {18, 19, 21, 22, 23, 13, 12};
uint8_t commonPins[] = {15, 2, 4, 5};
void displayDigits(int number);
void setup(){
// Set outputs and turn off
for(int i = 0; i<sizeof(segmentPins);i++){
pinMode(segmentPins[i],OUTPUT);
digitalWrite(segmentPins[i],HIGH);
}
for(int i = 0; i<sizeof(commonPins);i++){
pinMode(commonPins[i],OUTPUT);
digitalWrite(commonPins[i],LOW);
}
}
void loop(){
displayDigits(1234);
}
void displayDigits(int number){
uint8_t digits[4];
// Separate number digits :
digits[0] = number/1000; // extract the first digit
digits[1] = (number%1000)/100; // extract the second digit
digits[2] = (number%100)/10; // extract the third digit
digits[3] = (number%10); // extract the third digit
for(int i = 0; i<4; i++){
// Turn off all digits
for(int x = 0; x<sizeof(commonPins); x++){
digitalWrite(commonPins[i],LOW);
}
digitalWrite(commonPins[i],HIGH); // Turn on corresponding digit
uint8_t currSegment = ~segmentToBinary[digits[i]]; // Invert the binary, because 7seg is common anode
for(int y = 0; y<sizeof(segmentPins); y++){
digitalWrite(segmentPins[i],currSegment & 0x01);
currSegment >>= 1;
}
delay(1);
}
}