
Zitat von
Dirk
Um die Rotation zu errechnen, um von old_dir zu new_dir zu kommen, habe ich jetzt auch eine passende Formel:
Code:
// Wertebereich new_dir und old_dir: 0..359
// Ergebnis in rot! Positiv: Rechtsdrehung, negativ: Linksdrehung!
int16_t dev, rot;
dev = new_dir - old_dir;
rot = dev;
if (abs(dev) > 180 {
if (dev < 0) {
rot = 360 + dev;
}
else {
rot = -360 + dev;
}
}
Der Drehwinkel zu new_dir ist danach in rot, wobei positive Werte für Rechtsdrehung stehen und negative für Linksdrehung.
Du must also nur den Absolutwert von rot an die rotate-Funktion übergeben und je nach Vorzeichen links oder rechts drehen lassen.
Teste das mal!
habe es ein bischen (optisch) für mich angepasst 
Code:
void korrekrur_richtung(void)
// Wertebereich new_dir und old_dir: 0..359
// Ergebnis in rot! Positiv: Rechtsdrehung, negativ: Linksdrehung!
//int16_t dev, rot;
// Wertebereich new_dir und old_dir: 0..359
// Ergebnis in rot! Positiv: Rechtsdrehung, negativ: Linksdrehung!
int32_t dev, rot; //weil die new und old_dir jetz auch long sind...
dev = new_dir - old_dir; //das ist die zeile 91...
rot = dev;
if (abs(dev) > 180 //fehlt da nicht eine klammer?
{
if (dev < 0)
{
rot = 360 + dev;
}
else
{
rot = -360 + dev;
}
beim compilieren bekomme ich diese fehlermeldung:
gyro_quadrat.c|91|error: expected declaration specifiers before ‘dev’|
liegt das nur an der fehlenden(?) klammer oder an noch was anderem?
Lesezeichen