-
        

Ergebnis 1 bis 3 von 3

Thema: Ungewöhnliche Ausgabe eines Arrays

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2008
    Beiträge
    6

    Ungewöhnliche Ausgabe eines Arrays

    Anzeige

    Hallo,

    ich habe für ein Schulprojekt ein Programm geschrieben, dass den Asuro eine Liniefolgen läßt und alle 200ms den Weg in 2 Arrays speichert. Eins für links eins für Rechts. Wenn diese Arrays voll sind hält der Asuro an und sendet die Werte paare zum Computer. Hier speicher ich sie in nem Textfile und lass dann mit einem Delphiprogramm die Linie nachzeichnen.

    Leider sendet er nur nullen als Wegdifferenz beim Übertragen der Daten. Die Odometriesensoren laufen im Interuptbetrieb und funktionieren (wurde ausprobiert).

    Nur in diesem Programm nicht. Aber hier mal der Code:

    Code:
    /* Linie folgen und aufzeichnen
    * Programm fährt mittels helligkeitsdifferenz einer Linie nach
    * und zeichnet diese mittels der Odometriesensoren auf
    */
    
    
    #include "asuro.h"
    
    void Linie(void);
    
    int main(void)
    {  
    	int timevgl;
    	int i;
    	int k = 0;
    	int difr[200];
    	int difl[200];
    	int encoderalt[2];encoderalt[0] = 0;encoderalt[1] = 0;
    	int time = 0;
    	Init();
    	StatusLED(YELLOW);
    	EncoderInit();
    	FrontLED(ON);
    	MotorDir(FWD,FWD);
    	while(1)
    	{
    		Linie();								//Linie folgen
    		timevgl = Gettime();					//Aktuelle Zeit holen
    		if (timevgl >= time + 200)				//Wenn Zeitdifferenz größer 50ms -> speicher Wegdifferenz
    		{
    			MotorDir(FREE,FREE);	
    			difl[k] = encoder[0] - encoderalt[0];	//Wegdifferenz
    			difr[k] = encoder[1] - encoderalt[1];
    		//	PrintInt(difl[k]);SerPrint(" ");PrintInt(difr[k]);SerPrint(" ");PrintInt(k);SerPrint("\r\n");
    			encoderalt[0] = encoder[0];
    			encoderalt[1] = encoder[1];
    			k++;								//Speicherzähler
    			time = timevgl;
    		}
    		if (k == 200)							//Speicher voll
    		{
    			MotorDir(FREE,FREE);				//Anhalten und an den Rechner übertragen
    			for(i=0; i<=199; i++)
    				{
    				PrintInt(difl[i]);SerPrint(" ");PrintInt(difr[i]);SerPrint(" ");PrintInt(i);SerPrint("\r\n");
    				}
    			k = 0;
    		}
    		
    	}
    	return 0;
    }
    
    void Linie(void)
    {
    	int lineData[2];
    	LineData(lineData);
    	if (lineData[0] > lineData[1])		//links ist heller -> Asuro fährt nach rechts
    	{
    		MotorDir(FWD,FREE);
    		MotorSpeed(135,65);
    	}
    	else if (lineData[0] < lineData[1])	//rechts ist heller -> Asuro fährt nach links
    	{
    		MotorDir(FREE, FWD);
    		MotorSpeed(65,135);
    	}
    }

    mfg Hikh

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.383
    du führst 2 mal MotorDir(FREE,FREE); aus ohne irgendwo die motoren auch wieder anfahren zu lassen

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    09.10.2008
    Beiträge
    6
    Der Code ist vielleicht etwas unübersichtlich, aber das Ganze läuft in einer While-Schleife ab. Das MotorDir(Free,Free) hängt mit meinem Linienfolge code zusammen. Mein Asuro pendelt quasi auf der Linie hin und her. Die Motoren werden am Anfang der Schleife gestartet, sollen aber währen des Sendens oder des Speicherns anhalten, ansonsten Pendelt der Asuro zu weit von der Linie.

Berechtigungen

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