- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: um einen Gegenstand herum/ Odometrie

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2006
    Beiträge
    11
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Code:
    #include "asuro.h"
    	
    
    int main(void) {
    	Init ();
    
    	int cm90=16.5;
    	int s1=10;
    	int s2=20;
    	int i, t;
    	
    #define vor {while (encoder[LEFT]<=s2*3){MotorDir(FWD,FWD);MotorSpeed(160,160);}};
    #define zurück {while (encoder[LEFT]<=s1*3){MotorDir(RWD,RWD);MotorSpeed(160,160);}};
    #define links {while (encoder[LEFT]<=cm90*3){MotorDir(FWD,FWD);MotorSpeed(0,160);}};
    #define rechts {while (encoder[LEFT]<=cm90*3){MotorDir(FWD,FWD);MotorSpeed(160,0);}};
    	
    	while (1)
    	{
    		for(i=0;i<10;i++)
    		{
    			PollSwitch();
    		} 
    		t=PollSwitch();
    		Encoder_Init();
    		if (t>=1) {
    			
    			zurück;
    			links;
    			vor;
    			rechts;
    			vor;
    			rechts;
    			vor;		
    		} else {
    			MotorDir(FWD,FWD);
    			MotorSpeed (160,160);
    		}
    	}
    	return 0;
    }
    ich hab jetzt par sachen umgeschrieben, damit es kompakter aussieht.


    Hm... und s1 und s2 sollte für die strecken zählen

    werden die encoder werte beim nächsten encoder[LINKS] zurückgesetzt? wenn ja, dann hab ich meinen fehler gefunden

  2. #12
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    38
    Beiträge
    4.066
    hmm... du beziehst dich immer nur auf den linken encoder. dieser wird bei einer drehung anch links allerdings kaum bewegt. vielleicht sollte im define (rechts) deshalb mit encoder[right] gearbeitet werden.

    encoder[left] bzw. encoder[right] sind variablen (genauer: bilden ein array). diese enthalten einen wert, den man abfragen kann, zurückgesetzt werden sie dadurch nciht. zurücksetzen kannst du sie nur durch EncoderSet(0,0);
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    01.12.2006
    Beiträge
    11
    aha
    danke
    jetzt hab ich endlich meinen fehler gefunden... der einzige fehler ist wohl noch, das ich jetzt abends es nicht ausprobieren kann, weil die werte durch tischlampe und schatten usw. zu unterschiedlich sind

    mfg RD

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    21.03.2004
    Ort
    73061 Ebersbach
    Alter
    56
    Beiträge
    52
    zurücksetzen kannst du sie nur durch EncoderSet(0,0);
    hat dalmator geschrieben.

    das ist glaube ich der schlüssel. setze mal vor den if encoder ein encoderset(0,0) damit der encoder neu von null an zählen kann.

    alernativ wäre den encoderwert in eine variable zwischenspeichern und dann mir diesem wert + s1*3 oder was immer da sein sollte zu vergleichen

    in der art etwa

    int iLeftencoder= encoder[LEFT]; //Startwert merken

    while (encoder[LEFT]<=iLeftencoder+(cm90*3))
    {
    MotorDir(FWD,FWD);
    MotorSpeed(160,0);
    }


    gruß
    downad

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

Labornetzteil AliExpress