Poprawne wykorzystanie funkcji atan2 na typie long. [AVR]

0

Witam,

Odczytuje dane z kompasu w taki sposób że najpierw deklaruje:

uint8_t xh, xl, yh, yl, zh, zl;

long xo, yo, zo;

a następnie wyznaczam ostateczne wartości xo,yo,zo w sposób przykładowo:

xo=xl|(xh << 8); 
yo=yl|(yh <<8);
zo=zl|(zh << 8); 

wysyłanie do terminala za pomocą funkcji
printf("x=%4ld; ",xo);
działa poprawnie natomiast pojawia się problem jeżeli chce obliczyć arctg(yo,xo)
i pojawiają się znaki zapytania w terminalu.

Co należałoby zmienić?

0

Co należałoby zmienić?

arctg zwraca typ zmiennoprzecinkowy, zatem zgadnij, dlaczego formatowanie dla intów nie działa w tym przypadku...

0

Dlatego chciałbym zamienić tą wartość na double aby skorzystać z funkcji atan2(double(x),double(y))
Jak to zrobić?

0

Chyba nie rozumiemy się: wynik tej funkcji jest liczbą zmiennoprzecinkową, dlatego aby go wyświetlić musisz zmienić format (ten %) na odpowiadający liczbom zmiennoprzecinkowym.
Dodatkowo nie mam pojęcia po co jawnie rzutujesz na double, skoro kompilator sam to zrobi tak czy siak.

1

Kompilator powinien cię nawet ostrzegać, że string formatujący nie zgadza się z argumentem funkcji printf.

double bearing = atan2(x,y)*180/M_PI;
printf("bearing=%5.1f;   ", bearing);
0
long xo, yo, zo;

double kat = atan2(yo,xo);
	
if (kat<0) kat+=2*PI;
	
kat=kat * (180/PI);
	
printf("kat=%lf \r\n ",kat);

Nie wiem czy dobrze zmieniłem, ale nadak odbieram znaki zapytania.

0
MarekR22 napisał(a):

Kompilator powinien cię nawet ostrzegać, że string formatujący nie zgadza się z argumentem funkcji printf.

double bearing = atan2(x,y)*180/M_PI;
printf("bearing=%5.1f;   ", bearing);

Zmieniłem lecz nadal to samo.

0

Zmiana kodu na:

long xo, yo, zo;
 
double kat = atan2(yo,xo);
 
if (kat<0) kat+=2*PI;
 
kat=kat * (180/PI);
 
printf("kat=%5.1f \r\n ",kat);

również nie przynosi efektów

0

Nadal przez UART nie otrzymuje poprawnych wyników

( 100, 100) = ?

Wszystko robiłem wg podanych zaleceń.

Jednak zła deklaracja makefile. Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1