Kompletnie nie umiem zrobić żeby pokazywały konkretny kierunek. Jakieś pokazuje dane praktycznie nie mające większego związku z kierunkiem albo zupełnie nieliniowo. w datashit nie ma napisane jak liniowe i jakie dane wypluwa tylko wiadomo że pokazuje max 8192
#elektronika #programowanie
Z tego co znalazłem to jest tak:
Czyli musisz patrzeć kiedy dla X a kiedy dla Y są odpowiednio wartości dodanie, kiedy ujemne a kiedy zero.
(https://www.mouser.com/datasheet/2/783/BST-BMM150-DS001-01-786480.pdf)
@Trawienny gołe wyniki nie mają żadnych ujemnych wartości. Zwykłe bajty składane do 13 bitowej wartości czyli max 8192, ALE jak przyłożę neodym to siega max 4095... to też dziwne. Nie widzę czy w nocie jest gdzieś zaznaczone że któryś np ostatni MSB bit jest minusem.
@Felonious_Gru z jakiejś przyczyny ten kod mi nic nie dał. Nadal reaguje na zmianę kierunku ale nie jest to liniowe ani nic.
Jakiś śmietnik. Tak zadaptowałem w bascomie:
tu czytam i przesuam bity bo jest ich 13 użytkowych
Xmag = Xmag_msb
Shift Xmag , Left , 8
Xmag = Xmag + Xmag_lsb
Shift Xmag , Right , 3
tak samo dla osi Y
tu wzór z innej strony
Heading = Atn2(xmag , Ymag)
Atn2res = Heading * 180
Atn2res = Atn2res / Pi
Heading = Atn2res + Declin
_sec = Heading
@Fox a kalibrowałeś to cudo?
@Felonious_Gru nie wiem jak.
@Fox ja mam HMC5883 zamiast GMC5883, ale ja normalnie mialem przykladowy kod który zadziałał w arduino ide
void InitializeMagnetometer(){
Serial.println("Initializing Magnetometer");
if(!magnetometer.begin()){
Serial.println("Ooops, no HMC5883 detected ... Check your wiring!");
while(1);
}
Serial.println("Magnetometer initialized");
}
void PrintMagnetometer(){
sensors_event_t event;
magnetometer.getEvent(&event);
float heading = atan2(event.magnetic.y, event.magnetic.x);
float declinationAngle = 0.22;
heading += declinationAngle;
// Correct for when signs are reversed.
if(heading < 0)
heading += 2*PI;
if(heading > 2*PI)
heading -= 2*PI;
earth_angle = heading * 180/M_PI;
}
@redve co w tej składni oznacza heading + i heading - ?
@Fox heading to kąt jaki tworzy igla kompasu i polnoc ziemi jak rozumiem. 0 to polnoc, 180 poludnie, 90 wschod 270 zachod
Albo odwrotnie xD
@redve ale cov znaczy + i - znaczy po prostu tak się dodaje w C?
@Fox a, o tym mówisz
heading += 2*PI
oznacza "do obecnej wartości dodaj 2 pi"
analogicznie
heading -= 2*PI odejmuje od obecnej wartosci
@redve zobacz kod wyżej tak to zaadaptowałem
Zaloguj się aby komentować