My shot at what the code should be - compiles okay, have to wire up to see if it actually works
// sketch to drive 2 common anode 7-segment displays from arduino
// pins for the digits, 0,1 reserved for serial
byte digit1Array[7] = {
2,3,4,5,6,7,8}; //a,b,c,d,e,f,g
byte digit2Array[7] = {
9,10,11,12,13,14,15}; //a,b,c,d,e,f,g
// segments to light up, 0 = on
byte digitDisplay[10] = {
B01000000, //0, 0 = on with pulldowns
B01111001, //1
B00100100, //2
B00110000, //3
B00011001, //4
B00100100, //5
B00000011, //6
B01111000, //7
B00000000, //8
B00011000, //9
};
// switch pins
byte sw1 = 16;
byte sw2 = 17;
byte sw3 = 18;
byte sw4 = 19;
byte digit1 = 0;
byte digit2 = 0;
byte updated = 0;
byte segment = 0;
void setup(){
for (int x = 0; x<7; x=x+1){
pinMode(digit1Array[x], OUTPUT);
pinMode(digit2Array[x], OUTPUT);
digitalWrite (digit1Array[x], HIGH);
digitalWrite (digit2Array[x], HIGH);
}
pinMode (sw1,INPUT_PULLUP); // internal pullup, reads high unless switch is closed
pinMode (sw2,INPUT_PULLUP);
pinMode (sw3,INPUT_PULLUP);
pinMode (sw4,INPUT_PULLUP);
Serial.begin(9600);
}
void loop(){
if (digitalRead (sw1) == 0){
updated = 1;
digit1 = digit1+1;
if (digit1 ==10){
digit1 = 0;
}
for (int x = 1; x<0x80; x=x<1){
// mask bit for the segments: 0x01 (A), 0x02 (B), 0x04 (C), 0x08 (D), 0x10 (E), 0x20 (F), 0x40 (G)
if ( digitDisplay[digit1] & x ==0 ){
segment = 0;
}
else {
segment = 1;
}
digitalWrite(digit1Array[x], segment);
}
}
if (digitalRead (sw2) == 0){
updated = 1;
digit2 = digit2+1;
if (digit2 ==10){
digit2 = 0;
}
for (int x = 1; x<0x80; x=x<1){
// mask bit for the segments: 0x01 (A), 0x02 (B), 0x04 (C), 0x08 (D), 0x10 (E), 0x20 (F), 0x40 (G)
if ( digitDisplay[digit2] & x ==0 ){
segment = 0;
}
else {
segment = 1;
}
digitalWrite(digit2Array[x], segment);
}
}
if (updated == 1){
updated = 0;
delay(100);
} // button debounce delay, there are better ways to do this also
}