Redução de codigo switch e if

Boa noite, esse código é sobre um teclado matricial, evito usar biblioteca ao máximo.
Se houver algum sugestão para reduzir o código ou algo que esteja em desacordo com as boas práticas de programação, eu aceito sugestão.

void digito(int x, int y)
{
  //Mostra informacoes no serial monitor
  switch(x)
  {
  case 1:
   if(y==1){Serial.print("1");}
   else if(y==2){Serial.print("2");}
   else if(y==3){Serial.print("3");}
   break;
  case 2:
   if(y==1){Serial.print("4");}
   else if(y==2){Serial.print("5");}
   else if(y==3){Serial.print("6");}
   break;
  case 3:
   if(y==1){Serial.print("7");}
   else if(y==2){Serial.print("8");}
   else if(y==3){Serial.print("9");}
   break;
  case 4:
   if(y==1){Serial.print("*");}
   else if(y==2){Serial.print("0");}
   else if(y==3){Serial.print("#");}
   }
  delay(10);
}

Algo assim?

char teclado[3][4] = {{'1', '2', '3'},{'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'}};

void digito(int x, int y){
    Serial.print(teclado[x][y]);
}

Reparei agora que a ordem do array está trocada, mas dá para perceber o que é.

Obrigado! Por que utilizou matriz tipo char? Foi por causa do * e # correto?

felipejose8:
Obrigado! Por que utilizou matriz tipo char? Foi por causa do * e # correto?

Exato.

  • e #
    Entram como caractere

PS:
Aliás switch só aceita inteiro ou caractere

felipejose8:
Obrigado! Por que utilizou matriz tipo char? Foi por causa do * e # correto?

Principalmente porque é o menor tamanho de memória necessário para a aplicação. Nunca utilizar um tipo de variável que vai desperdiçar espaço.
Poderia ter feito algo como:

char teclado[3][4] = {{49, 50, 51},{52, 53, 54}, {55, 56, 57}, {42, 48, 35}};

void digito(int x, int y){
    Serial.write(teclado[x][y]);
}

Noto que devia ter usado char nas variávies x e y, mas como estão limitadas para dentro da função e foi um copy/paste do que tinhas escrito, lá passou.
Se quiseres saber o que são esses números, vê aqui.

Agradeço a ambas as repostas. Mais uma dúvida, esse programa refere-se a um teclado para senha, perdi o código e consegui refazê-lo por completo nesses dias.

Sobre o uso do tipo char, alteraria muito a comparação entre matrizes da digitada pela usuario e a da senha armazenada no sistema? pois utilizei int e no caso do * # utilizei a referencia ascii.

Não, desde que tenhas em conta que se fizeres print do código ASCII vais receber um número em vez do caracter correspondente, não deve haver problema.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.