-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 20

Thema: Sonnenverfolger

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2008
    Ort
    Thüringen
    Alter
    24
    Beiträge
    19

    Sonnenverfolger

    Anzeige

    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!!!

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.10.2007
    Ort
    Solingen
    Alter
    25
    Beiträge
    177
    wie lautet denn der Fehler? Dann wär's einfacher den Fehler zu finden.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2008
    Ort
    Thüringen
    Alter
    24
    Beiträge
    19
    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!

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    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:
    http://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

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2008
    Ort
    Thüringen
    Alter
    24
    Beiträge
    19
    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

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2008
    Ort
    Thüringen
    Alter
    24
    Beiträge
    19
    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

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Die Meldung kommt von ganz unten aus dem Motion-Control. Das kannst du mit einem "normalen" Programm nicht provozieren.

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    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

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2008
    Ort
    Thüringen
    Alter
    24
    Beiträge
    19
    Endschuldigung, ich verstehe nicht?...

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    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

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •