PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nibobee - Frage zum Motor-Regler (motpid) der Standard-Lib



cc_aero
06.11.2012, 11:26
Hallo,

vor einiger Zeit habe ich mir einen Nibobee angeschafft und ihn auch erfolgreich zu laufen gebracht.
Nun wollte ich eine erweitertes "Herumfahrprogramm" schreiben inkl. Drehungen auf bestimmen Winkel etc.

Zur Ansteuerung der Motoren habe ich den Motorregler (motpid) der Standard-Lib (v1.4) verwendet.
Die Funktion verwende ich zB um die Geschwindigkeit zu halten, den Nibobee auf eine bestimmte Position zu drehen oder eine bestimme Strecke zu fahren.

Das der ganze Programm-Ablauf richtig funktioniert, muss ich im Programm feststellen ob sich der Roboter noch in Bewegung befindet bzw. ob zB eine Drehung abgeschlossen ist.

Leider habe ich in der Standard-Bibliothek keine Funktion dazu gefunden.

Daher habe ich eine Funktion geschrieben, welche bei jeden Aufruf überprüft ob sich die Odometry-Werte innerhalb der letzten Sekunde verändert haber. Das ist jedoch nicht immer ganz zuverlässig, da die Motoren öfters erst verspätet anspringen (vorallem bei schwächern Akku und ausführen einer Drehung).

Ich hab dann nochmal die Source-Codes von der Standard-Lib durchforstet um vl irgendetwas zu finden was mir den Status des PID-Reglers mitteilen kann.

In der "motpid.c" habe ich dann eine Variable (motpid_mode) gefunden, welche den Status des PID-Reglers speichert (nicht in betrieb, Positionierung, Fahrt). Die Variable ist nicht innerhalb einer Funktion deklariert, sollte also Global (?) sein.

Leider kann ich die Variable in meinem Programm nicht abfragen (beim compilieren kommt die Fehlermeldung das die Variable nicht definiert ist).
Kann mir vl jemand eine Hilfestellung geben, wie ich mein Problem lösen kann?

radbruch
06.11.2012, 13:56
Hallo

Auf Variablen aus anderen Programmdateien kann man mit dem Schlüsselwort "extern" zugreifen:

https://www.google.de/search?q=gcc+speicherklassen

Gruß

mic