-
Sonnenverfolger
Hallo,
ich habe jetzt mein erstes "sinvolles" Programm geschrieben, und zwar mitdem sich der Robby (auf einer Stelle drehend) immer zur Sonne bzw. zu einer Lichtquelle hin ausrichtet. Das Problem ist, wenn ich das Programm starte, dann dreht sich der Roboter sehr schnell auf der Stelle und gibt dann eine Fehlermeldung aus -> ich weiß das das was "mit task_motionControl()" zu tun hat, aber ich kann den Fehler einfach nicht finden. Ich hoffe ihr könnt mir helfen!
Code:
#include "RP6RobotBaseLib.h"
int main (void)
{
initRobotBase();
writeString("Ich beginne in 3sec. mit dem Test der Lichtsensoren!\n");
powerON; //Motorsysteme einschalten
mSleep(3000); //3sec. warten
startStopwatch1(); //Timer 1 starten
while (true)
{
uint16_t Licht_L = adcLSL; //linker Lichtsensor
uint16_t Licht_R = adcLSR; //rechter Lichtsensor
int16_t Diff = Licht_L - Licht_R; //Differenz berechnen
if (getStopwatch1() > 300) //Timer auslesen
{
writeString("Licht Links:"); //Lichtstärke links ausgeben
writeInteger(Licht_L, DEC);
writeString(" Licht Rechts:");//Lichtsensor rechts ausgeben
writeInteger(Licht_R, DEC);
writeString(" Differenz:"); //Lichtdifferenz ausgeben
writeInteger(Diff, DEC);
writeString("\n"); //neue Zeile
if (Licht_L > Licht_R) //wenn Licht Licht links stärker ist als rechts...
{
setLEDs(0b110000); //die linke LED-Reihe einschalten
rotate(20, RIGHT, 1, true);//nach rechts drehen
}
else if (Licht_L < Licht_R) //wenn Licht Licht rechts stärker ist als links...
{
setLEDs(0b000110); //die rechte LED-Reihe einschalten
rotate(20, LEFT, 1, true); //nach links drehen
}
else if (Licht_L = Licht_R) //wenn Licht auf beiden Sensoren gleich ist...
{
setLEDs(0b001001); //die grünen LEDs einschalten
}
setStopwatch1(0); //Timer stoppen
}
task_ADC(); //ADC Funktion aufrufen
task_motionControl(); //Motor Funktion aufrufen
}
}
Für Fragen steh ich immer zur Verfügung!
Danke im Voraus!!!
-
wie lautet denn der Fehler? Dann wär's einfacher den Fehler zu finden. :-)
-
Hallo,
natürlich, hier ist der Fehler, ich hab gedacht ihr kennt den Fehlercode, aber egal, hier ist er:
Terminal cleared!
Ich beginne in 3sec. mit dem Test der Lichtsensoren!
Licht Links:912 Licht Rechts:891 Differenz:21
##### EMERGENCY SHUTDOWN #####
##### ALL OPERATIONS STOPPED TO PREVENT ANY DAMAGE! #####
### ENCODER (OR MOTOR) MALFUNCTION! ###
Affected channel:LEFT!
(s. task_motorControl() function in RP6Lib!)
You need to check Encoder/Motor assembly (or your software).
The Robot needs to be resetted now.
[RP6BOOT]
[READY]
Hoffentlich könnt ihr mir helfen, danke!
-
Hallo
Die RP6 haben gelegentlich Probleme mit den Motortreibern bzw. den Encodern. Als Einstieg kannst du mal nach "EMERGENCY AND SHUTDOWN" (ohne "") suchen und dich dann weiterhangeln...
Oder du suchst im RP6-Bereich nach Motor-/Encoderproblemen:
https://www.roboternetz.de/phpBB2/viewforum.php?f=49
Die Lösung des Problems ist meist eine Neujustage der Encoder, sehr selten ein Umtausch.
Gruß
mic
-
Hallo,
danke für die Antwort, weil der Selftest und die Beispielprogramme alle ordentlich funktionieren. Ich hab gedacht, da gibts einen ganz offensichtlichen Fehler im Programm?
Grüße
-
Oh, ich habe mich da wohl etwas unglücklich ausgedürckt?
Ich meine das es noch nicht funktioniert und hoffe das es ein Fehler im Programm ist.
Grüße
-
Die Meldung kommt von ganz unten aus dem Motion-Control. Das kannst du mit einem "normalen" Programm nicht provozieren.
-
powerON;
Der Compiler sollte hier folgendes ausgeben:
RP6Base_Move_01.c:84: warning: statement with no effect
Und genau da liegt das Problem ;)
Das ist zwar ein Makro, aber richtig aufrufen muss Du das dennoch.
MfG,
SlyD
-
Endschuldigung, ich verstehe nicht?...
-
powerON; ---> powerON();
Du musst auch immer drauf achten, was der Compiler so an Warnungen ausgibt.
Die stehen immer etwas weiter oben in der Ausgabe - verhindern aber NICHT das erfolgreiche Compilieren des Programms.
powerOn(); schaltet die Drehgeber, Stromsensoren und die Power LED an. Ist eigentlich nur zum Energiesparen gedacht wenn diese nicht gebraucht werden.
MfG,
SlyD