Tenho que colocar a seguinte equação no arduino:

y =( 6^(-12))*(x^4) - (5^(-8))*(x^3)) + (0,0002*(x^2)) - (0,2926*x) + 172,74

onde X é o valor que o arduino vai colocar para me fornecer o valor de y

X é o valor de uma entrada analógica e varia de 1500 a 5000.

A parte do código que corresponde a equação fiz assim:

a=pow(6,-12);
f = pow(x,4);
h = a*f;
b = pow(5,-8);
g = pow(x,3);
p = b*g;
c = (0.0002*pow(x,2));
d = (0.2926*(x));
e = 172.74;

y= (h-p+c-d+e);

Mas não ta dando o resultado esperado. Alguém sabe qual é o problema ?

A variáveis a,f,h,b,g,p,c,d,e,y parametrizei como do tipo long, mas seria bom deixar elas

com virgula tambem. float não posso usar pois o numero é muito grande, existe alguma outro parametro que eu possa usar ?

 

Exibições: 2059

Responder esta

Respostas a este tópico

Uma rápida olhada e percebo que está usando virgula no lugar do ponto

Não está declarando as variáveis
Recomendo aprender programação básica da linguagem C.
Boa sorte,
'Eiju

Valeeu cara, realmente havia me esquecido das virgulas.

Meu programa não ta completo ai porque o pessoal reclama. mas as variaveis estão declaradas como long.

Mas ainda tá dando valores não esperados na equação, se puder dar uma olhada de novo agradeço. 

Ewerton, boa tarde!

Aparentemente o cálculo está correto mas, de acordo com o manual da função pow, você deve usar o tipo double para definir todas as variáveis. Caso contrário, o resultado não será muito exato. O tipo long é inteiro e, portanto, vai arredondar muito.

Qual o problema de usar double?
Você disse que o número fica muito grande porque ele vai apresentar muitas casas decimais, correto?

Isso não é problema, pois você pode formatar o resultado final para apresentar o número de casa decimais desejado.

O importante é que apresente o resultado correto, pois a apresentação pode ser trabalhada.

Obs: É boa prática de programação, colocar um ponto nas constantes float. Isso vai deixar mais rápido o processamento devido a redução das conversões (cast automático)

Por exemplo:

f = pow(x,4.0) em vez de f = pow(x,4)

Faça os acertos e depois informe o resultado esperado e o que você queria.

Se possível carregue o sketch como anexo no post.

https://www.arduino.cc/en/Reference/Pow

Alem da dica do double e da formatação das constantes (4.0 em vez de 4) recomendo fazer por partes.

Faça seu pacote de calculos e imprima todas as intermediarias (mande para o monitor serial).

Aih com uma calculadora refaça cada parte e compare os resultados intermediarios. Assim vc entende exatamente onde está diferente.

Mas acho que tá certo, so falta o double mesmo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço