- 3D-Druck Einstieg und Tipps         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 31

Thema: Rolf Simulation-Programm Problem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    16

    Rolf Simulation-Programm Problem

    Anzeige

    Praxistest und DIY Projekte
    Hallo

    Ich hab meinen Asuro ROLF genannt ^^
    Ich bin momentan dabei, ihn etwas leben einzuhauchen indem ich erm selbständig irgenetwas machen lasse, aber da das ganze noch in seinem anfangsstadium ist... und ich erst seit kurzem in C programmiere... ist mein Quellcode auch dementsprechend schlecht ^^

    Ich möchte alles in funktionen aufteilen, die ich abrufen kann wann mir gerade lustig ist. Ich möchte auch später einen zufallsgenerator einbaun, der diese funktionen zu unterschiedlichen zeiten und zu unterschiedlichen längen ausführt. Um etwas Leben einzubringen ^^

    Somit habe ich angefangen eine funktion zu schreiben die es Rolf erlaubt eine gewisse zeit auf Kollisionskurs zu gehen... nur scheinbar gibt es probleme mit der forschleife die kontrolliert, ob rolf noch rumspielen darf...

    Der Wartemode (led rumblinken lassen) funktioniert noch

    Vielleicht kann ich auch keine funktionen in funktionen einbinden, wie gesagt, kenn mich in C überhaupt nicht aus ^^

    Hier ersteinmal der Code:
    Code:
    #include "asuro.h"
    
    void erwarten(unsigned char male);		//Rufe Wartemodus ab
    void collusion(unsigned int lang);		//Rufe Collusion ab
    
    int main(void)
    {
      Init();
    //Ab hier beginnt Rolf zu "Leben" 
    //Morgenmassage senden
      SerPrint("\r\nMuah... muss ich aufstehen?\r\n"); 
    
    //Rolf wartet erstmal ab
      erwarten(1);
    
    //Rolf startet Kollusionsfahrt 
      collusion(10000);
    
      return 0;
    }
    
    //Funktionen
    //Rolf wartet auf etwas
    void erwarten(unsigned char male) {
    unsigned int i; 
      for (i = 0; i <= male; i++)
      {
        Msleep(500);
        StatusLED(GREEN);
        Msleep(10);
        BackLED (OFF, ON);
        Msleep(500);
        StatusLED(OFF);
        Msleep(10);
        BackLED (ON, OFF);
        Msleep(500);
        BackLED (OFF, ON);
        Msleep(500);
        BackLED (ON, OFF);
    	if (i == male) BackLED (OFF, OFF); //Schalte Alles ab wenn am ende
      }
    }
    
    //Rolf vorwaerts
    void FWARD(void)
    {
        FrontLED (ON);		//Kuendige Anfahren an
        Msleep(300);
        FrontLED (OFF);
        Msleep(150);
        FrontLED (ON);
        Msleep(300);
        FrontLED (OFF);
        MotorDir(FWD,RWD); 		//Beide Motoren vorwaerts
        MotorSpeed(150,150);	//Los gehts
    }
    
    //Rolf rueckwaerts
    void RWARD(void)
    {
        MotorDir(RWD,FWD);		//Beide Motoren rueckwearts
        MotorSpeed(120,120);	//Los gehts
    }
    
    //Rolf rueckwaerts links
    void RWDL(void)
    {
        MotorDir(RWD,FWD);		//Beide Motoren rueckwearts
        MotorSpeed(120,0);		//Los gehts
    }
    
    //Rolf rueckwaerts rechts
    void RWDR(void)
    {
        MotorDir(RWD,FWD);		//Beide Motoren rueckwearts
        MotorSpeed(0,120);		//Los gehts
    }
    
    //Rolf stoppen
    void STOP(void)
    {
        MotorSpeed(0,0);
    
    }
    
    //Rolf kollusionsprogramm
    void collusion(unsigned int lang)
    {
    	unsigned char t1, t2;
    	unsigned long zeit;
    	t1 = PollSwitch();
    	t2 = PollSwitch();
    
      for (zeit = Gettime(); zeit > zeit + lang;)
      {
    
    		if (t1 == 0 && t2 == 0)		//Keine Taste gedrueckt, Rolf feahrt vorwaerts
    		    {
    			FWARD();          	//Auf gehts
    		    }
    		else if (t1 && t2 && t1 == t2)
    		    {
    		        STOP();			//Stoppen
    		      if (t1 & 0x07)		//Linke tasten beruehrt
    		      {
    		        RWDL();			//LinksRueckwaerts ausweichen
    		      }
    		      if (t1 & 0x38)		//Rechte tasten beruehrt
    		      {
    		        RWDR();			//RechtsRueckwearts ausweichen
    		      }
    		      Msleep(1000);       	//Eine Sekunde rueckwarts fahren
    		    }
      }
    }
    Würde mich für Ratschläge wirklich freuen... da ich glaube auf keinen gescheiten Pfad zu kommen ^^

    Mit freundlichen Güßen
    Hardy

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    168
    Hallo,

    also mir gefällt deine Funktion erwarten nicht ...
    Ich würde sagen das muss ein int sein, aber da bin ich mir nicht sicher ...

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    16
    nun ja, die funktion erwarten funktioniert ja... is doch egal wie man eine variabel deklariert... solangs nurn paar zahlen sind oder? schwieriger wirds wenn buchstaben oder zahlen in einer bestimmten länge dazukommen.

    Nur die collusions funktion funtkioniert nicht

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Hallo Hardest,

    Mein deutsch is leider nicht so gut. Aber ich habe nicht verstanden was das problem ist. Also was tut deiner 'Rolf' denn nicht was tun soll. Was erwartest du von ihnen wenn du siest das Rolf nicht mehr die 'Erwarten' funktion ablauft. Fährt er nun gerade aus und stoßt irgend etwas an? Was macht er? Gerne ein genaue beschreibung.

    Jedenfalls muß dus mal die FWARD und RWARD funktionen anschauen:
    void RWARD(void)
    {
    MotorDir(RWD,FWD); //Beide Motoren rueckwearts
    MotorSpeed(120,120); //Los gehts
    }
    Drehen die räder nicht gegeneinander in? Öder hast du die motoren falsch angelöted?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    16
    Hi

    Die erwarten funktion funktioniert... nur darauf soll er die void collusion(unsigned int lang) aufrufen... jedoch passiert rein gar nichts... er fährt nicht los

    Richtig, scheinbar hab ich die Rädermotoren falsch angelötet ^^

    EDIT:
    Dein Deutsch ist gut

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Hallo wieder,

    Ich denke dat is verstehe warum deine Rolf 'hängt'. Ich muß mall erkennen das ich auch wenig oder eigentlich keine schreib-erfarung habe mit C. Doch lesen geht schön bei mir.

    Deine for-schleife in die collusion funktion kan nicht weiter gehen weil die zeit nicht hochgezählt wurde.

    Code:
    void collusion(unsigned int lang) 
    { 
       unsigned char t1, t2; 
       unsigned long zeit; 
       t1 = PollSwitch(); 
       t2 = PollSwitch(); 
    
      for (zeit = Gettime(); zeit > zeit + lang; ETWAS VERGESSEN  )
    ...
    Sehe mall an wie die For-schleife in die Asuro manual beschrieben wird (bei mir auf seite 61; englisher version):

    for (i = 0; i < n; i++)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2007
    Ort
    Aachen
    Beiträge
    9

    Re: Rolf Simulation-Programm Problem

    Hallo Hardest,
    das Problem liegt in Deiner for-Schleife begraben.
    Die For-Schleife wird solange ausgeführt, wir die angegebene Bedingung erfüllt ist. Deine Bedingung
    zeit > zeit + lang
    ist nun aber leider NIE erfüllt, da immer gilt
    zeit == zeit.
    Wenn Du also - wie ich vermute - die Schleife solange ausführen willst, bis die als Parameter in die Funktion übergebene Zeitspanne überschritten ist mußt zum Beispiel folgende Konstruktion verwenden:
    Code:
    [...]
      unsigned long startzeit = Gettime();
      for ( zeit = Gettime(); zeit < startzeit + lang;)
      {
        [...]
      }
    Es gibt aber - wie immer - sicherlich noch 2 Milliarden andere Lösungsmöglichkeiten.
    Mag sein, dass es da noch weitere Probleme gibt, aber ich hab's nur überflogen.

    Gruß
    Burkhard
    Gruß
    Buggie

    Das wohlüberlegte Treffen von Entscheidungen folgt einer alten Tradition: Zuerst raten und danach die anderen dafür verantwortlich machen.
    Scott Adams

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Ich meine was Buggie schreibt

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    08.04.2008
    Beiträge
    16
    Danke ihr beiden ^^

    Werde die for-schleife dementsprechend ausbessern und abwarten was bassiert

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    10.10.2007
    Ort
    Aachen
    Beiträge
    9
    Zitat Zitat von Valen
    Deine for-schleife in die collusion funktion kan nicht weiter gehen weil die zeit nicht hochgezählt wurde.
    Sorry, das habe ich natürlich auch übersehen. Du musst natürlich an zeit bei jedem Durchlauf einen neuen Wert zuweisen, also anstelle des Inkrements in Valens Beispiel wieder zeit = Gettime().
    Insgesamt wäre hier wahrscheinlich eine while-Schleife sinnvoller. Die for-Schleife wird traditionell angewandt, wenn man eine bestimmte Anzahl Durchläufe benötigt
    Du möchtest aber die Schleife ausführen, solange eine Bedingung erfüllt ist.

    Code:
    [...]
    unsigned int startzeit = Gettime();
    while ( Gettime() < startzeit + lang )
    {
         [...]
    }
    In der Hoffnung, Dich nicht verwirrt zu haben noch viel Spass!

    Gruß
    Buggie
    Gruß
    Buggie

    Das wohlüberlegte Treffen von Entscheidungen folgt einer alten Tradition: Zuerst raten und danach die anderen dafür verantwortlich machen.
    Scott Adams

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen