Projekte
mlade
zusammen_v4_1
compass.c
Projekte
Forum
Doku
Öffentliche Projekte
Startseite
Beispielprogramme
Projekte von anderen
Welcome
Username
Passwort
Eingeloggt bleiben
Zugangsdaten vergessen?
Registrieren
Projektverwaltung
⇨ Please choose! ⇦
——————————————————
✎ Create new project...
★ Browse existing projects...
——————————————————
⚬ MotorTest#1
⚬ C Tutorial 8#1
⚬ NIBO2 C Project#1
⚙ C Tutorial 15#1
⚬ 2010_11_18_el_test001#1
zusammen_v4_1
compass.c
compass.h
fahren.c
fahren.h
globals.c
globals.h
gyro.c
gyro.h
interpret...befehle.c
interpret...befehle.h
main.c
TWIlib.c
TWIlib.h
uart.c
uart.h
ultraschall.c
ultraschall.h
werkzeuge.c
werkzeuge.h
Project details
Compiler settings
Nachrichten
Sie sind nicht eingeloggt.
Neuigkeiten
★
NiboRoboLib 3.6
2017-01-17: Neue Version 3.6
★
NiboRoboLib 3.4.1
2016-04-16: Neue Version 3.4.1
★
Coding Tutorial
2015-11-22: Jetzt auch für den NIBO burger!
Site-Statistic
7432 private projects
378 public projects
16179195 lines compiled
58194 builds
NIBO
@
zusammen_v4_1/compass.c [read only]
#include <nibobee/robo.h> #include <string.h> #include <stdlib.h> #include <math.h> #include "compass.h" #include "TWIlib.h" #include "uart.h" #include "gyro.h" #include "werkzeuge.h" #define DECLINATION 1.9167 // dec (°)/(2*Pi)= dec (rad) float heading =0; struct MagnetometerRaw raw; struct MagnetometerScaled scaled; float calculate(){ // Auslesen nach raw //uart_puts("Start calculate\n"); eingabe_fertig=0; idx=0; len=0; data[idx] = (COMP_ADDR<<1); //Schreibadresse erzeugen idx++; len++; data[idx]=Data_Register; idx++; len++; TWITransmitData(data, len, 1); // repStart setzen um Bus-Kontrolle zu behalten delay_us(DELAY); TWIReadData(COMP_ADDR, 6, 0); // Erzeugung der Lese-Adresse findet in der Funktion statt! idx=0; delay(1); // Benötigt! Sonst ist TWIReceiveBuffer nicht richtig befüllt! Darf nicht delay_us sein weil das bei Interrupts weiter zählt! (oder größer 1500us!) raw.XAxis = (TWIReceiveBuffer[idx++] << 8); raw.XAxis |= TWIReceiveBuffer[idx++]; raw.ZAxis = (TWIReceiveBuffer[idx++] << 8); raw.ZAxis |= TWIReceiveBuffer[idx++]; raw.YAxis = (TWIReceiveBuffer[idx++] << 8); raw.YAxis |= TWIReceiveBuffer[idx++]; // Offset scaled.XAxis=((raw.XAxis+X_OFF)*10)/X_SPREAD; scaled.YAxis=((raw.YAxis+Y_OFF)*10)/Y_SPREAD; scaled.ZAxis=((raw.ZAxis+Z_OFF)*10)/Z_SPREAD; // Rotieren // delay_us(375); // 250 zu wenig! 500 geht, 375 geht vector xl_vector=get_rotate(); // uart_puts("cosY: ");ftoa(cos(xl_vector.Ry_rad),str);uart_puts(str);uart_puts(" sinY: "); ftoa(sin(xl_vector.Ry_rad),str);uart_puts(str); // uart_puts(" sinX: "); ftoa(sin(xl_vector.Rx_rad),str);uart_puts(str); uart_puts(" cosX: "); ftoa(cos(xl_vector.Rx_rad),str);uart_puts(str); //uart_puts(" Rx: "); ftoa(xl_vector.Rx_rad*180/M_PI,str); uart_puts(str); uart_puts(" Ry: "); ftoa(xl_vector.Ry_rad*180/M_PI,str);uart_puts(str);uart_putc('\n'); // float XcosY=scaled.XAxis*cos(xl_vector.Ry_rad); // float YsinYsinX=(scaled.YAxis*sin(xl_vector.Ry_rad)*sin(xl_vector.Rx_rad)); // float ZsinYcosX=(scaled.ZAxis*sin(xl_vector.Ry_rad)*cos(xl_vector.Rx_rad)); // uart_puts(" XcosY: ");ftoa(XcosY,str);uart_puts(str); uart_puts(" YsinYsinX: ");ftoa(YsinYsinX,str); uart_puts(str); // uart_puts(" ZsinYcosX: ");ftoa(ZsinYcosX,str);uart_puts(str); // float Bx=scaled.XAxis*cos(xl_vector.Ry_rad)+(scaled.YAxis*sin(xl_vector.Ry_rad)*sin(xl_vector.Rx_rad))+(scaled.ZAxis*sin(xl_vector.Ry_rad)*cos(xl_vector.Rx_rad)); // float Byneg=(scaled.ZAxis*sin(xl_vector.Rx_rad)-(scaled.YAxis*cos(xl_vector.Rx_rad))); // uart_puts(" Byneg: ");ftoa(Byneg,str);uart_puts(str); heading=atan2((scaled.ZAxis*sin(xl_vector.Rx_rad)-(scaled.YAxis*cos(xl_vector.Rx_rad))),scaled.XAxis*cos(xl_vector.Ry_rad)+(scaled.YAxis*sin(xl_vector.Ry_rad)*sin(xl_vector.Rx_rad))+(scaled.ZAxis*sin(xl_vector.Ry_rad)*cos(xl_vector.Rx_rad))); heading=heading*180/M_PI; uart_puts(" Heading: "); ftoa(heading,str); uart_puts(str); uart_puts(" Roll: ");ftoa(xl_vector.Rx_rad*180/M_PI,str); uart_puts(str); uart_puts(" Pitch: "); ftoa(xl_vector.Ry_rad*180/M_PI,str);uart_puts(str);uart_putc('\n'); return heading; } /* void auslesen_comp(){ int16_t Xmax=0; int16_t Xmin=0; int16_t Ymax=0; int16_t Ymin=0; int16_t Zmax=0; int16_t Zmin=0; int16_t Xmom=0; int16_t Ymom=0; int16_t Zmom=0; uint16_t t=0; uint8_t b=0; uint8_t idx; uint8_t len; uint8_t data[TXMAXBUFLEN]; eingabe_fertig=0; while (eingabe_fertig==0){ b=0; idx=0; len=0; data[idx] = (COMP_ADDR<<1); //Schreibadresse erzeugen idx++; len++; data[idx]=Data_Register; idx++; len++; TWITransmitData(data, len, 1); // repStart setzen um Bus-Kontrolle zu behalten delay_us(DELAY); TWIReadData(COMP_ADDR, 6, 0); // Erzeugung der Lese-Adresse findet in der Funktion statt! idx=0; Xmom = (TWIReceiveBuffer[idx++] << 8); Xmom |= TWIReceiveBuffer[idx++]; Zmom = (TWIReceiveBuffer[idx++] << 8); Zmom |= TWIReceiveBuffer[idx++]; Ymom = (TWIReceiveBuffer[idx++] << 8); Ymom |= TWIReceiveBuffer[idx++]; if (Xmom>Xmax){ Xmax=Xmom; b=1; } else if (Xmom<Xmin){ Xmin=Xmom; b=1; } else if (Ymom>Ymax){ Ymax=Ymom; b=1; } else if (Ymom<Ymin){ Ymin=Ymom; b=1; } else if (Zmom>Zmax){ Zmax=Zmom; b=1; } else if (Zmom<Zmin){ Zmin=Zmom; b=1; } if ((b==1) || (t==1000)){ uart_puts("COMP Xmax: ");itoa(Xmax,str,10);uart_puts(str); uart_puts(" Xmin: ");itoa(Xmin,str,10);uart_puts(str); uart_puts(" Zmax: ");itoa(Ymax,str,10);uart_puts(str); uart_puts(" Ymin: ");itoa(Ymin,str,10);uart_puts(str); uart_puts(" Zmax: ");itoa(Zmax,str,10);uart_puts(str); uart_puts(" Zmin: ");itoa(Zmin,str,10);uart_puts(str); uart_putc(' '); itoa(Xmom,str,10);uart_puts(str); uart_puts(" ");itoa(Ymom,str,10); uart_puts(str);uart_puts(" ");itoa(Zmom,str,10); uart_puts(str); uart_putc('\n'); b=0; t=0; } else { t++; } delay(1); } } */ /* void setScale(char *gauss){ uint8_t regValue = 0x00; float m_Scale; if(strcmp(gauss,"0.88")==0) { regValue = 0x00; m_Scale = 0.73; } else if(strcmp(gauss,"1.3")==0) { regValue = 0x01; m_Scale = 0.92; } else if(strcmp(gauss,"1.9")==0) { regValue = 0x02; m_Scale = 1.22; } else if(strcmp(gauss,"2.5")==0) { regValue = 0x03; m_Scale = 1.52; } else if(strcmp(gauss,"4.0")==0) { regValue = 0x04; m_Scale = 2.27; } else if(strcmp(gauss,"4.7")==0) { regValue = 0x05; m_Scale = 2.56; } else if(strcmp(gauss,"5.6")==0) { regValue = 0x06; m_Scale = 3.03; } else if(strcmp(gauss,"8.1")==0) { regValue = 0x07; m_Scale = 4.35; } else { uart_puts("ERROR "); uart_puts(gauss);uart_putc('\n'); } // Setting is in the top 3 bits of the register. idx=0; len=0; data[idx] = (COMP_ADDR<<1); //Schreibadresse erzeugen idx++; len++; data[idx]=ConfB_Register; idx++; len++; // Setting is in the top 3 bits of the register. data[idx]=(regValue<<5); idx++; len++; TWITransmitData(data, len, 0); // repStart setzen um Bus-Kontrolle zu behalten delay_us(DELAY); } */
Compiler results:
Werbung
Online
ashleighdarker358
charlottemcanulty895
warrenhinder6456