Hallo,
ich möchte einen mpu 6050, die an den Arduino mega angeschlossen ist, dazu bringen, dass er mir die Geschwindigkeit berechnen kann.
(ja ich weiß, dass das auf dauer ungenau wird... Aber das ist in diesem Fall nicht relevant)
Da dies aber mein erstes Projekt ist was mit Programmieren zu tun hat und ich keine Vorkenntnisse besitze, komme ich nicht weiter....
Ich benutze die libary von Jeff Rowberg, die ich aber leider nicht ganz verstehe...
Mein Code lautet wie folgt:
unsigned int xReal;
int _step = 0;
int offset = 0;
float ax =0;
float ax1 = 0;
float ax2 = 0;
float da = 0 ;
int oldax = 0;
int newax = 0;
unsigned long T = 0 ;
unsigned long T11 = 0 ;
float T1 = 0 ;
float T2 = 0 ;
float dT = 0 ;
float V = 0 ;
int V1 = 0;
float dV = 0;
int index;
long mitwert =0;
long xwert;
if(_step <4501)
{
delay(1);
_step++ ;
}
else if (_step >= 4500&&_step < 5501)
{
mitwert = mitwert + aaReal.x ;
if(_step== 5500)
{
offset = mitwert/1000;
if (offset <0)
{
offset *=-1;
}
}
_step++;
}
else
{
if (aaReal.x < 0)
{
xwert = aaReal.x + offset ;
}
if (aaReal.x > 0)
{
xwert = aaReal.x - offset ;
}
ax = (16.0f/16384)*xwert ; // Beschleunigungswert
if (ax < -0,21 && ax > 0,21 ) // Schwelle
{
newax = (int)(ax *1000);
if (oldax != newax)
{
oldax = (int)(ax* 1000) ;
ax1 = ax;
T2 = millis () ;
T2 /= 1000.0f ;
da =ax1 ; // Beschleunigungsänderung
dT = T1 - T2 ; // Zeitänderung
dV = da*dT ; // Geschwindigkeitsänderung
V = V + dV ; // Endgültige Geschwindigkeit
}
else
{
T1 = millis () ;
T1 /= 1000.0f ;
}
}
else
{
V = 0 ;
}
Serial.println (V) ;
}
dies sollte eigentlich funtkionieren. Dennoch zeigt es mir unteranderem "-" Werte an, die nicht sein dürfeten.
Desshalb die Frage ist etwas an meinem Code falsch und/oder muss ich irgendetwas an der libary ändern?
Auch kann die mpu nicht wieder 0 anzeigen, sobald sie einmal aus der Schwelle getreten ist.
if (V < 0,01 && V > -0,01)
{
V = 0 ;
}
Dies wäre meine Idee wie es wieder auf 0 kommt,
allerdings weis ich nicht wo ich dies in meiner Schleife hinsetzten kann.
Bin dankbar für jede Hilfe.