[AJUDA] Codigo Menu LCD com Encoder Rotacional

Olá Galera do LDG!! 

Moro numa cidade aqui no interior  no qual enfrentamos uma escassez de água. Então resolvi para manter o controle dos meus reservatorios desenvolver um projeto para visualizar o nivel da cisterna e da caixa d'água. Pesquisando no youtube vi que era possivel usar o encoder rotacional para navegar nos menus e estou criando, mesmo sendo novato em linguagem C, com alguns exemplos estou aos poucos desenvolvendo. Fiz os testes de cada modulo separadamente e estou aos poucos inserido no codigo cada um tive sucesso no sensor ultrassonico, rtc, display e buzzer, mais estou levando uma surra com o encoder rotacional. Teste separadamente com o programa exemplo da biblioteca funciona que é uma beleza mas a inserir no codigo obter mudança de valor girando o encoder. Como esta engatinhando em Linguagem C gostaria de pedir a ajuda dos amigos para identificar o que está ocorrendo ficaria muito grato com a ajuda dos mestres!!! Em anexo, está o codigo.

Att, 

Everton J S Paula

Exibições: 713

Anexos

Responder esta

Respostas a este tópico

Sugiro que estude um projeto pronto.

Não testei esse exemplo, mas creio que esteja funcionando.

https://pandoralab.com.br/tutorial/encoder-rotativo-sistema-de-menu...

Olá Gustavo,
Obrigado pelo retorno. Sim até tinha feito o download deste skecth. Fiz alguma alterações para adequá-lo a as biblioteca do lcd que estou usando (LCD com modulo I2C) , ele funciona com como o video, só tive uma certa dificuldade em entende-lo bem para adaptar a minha realidade , aja vista ele esta usando apenas uma tela e toda a navegação é feita nela. Farei isto vou me dedicar mais no entendimento do sketch para ver se por ele faço o que quero. Desde já agradeço muito e gostaria de saber se caso tenha alguma duvida, se você pode me auxiliar, estou aprendendo C ainda e tenho algumas deficiencias que aos poucos estou sanando.

Everton

Boa noite E.

conforme citei anteriormente, baixei e analisei o seu sketch.

Acredito que o seu problema está na sua função :  posicaopot ().

Nela voce declara duas variais que só existirão enquanto a função roda.

No inicio voce definiu as váriaveis:

static int pos = 1;
int newPos = 0;

e depois as definiu novamente dentro da função posicaopot ()..

Dentro da função simplesmente use estas variaveis sem defini-las novamente:

Não gosto de postar sketch aqui na área de texto, mas como é um pequeno trecho e com fins

somente ilustrativo, vou me permitir cometer esta infração.

Dentro da função simplesmente use estas variáveis sem defini-las novamente:

está assim:

static int pos = 0;
encoder.tick();
int newPos = encoder.getPosition();
if (pos == newPos)

Deixe assim:

pos = 0;

encoder.tick();
newPos = encoder.getPosition();
if (pos == newPos)

Mesmo com  esta modificação achei meio estranha a lógica que está usando nesta função.

pos sempre = 0 e  como fica este if?

Se funcionar, de um retorno pra gente.

Rui

Olá Rui,
Em primeiro lugar obrigado por responder!! Fiz as alterações conforme suas orientações , no entanto, não obtive exito, continua do mesmo jeito. Baseado em suas dicas sua verificar se existia algum tipo de erro a mais. Por um tempo desconfiei da biblioteca RotaryEncoder por ela não ficar laranja como as demais, mas descartei apos testar com um exemplo da propria biblioteca. E funciona perfeitamente. Fui mais ousado e resolvi usar o metodo da eliminação para ver se identificava a verdadeira causa. Combinei os modulos :
ENCODER SOZINHO: FUNCIONA
ENCODER + RTC com envio de dados pela Serial> Não funciona
ENCODER+ LCD não funciona
ENCODER + RTC + DISPLYA LCD I2C NÃO FUNCIONA

Diante dos testes , a principio desconfiei da Biblioteca Wire. Testei também o ENCODER+ ULTRASSONICO com dados na serial, sem exito tambem. Por conta disto descartei o problema na wire.
E como se durante o processamento do programa fosse feito tão rápido que não dá tempo de fazer a leitura do encoder.

Estou fazendo alguns teste com o display sem modulo I2C.

Paralelo a isto pesquisei em alguns sites, alguns programas. Um deles o caro usa o recurso de interrupção para a leitura do encoder o outro uma outra biblioteca. Acredito ser uma boa opção. Ele até disponibiliza o scketch. Adaptei e rodou aqui , mas perfeitamente. Vou estudar para ver se entendo mais a fundo.Vou disponibilizar para se voce puder me ajudar. Com alguma dica ficarei muito grato,

Um abraço ,

Everton

Anexos
Olá Everton, você conseguiu realizar a implementação do LCD + Encoder + RTC funcionando corretamente???

Olá Jucélia!!

Faz uns dias que não mexo no projeto, devido a faculdade e algumas pendencias. Mas não avancei ainda nisso. Me deparei com algumas dificuldades de entendimento dos programas que estava estudando pois muitos deles utilizam um recurso de linguagem denominado MAQUINAS DE ESTADOS. É justamente isso que estou estudando no momento para assim facilitar o meu entendimento e com os programas que encontrei dos caros amigos adaptar a minha realidade. Mas estou aberto a sugestões.

Um abraço

Everton

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço