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 ?
Tags:
Uma rápida olhada e percebo que está usando virgula no lugar do ponto
Não está declarando as variáveisValeeu 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.
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por