Trabalhando com o retorno da função getkey()


#1

Bom dia.
Estou com um problema que acredito ser fácil de resolver.
Uso um keypad 4x4 e um display 16x2.
Armazenando o retorno do getKey() numa variavel char.

char m_opcao = customKeypad.getKey();

Exemplo:
A pessoa digita no teclado o número “2”, aparece no display o número “2”

lcd.print(m_opcao)

Até aqui tudo beleza.
Aí eu preciso trabalhar com o valor digitado mas o programa não está respeitando a condição " if " é como se interpretasse que a opção “2” não fosse “2” e nem 2. (nem string nem inteiro)
(Nem if, nem case, inclusive tentei usar como ponteiro num array e não funciona também.
Exemplo:
m_linha[1] = “Descricao 1”
m_linha[2] = “Descricao 2”
m_linha[3] = “Descricao 3”

lcd.print(m_linha[m_opcao]);

Deveria exibir no display “Descricao 2” mas não exibe nada…
Não sei se me fiz entender, resumindo preciso utilizar o número da opção escolhida mas não estou conseguindo.


#2

Parece que o problema está no modo como vc declarou as variavies e como vc as está chamando mas precisaria ver o codigo completamente tem como vc postar o código inteiro para fazer uma analize?
Abraço;


#3

Acabei de descobrir que o retorno da getKey() na verdade não é o valor exibido e sim o valor + 48 (?), consegui resolver diminuindo 48. Ao digitar “1” no keypad o valor do retorno é 49 apesar de exibir ‘1’ no display, ‘2’ é 50 e assim por diante, ainda não fui atrás para descobrir o porquê disso.
Sou programador há anos, (cobol, clipper, delphi) mas C conheço pouco, estou iniciando no Arduíno por hobby, outra coisa que não sabia e que para mim foi uma “pegadinha” foi o fato de usar “if x=3” ao invés de “if x==3” …
Abaixo parte do código como está funcionado 100% agora.

         Key2 = customKeypad.getKey();  // teclado "2"
         if (Key2 != NO_KEY)
            {
            lcd.print(Key2);    // exibe "2" no display
            if **((Key2>48) and (Key2<53)) { // aceita apenas 1,2 ou 3**
               i++; }
            else {
               lcd.setCursor(7,1); }

            delay(500);
            }
         }
       lcd.clear();      
       lcd.setCursor(0,0);
  
       m_jogo = int(Key2) - 48;   <<<<<<<<====== aqui diminuo 48 e fica tudo certo

       lcd.print(m_linha1[m_jogo]);

#4

Funcionando é o que importa!

Abraço;


#5

@Maivo_Halberstadt o retorno da função getkey é o código decimal (ou hexa se preferir) que representa o caracter que teclou.

Nada mais do que um código da tabela ASCII.

Letras e números, além de outros caracteres, são representados nessa tabela.

Abraços.


#6

Então 1 seria 1 … e não 49.
Conheço ascii,
Mas agradeço a atenção de qualquer forma. Ficou resolvido diminuindo 48 e como estou desenvolvendo por hobby já segui a diante.
Uma hora com tempo vou atrás disso por curiosidade.
Valeu.