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.
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;
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]);
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.