Bug na variavel ARRAY

Boa muito a todo. Eu montei um display led 7-Seg com 2 Shift Register em sequencia, uso 2 variavel tipo array para o endereçamento do digito e a segunda para desenhar o numero. E sim existe transistor no pino comum do display.
Mas na hora do vamos ser nunca sai certo, quando eu troco a variavel por numero fixo funciona!
Segue abaixo o programa o resultado do Serial.print

#define clk 8
#define lanch 9
#define dt 10

const static byte decTable [] PROGMEM = {B00000001,
B00000010,
B00000100,
B00001000,
B00010000,
B00100000,
B01000000,
B10000000};

const static byte charTable [] PROGMEM = {B01101111,
B01000010,
B00111011,
B01110011,
B01010110,
B01110101,
B01111101,
B01000011,
B01111111,
B01110111};

unsigned long timer;
int cont=1;
int cont2;

void setup() {
Serial.begin(9600);
pinMode(clk, OUTPUT);
pinMode(lanch, OUTPUT);
pinMode(dt, OUTPUT);
digitalWrite(clk, LOW);
digitalWrite(dt, LOW);
digitalWrite(lanch, LOW);
timer=millis();
}

void loop() {
if ((millis()-timer)>= 800){
cont2=cont;
for (byte dec = 0; dec <= 2; dec++) {
/shiftOut(dt, clk, MSBFIRST, ~decTable[dec]);
shiftOut(dt, clk, MSBFIRST, ~charTable[cont2%10]);
digitalWrite(lanch, HIGH);
digitalWrite(lanch, LOW);
/
Serial.print(dec); //numero da casa decimal
Serial.print(" ");
Serial.print(decTable[dec],BIN); //numero da casa decimal em binario conforme a array
Serial.print(" / "); // separação
Serial.print(cont2%10); //numero a ser escrito
Serial.print(" ");
Serial.print(charTable[cont2%10],BIN); //numero a ser escrito em binario conforme a array
Serial.println();
cont2=cont2/10;
delay(800);
}
Serial.println();
cont++;
timer=millis();
}
}

0 10 / 1 0
1 10 / 0 0
2 10 / 0 0

0 10 / 2 10111000
1 10 / 0 0
2 10 / 0 0

0 10 / 3 0
1 10 / 0 0
2 10 / 0 0

0 10 / 4 0
1 10 / 0 0
2 10 / 0 0

0 10 / 5 0
1 10 / 0 0
2 10 / 0 0

0 10 / 6 1
1 10 / 0 0
2 10 / 0 0

0 10 / 7 0
1 10 / 0 0
2 10 / 0 0

0 10 / 8 0
1 10 / 0 0
2 10 / 0 0

0 10 / 9 10111000
1 10 / 0 0
2 10 / 0 0

0 10 / 0 0
1 10 / 1 0
2 10 / 0 0

0 10 / 1 0
1 10 / 1 0
2 10 / 0 0

0 10 / 2 10111000
1 10 / 1 0
2 10 / 0 0

0 10 / 3 0
1 10 / 1 0
2 10 / 0 0

0 10 / 4 0
1 10 / 1 0
2 10 / 0 0

O que é que pretendes fazer e o que é que não funciona?

FUTURAMENTE pretendo fazer uma biblioteca para controlar um display que eu montei usando 2 SHIFT REGISTER em sequencia o 1º byte para o endereçamento e o 2º para o numeral.
Os bytes para isso ficam armazenados em 2 variaveis tipo ARRAY.
Agora o problema é quando uso uma variavel para acessar um endereço da array, ela retorna um valor estranho, por exemplo:
Quero escrever 129 os bytes a ser enviado deveria ser
00000001-01000010
00000010-00111011
00000100-01110111

mas em vez disso temos
00000010-00000000
00000010-10111000
00000010-10111000

Por mais estranho que pareça quando mudo a variavel para um numero
Exemplo
decTable[dec]
harTable[cont2%10]

para
decTable[1]
charTable[3]

o program funciona

Creio que eu esquici de comentar uma parte importante do código no topo, eu troquei da saída de display com /,,,/ e enviei tudo para o monitor serial, então aquele monte de números no final e o resultado do monitor serial no formato...

<conteúdo da array> "/" <conteúdo da array>

coloquei o conteúdo da array para sair em binário mas parece que o monitor serial contou alguns 0.