[RESOLVIDO] Executar captura de um dado I2C quando pressionados 2 botões simultaneamente (altímetro digital)

Boa tarde, pessoal!

Esta é minha primeira participação aqui depois de um tempo afastado do mundo DIY....resolvi fazer um altímetro digital.

A ideia é utilizando um TTGO (ESP32) com um BMP280 eu consiga apresentar a altitude relativa ao solo.

O problema é que não estou sabendo como adquirir o dado de pressão local e inserir na variavel bmp.readAltitude(x) onde o x é o valor referencia de pressão a ser descontado. outro ponto é que para essa aquisição acontecer, gostaria que os dois botoes do TTGO (GPIO 0 e 35) fossem pressionados simultaneamente por 5 segundos.

No codigo atual eu usei o serial.print para checar resultado do delay do botão, porém segue um loop com o envio de "apertou" pela serial a cada 10 segundos independentemente do botão estar pressionado ou não.

alguem consegue me ajudar?

Segue .ino anexo

assim como descrição do circuito e no link abaixo também um video mostrando o funcionamento do altimetro com a função tft.print(bmp.readAltitude(970.9872)); calibrado pra pressão da minha casa

https://youtu.be/cUavhl_21UM

obrigado desde ja!

Exibições: 844

Anexos

Responder esta

Respostas a este tópico

Sao os botoes que ja vem na olaca de deswnvolvimento do TTGO. Elas sao ligadas no pino 0 e 35

Desculpe nao ter especificado isso

Anexos

Olá,

eu pensei que tinha este sensor aqui (BMP280), mas não o tenho.

Eu tenho é o BMP180, e portanto não tentei nem rodar o seu código.

Também não tenho este display que você está usando.

Mas fiz umas correções no seu código e criei a rotina para que ao pressionar o 2 boatões simultaneamente

após 5 segundos leia o valor do sensor e mostre no display.

A parte do sensor não modifiquei nada, somente coloquei dentro de um if.

testa ai e depois conta o resultado pra gente.

RV mineirin

alti_1_V02.ino

Muuuuito obrigado por toda ajuda! Vou colocar pra rodar assim que chegar em casa e posto aqui os resultados!

Boa RV.

Eu fiz de forma similar a você, no meu código eu "achava" que seria vantagem um "false" ao invés de um "var = millis()" constante.

Mas, depois de fazer o código para o nosso colega, e depois de ver o seu, eu comecei a me questionar o quão vantajoso é essa estratégia (várias condições para driblar esse "var = millis()" num loop constante).

Acabei fazendo um código bem simples para comparar as situações. Na primeira, tinha um "for" em que o resultado seriam vários "false". E no segundo, seria apenas um loop constante definindo o valor de uma variável como "millis()". Para comparar, utilizei um contador de  "outra_var++", e a cada segundo, ele printava o somatório (e dividia por 10, para facilitar minha visualização). Os resultados:

Situação 1 (for com 1.000.000 de "false"): Resultado de 28888 ou 28917

Situação 2 (var = millis() num loop infinito): Resultado de 24075 ou 24099

a variação gira em torno de 17% no número de ciclos.

Achei bem interessante o resultado.

Arquivo para teste.ino

== Edit == 

o teste foi num uno r3.

Boa tarde mestre!
Fiz o upload do arquivo modificado para o TTGO mas infelizmente não rodou como esperado. Da forma como está o loop acaba fazendo o tft.print a cada 5 segundos independentemente se os botões estão ou não pressionados

https://youtu.be/Q0tUdW9ynrY

Aqui o video do comportamento

e também o .ino com algumas modificações nos settings do sensor considerando uma maior amostragem/tempo e com menor tempo de standby.

Também coloquei uma variável para que entre 6000 e 5000 pés o fundo mude para a cor vermelha

Guilherme Carrijo 

Se possível, poste o ultimo código que você usou (na íntegra).

Da mesma forma, baixe este código ( Teste.ino ) e me diga o que é exibido no monitor serial.

Aqui a V4 com a implementação sugerida pelo RV para zerar com os 2 botões pressionados por 5 segundos.

No momento a função está erradica zerando o valor a cada 5 segundos independentemente se os botões estão pressionados ou não

Alti_1_v04.ino

GC, 

testa aí a versão 5 (corrigida)

RV mineirin

alti_1_V05.ino

Após a correção dos pinos, funcionou direitinho!!!

Muito obrigado pela ajuda!

Se o problema tiver sido resolvido, edita o tópico e coloca um "[resolvido]" na frente.

Brigado pela dica!!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço