Colegas, tudo relativo a exibir teclas pressionadas numdisplay oled que encontrei é relacionado a teclados matriciais. Minha intenção é utilizar apenas 5 push-buttons e nomear cada um como 1,2,3,4,5 e cada vez que eu pressionar um qualquer, um display oled 128x32 mostra o valor. Eu conseguir fazer isso com o trecho do código em anexo, porém, se aperto o botão 1 mostra 1, se aperto botão 2 muda de 1 para 2...etc. Não consigo fazer mostrar uma sequencia, exemplo: 12 ou 145 ou 133 ou 112 ou 12345 ou 15434..etc. Por isso pergunto: Como deveria ficar este código para obter este resultado impedindo digitação de 6 números, ou seja, só pode acumular no display oled no máximo 5 números quaisquer entre 1 e 5 ? grato.

Exibições: 203

Anexos

Responder esta

Respostas a este tópico

Olá, Sérgio!


   Você não postou o sketch inteiro, mas imagino que esteja chamando teclas() do loop().

   Se for isto, cada vez que teclas é chamada, roda display.clearDisplay() o que, imagino, limpa o display.

   É muito difícil ter certeza do que está acontecendo apenas com este trecho que você enviou, mas se o meu "adivinhômetro" estiver com uma boa taxa de acertos, experimente tirar display.clearDisplay() de teclas() e tente rodar para ver o que dá.

Abraço e Sucesso!

D.T.

Olá Sergio, tudo bem?

Antes de mais nada, quando partimos para a parte da programação, existem 9999999999999 formas de fazer a mesma coisa (exceto se você estiver num projeto que exija precisão e redução de dados, ai esse número é reduzido -- mas não é seu caso). Tendo isso em mente, é muito importante que você forneça o código para que os colegas possam analisar.

Exemplos de métodos a serem feitos:

1- Criar um contador de botões pressionados. A cada novo contador, o valor anterior será multiplicado por 10 e somado ao novo número. Exemplo, iremos aperta a sequencia :"123".

Ao pressionar um botão:

Contador++;

Se contador > 1 (ValorFinal = ValorFinal*10 + ValorBotao)

Caso seja falso, ValorFinal = ValorBotao.

Logo, ao pressionar 1, ValorFinal será 1.

Se, em seguida, pressionar 2, valorFinal será 12.

Se, em seguida pressionar 3, valorfinal será 123.

Existem inúmeras formas de fazer esse processo, mas é necessário conhecer o código.

Caro Tiago, legal a sua lógica. Peço que dê uma olhada neste meu post mais recente onde incluo o código.ino

Olá Sergio, não localizei nenhum .ino.

Caso esteja tendo dificuldade, você pode colocar o código no pastebin ( https://pastebin.com/ )

Não precisa criar conta, basta subir código e depois copiar a url.

Eu anexei, ou não ?

Veja se dá certo anexando em .txt

Anexos

Tiago, conseguiu pegar o código em anexo no formato. txr ?

Eu tenho uma sexta tecla sobrando. E resumindo meu pensamento seria algo assim: Ligo o sistema mostra hora e data. Pressiono qualquer tecla (1 a 5) sai hora e data e mostra os valores das teclas no display (1,2,123,332,3455...enfim). Só 5 dígitos. Quando eu pressionar a sexta tecla, chamemos ela de tecla 'OK' volta a exibir hora e data e volta a ficar aguardando pressionar qualquer tecla numérica para o ciclo se repetir. 

D.T. Ribeiro, segue em anexo o código. Excluir o display.clearDisplay fez com que os números fossem exibidos um em cima do outro todos na mesma coluna e linha. OBS: Estou usando uma configuração 96x16 pixels no display OLED mas acho que isso não tem nada a ver com o fato de eu não conseguir escrever mais do que 1 casa decimal no display OLED. Eu gostaria de conseguir escrever 5 dígitos (1 a 5). Outra coisa que me intriga é que eu coloquei uma telainicial() que na verdade é apenas a exibição de hora e data, se eu coloco isso no setup() os segundos não contam. Exibe hora e data porém congelados. Se eu coloco telainicial() dentro do Loop aí funciona, só que neste caso quando aperto alguma tecla o relógio era para sumir dando lugar ao valor da tecla (ou das teclas), mas não some, o Loop fica loopando e mantendo relógio e tecla juntas piscando atrapalhando a visualização. Bom seria se, pressionando qualquer tecla fosse exibido valor da tecla, ou teclas, e se ocorresse inatividade nas teclas maior que, digamos 10 segundos, a teclainicial(), que é hora e data, voltasse a assumir o display oled.   

Em .txt

Anexos

Olá Sérgio!

  A técnica padrão de debug é, como já mencionou um colega aqui do LdG, a de Jack, the ripper ( Jack o estripador ).
Ou seja, ir "por partes".

   Então, vamos tentar primeiro resolver a questão da superposição de "prints" no display.

Experimenta declarar uma variável global ( fora do setup() e fora do loop() )

     char posicaoCursor = 0 ;

   Cada vez que chamar teclas(), ao invés de

      display.setCursor(0,0);

   Use

      display.setCursor(posicaoCursor++,0);

   Além de, é claro, não usar display.clearDisplay(); em teclas().

   Isto deve resolver o problema da superposição dos "prints" no display.

   Reporte resultados, por favor.

Abração.

D.T.Ribeiro

DT testei mas não funcionou. É que meu propósito não é dividir a tela e mostrar RTC e valor das teclas ao mesmo tempo, portanto não é apenas pôr o cursor em local diferente. A intenção é só mostrar o relógio RTC quando nada mais estiver ocorrendo como se fosse um descanso de tela. Ou seja, ao começar a digitação o relógio teria que desaparecer da tela. Veja como está o código atualizado.

Anexos

Olá, Sérgio!

   No código que você anexou, na rotina teclas(), você tirou a linha

         display.setTextColor(WHITE);


   e não a linha

         display.clearDisplay();

   conforme solicitei.

   Poderia ser esta a causa de não ter funcionado?

RSS

© 2022   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço