-         

Ergebnis 1 bis 3 von 3

Thema: definierte Funktionen

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    16.12.2009
    Beiträge
    71

    definierte Funktionen

    Anzeige

    Hi bei experimentieren mit Funktionen habe ich folgendes gebastelt:
    Code:
     #include "asuro.h"
     int i=0;
    
    	void Wende_r(void)						//Funktion Wende rechts
    		{MotorDir(RWD,RWD);
    		MotorSpeed(100,200);
    		for(i=0;i<200;i++){Sleep(255);}
    		}
    		
    	void Wende_l(void)						// Funktion Wende links
    		{MotorDir(RWD,RWD);
    		MotorSpeed(200,100);
    		for(i=0;i<200;i++){Sleep(255);}
    		}
    int main(void)
    {
      
    
       Init(); 
       while(1)									 // Endlosschleife
       {
          StatusLED(RED);						// Status Rot
    	  MotorDir(FWD,FWD);					// Fährt geradeaus
    	  MotorSpeed(200,200);
           while((PollSwitch()>=2)&&(PollSwitch()<8)) // bei Kollisieon recht
          {
             StatusLED(GREEN);					// Status Grün
    		 MotorDir(BREAK,BREAK);				// beide Motoren Stop
    		 MotorSpeed(0,0);					// Geschwindigkeit 0
             for(i=1;i<300;i++) Sleep(255);	// kurze Pause
            Wende_l();							// oben definierte Funktion Wende links ausführen, und danach wieder geradeaus
    		
          } 
    	 
    	  while((PollSwitch()>=8)&&(PollSwitch()<=32)) // bei Kollisieon links
          {
             StatusLED(YELLOW);					// Status gelb
    		 MotorDir(BREAK,BREAK);				// beide Motoren Stop
    		 MotorSpeed(0,0);					// Geschwindigkeit 0
             for(i=1;i<300;i++) Sleep(255);	// kurze Pause
            Wende_r();							// oben definierte Funktion Wende rechts ausführen, und danach wieder geradeaus
    		
          } 
       }
       return 0; // wird nie erreicht
    }
    Mein ASURO spinnt aber bei diesem Programm. Mal fährt er geradeaus, und fängt plötzlich mit dem abarbeiten der Funktionen an, manchmal fährt er garnicht erst los, und macht gleich Quatsch.
    Mit dem Tasterausleseprogramm bekomme ich korrekte Werte;1;2;4;8;16;32
    Woran kanns liegen???

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    33
    Beiträge
    2.380
    die funktion pollswitch sollte grundsätzlich zwar mehrfach aufgerufen werrden, aber dann nicht in unterschiedlichen vergleichen!

    machs lieber so, dass du 4 mal pollswitch aufrufst, und wenn 4 mal dasserlbe rauskommt, speicher den wert in eine variable und vergleich mit dsieser ... stichwort "prellen" an dieser stelle ^^

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Genau, jede anruf von PollSwitch() ist einer taster messung. Die 2 anruffen im begin von jedem while-schleife werden separat ausgefuhrt. Und könnte im prinzip 2 verschiedene werten geben. In diesen situation wird den && stellung nicht das gewunschte effekt haben.

    Weil die PollSwitch messung relatief empfindlich ist fur elektrische störungen von dem motoren, macht er diesen paranoiden bewegungen.

    Code:
    char taster;
    ...
    
    taster=PollSwitch();   /* Erste PollSwitch messung  */
    While (taster==PollSwitch())   /* Zweiter Messung und gleichheit-test -> schleife trit nur in bei 'stabiele' taster zustand */
    {
    ...
    /* Mach vielleicht etwas mit den taster-wert */
    ...
    }
    ...

Berechtigungen

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