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
obrigado desde ja!
Tags:
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
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
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.
== 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
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
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
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!!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por