Volto a pedir ajuda aos companheiros, principalmente Murta e Rui que se interessaram pelo meu projeto. Recebi uma documentação bem precária do sensor(em anexo) e fiz uma sketch(em anexo) baseado nela para tentar ler. A temperatura está vindo bem, coloque a ponta do ferro de solda na entrada do sensor e ela começou a subir, porém, a pressão que deveria vir 0 porque o sensor está recebendo apenas a pressão ambiente, vem um numero absurdo 65.286. Alguém sabe me dizer se fiz algo errado?
Agradeço qualquer ajuda!
Zé Roberto
Nota: Criei novo tópico porque não estou conseguindo enviar arquivos no tópico anterior.
Tags:
olá J. Roberto.
Veja que no exemplo do PDF, a variável "dat" está como "float".
Mas vc pode manter como "unsigned long", bastando alterar o trecho "if (dat & 0x800000)" como mostro a seguir, acrescentando a linha "dat |= 0xFF800000"
Veja:
if (dat & 0x800000){
dat |= 0xFF800000;
fadc = dat-16777216.0;
} else {
fadc=dat;
}
Analisei o código rapidamente, mas acredito que fazendo apenas alteração acima, vc já irá obter o valor correto.
Explicando: provavelmente está vindo um valor próximo a zero, mas negativo (algo como -2, -3, etc). Como o valor é um inteiro sinalizado de 24 bits, vc precisa fazer a "extensão de sinal", que o código C não faz automaticamente pra vc. A linha que acrescentei faz exatamente isto.
Abrçs,
Elcids
Olá Elcids. Resolvi colocando alterando o tipo das variáveis, assim:
float fadc;
unsigned long dat;
float adc;
float p;
Zé Roberto.
Ok.
Na solução que postei, depois da "extensão de sinal", o número inteiro já estará correto em 32 bits, então não é preciso descontar o "zero" da faixa numérica.
Então o trecho de código fica assim:
if (dat & 0x800000){
dat |= 0xFF800000;
fadc = dat;
} else {
fadc=dat;
}
e claro, caso vc não queira valores negativos, basta clipar "dat" em "zero".
Abrçs
Elcids
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por