Zitat Zitat von Dirk Beitrag anzeigen
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?