Projekte
mlade
zusammen_v4_1
gyro.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
7433 private projects
378 public projects
16180353 lines compiled
58212 builds
NIBO
@
zusammen_v4_1/gyro.c [read only]
#include <nibobee/robo.h> #include <math.h> #include <stdint.h> #include <util/delay.h> #include <stdlib.h> #include "gyro.h" #include "TWIlib.h" #include "uart.h" // XL Xmax: 18112 Xmin: -24054 Ymax: 20187 Ymin: -18120 Zmax: 19188 Zmin: -22148 // XL Xmax: 18869 Xmin: -18362 Ymax: 18855 Ymin: -18721 Zmax: 25549 Zmin: -18941 #define XL_X_OFF -253 #define XL_Y_OFF -67 #define XL_Z_OFF 0 #define XL_X_SPREAD 1 #define XL_Y_SPREAD 1 #define XL_Z_SPREAD 1 /* void get_xl(){ // UART RX Interrupt abschalten UCSRB &= ~(1<<RXCIE); uint8_t value; uint8_t idx; uint8_t len; uint8_t data[TXMAXBUFLEN]; for (uint8_t i=0; i<108;i++){ idx = 0; len = 0; data[idx] = (GYRO_ADDR<<1); //Schreibadresse erzeugen idx++; len++; data[idx]=i; idx++; len++; TWITransmitData(data, len, 1); // repStart setzen um Bus-Kontrolle zu behalten delay_us(DELAY); TWIReadData(GYRO_ADDR, 1, 0); // Erzeugung der Lese-Adresse findet in der Funktion statt! uart_puts("Register ");itoa(i,str,10); uart_puts(str); uart_puts(": "); itoa(TWIReceiveBuffer[0],str,16); uart_puts(str);uart_putc('\n'); } // UART RX Interrupt einschalten UCSRB |= (1<<RXCIE); uart_puts("Ende get_xl"); uart_putc('\n'); } */ vector get_rotate(){ vector rotate_vector; int16_t X=0; int16_t Y=0; int16_t Z=0; // Auslesen idx = 0; len = 0; data[idx] = (GYRO_ADDR<<1); //Schreibadresse erzeugen idx++; len++; data[idx]=0x28; idx++; len++; TWITransmitData(data, len, 1); // repStart setzen um Bus-Kontrolle zu behalten delay_us(DELAY); TWIReadData(GYRO_ADDR, 6, 0); // Erzeugung der Lese-Adresse findet in der Funktion statt! 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!) idx=0; X = (TWIReceiveBuffer[idx++] << 8); X |= TWIReceiveBuffer[idx++]; Y = (TWIReceiveBuffer[idx++] << 8); Y |= TWIReceiveBuffer[idx++]; Z = (TWIReceiveBuffer[idx++] << 8); Z |= TWIReceiveBuffer[idx++]; // normalisieren //float Xscaled=((X+XL_X_OFF)/XL_X_SPREAD); //float Yscaled=((Y+XL_Y_OFF)/XL_Y_SPREAD); //float Zscaled=((Z+XL_Z_OFF)/XL_Z_SPREAD); rotate_vector.Rx_rad=(atan2(Y,Z)); rotate_vector.Ry_rad=atan((-((X+XL_X_OFF)/XL_X_SPREAD))/(((Y+XL_Y_OFF)/XL_Y_SPREAD)*sin(rotate_vector.Rx_rad)+((Z+XL_Z_OFF)/XL_Z_SPREAD)*cos(rotate_vector.Rx_rad))); return rotate_vector; } /* void auslesen_xl(){ 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; uint8_t b=0; uint16_t t=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] = (GYRO_ADDR<<1); //Schreibadresse erzeugen idx++; len++; data[idx]=0x28; idx++; len++; TWITransmitData(data, len, 1); // repStart setzen um Bus-Kontrolle zu behalten delay_us(DELAY); TWIReadData(GYRO_ADDR, 6, 0);idx=0; Xmom = (TWIReceiveBuffer[idx++] << 8); Xmom |= TWIReceiveBuffer[idx++]; Ymom = (TWIReceiveBuffer[idx++] << 8); Ymom |= TWIReceiveBuffer[idx++]; Zmom = (TWIReceiveBuffer[idx++] << 8); Zmom |= 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("XL Xmax: ");itoa(Xmax,str,10);uart_puts(str); uart_puts(" Xmin: ");itoa(Xmin,str,10);uart_puts(str); uart_puts(" Ymax: ");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); } } */
Compiler results:
Werbung
Online
deloresgoodin345909
gabrielstallcup
warrenhinder6456