-         

Ergebnis 1 bis 9 von 9

Thema: Asuro soll vorwrts fahren-bei hinderniss-rckwrts

  1. #1
    Erfahrener Benutzer Fleiiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    sterreich
    Alter
    23
    Beitrge
    173

    Asuro soll vorwrts fahren-bei hinderniss-rckwrts

    Anzeige

    Hallo

    Ich mchte gerne, das mein Asuro vorwrts fhrt, bei einen Hinderniss ein stck zurck und dann wieder vorwrts:

    Also er soll dann vor einen Wand immer vorwrts rckwrts vorwrts rckwrts fahren.

    Mein grtes Problem liegt darin, wenn er vor der wand steht, dass er wieder zurck fhrt.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beitrge
    1.220
    Wenn du deinen Code nicht zeigst, kann dir keiner helfen, auer du erwartest eine fertige Lsung - Die zumindest ich nicht auftischen werde.

    mfG
    Markus

    PS: Ein Schlagwort zum weitersuchen: State-Machine (Zustandsautomat)

  3. #3
    Erfahrener Benutzer Fleiiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    sterreich
    Alter
    23
    Beitrge
    173
    Das ist das Programm


    #include <asuro.h>
    int main(void)
    {
    Init();
    unsigned char;
    int LANG = 0,x = 0;
    MotorSpeed(110,110);
    while( 1 )
    {
    x=x+1;

    if (x > 1000)
    LANG=LANG+1;
    if (x > 1000)
    x=0;


    {
    if (PollSwitch()>=1)
    MotorDir(BREAK,BREAK);
    else
    MotorDir(FWD,FWD);
    }

    if (PollSwitch()>=1)
    MotorDir(RWD,RWD);


    if ( LANG > 1000)
    LANG=0;

    }

    return 0;
    }




    Den roten teil bentze ich bei anderen Teilen aber hier bringt er mir nichts weil ich ja nicht wei wann asuro anstot

    Bei diesen Programm, habe ich das Problem das die dauer der Rckfahrt immer sehr kurz ist. (immer genau so lang bis der schalter wieder ausgefahren ist)

  4. #4
    Neuer Benutzer fters hier
    Registriert seit
    30.11.2006
    Beitrge
    5
    Hallo Markus,
    deine Bemerkung, dass du "nichts auftischen" wirst finde ich sehr " berheblich".
    Wenn du berhaupt in keiner Weise helfen willst - warum Antwortest du dann berhaupt?
    Ich bin auch Anfnger , und solche Antworten wie RTFM usw. motivieren ungemein.
    Ich bin schon etwas lter - wenn immer alles so gelaufen wre????

  5. #5
    Erfahrener Benutzer Fleiiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    sterreich
    Alter
    23
    Beitrge
    173
    So schlimm finde ich das nicht
    ich habe mal das Programm hereingetan es funkt aber noch nicht

    mfg

  6. #6
    Neuer Benutzer fters hier
    Registriert seit
    30.11.2006
    Beitrge
    5
    sorry,

    mfG
    oswald

  7. #7
    Erfahrener Benutzer Fleiiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    sterreich
    Alter
    23
    Beitrge
    173
    nicht so schlimm

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    20.08.2008
    Ort
    Kandel
    Alter
    29
    Beitrge
    1.220
    Zitat Zitat von h_wood44
    Hallo Markus,
    deine Bemerkung, dass du "nichts auftischen" wirst finde ich sehr " berheblich".
    Wenn du berhaupt in keiner Weise helfen willst - warum Antwortest du dann berhaupt?
    Ich will durchaus helfen - Aber: Ich bevorzuge Hilfe zur Selbsthilfe. Nach meiner Erfahrung ist der Lerneffekt am grten wenn man selbst etwas erarbeitet hat. Auerdem mache ich keine Hausaufgaben anderer (was dieses Forum weniger betrifft, aber andere dafr umso mehr).

    Jetzt zum geposteten Code:
    Der ASURO macht genau das was du ihm "gesagt" hast: Wenn ein Taster gedrckt ist, stellst du die Motoren zuerst auf BREAK und gleich danach (Sekundenbruchteile danach um genau zu sein) auf RWD. Ab dem Augenblick ab dem die Taster keinen Wandkontakt mehr haben, konfigurierst du die Motoren wieder auf FWD.

    Was du brauchst:
    Eine Zeitbasis: Momentan fhrt dein ASURO die Schleife mit maximaler Geschwindigkeit aus - Wenn du darauf basierend versuchen wrdest, ber die Anzahl der Schleifendurchlufe eine Verzgerung zu realisieren, wrde sich diese bei nderungen im Code mit ndern. Es wre daher sinnvoll, die Ausfhrungsgeschwindigkeit von vornherein zu reduzieren, auf vielleicht 10 oder 100 Iterationen in der Sekunde. Realisieren kannst du dies, indem du ans Ende der Schleife den sleep-Befehl stellst und eine entsprechende Verzgerung auswhlst.

    Zustnde: Du mchtest Dinge in Abhngigkeit von vorherigen Ereignissen ausfhren, dafr musst du dir das in irgend einer Form merken. Fr deine Wnsche gibt es zwei Mglichkeiten. Entweder du nimmst eine Zhlervariable die auf einen bestimmten Wert gesetzt wird, wenn du Tasterkontakt hast. Gleichzeitig wird der Rckwrtsgang "eingelegt". In der Hauptschleife reduzierst du die Variable in jeder Iteration um eins, ist sie bei 0 angelangt, konfigurierst du den ASURO wieder auf vorwrts.
    Was erreichst du damit? Solange die Taster auslsen, wird die Variable auf den Verzgerungswert gesetzt und gehalten. Wenn die Taster nicht mehr auslsen, wird der Wert mit jedem Schleifendurchlauf reduziert. Da die Schleife aber nur begrenzt schnell luft, kannst du aus der Zeit fr eine Schleifeniteration bestimmen, wie lange der ASURO braucht bis er bei 0 angekommen ist und auf vorwrts umstellt.

    Wenn du spter kompliziertere Programme schreiben willst,reicht dir der Trick mit der Zhlvariable vielleicht nicht mehr aus, dann kannst du noch eine Zustandsvariable einfhren. In deinem Fall gibt es (momentan) nur die Zustnde: "Vorwrts" und "Rckwrts", es knnte aber auch sein dass du vielleicht noch einen Zustand "Bremsen" einfhren mchtest ...
    Dann wird einfach im Ereignis das den Zustandswechsel auslst der neue Zustand und die Verzgerungsvariable gesetzt. Nachdem die Zeit fr den Zustand abgelaufen ist, kann dann anhand des alten Zustands entschieden werden, ob und wenn ja, welcher Zustand der Neue sein soll.

    Das war jetzt vielleicht etwas viel auf einmal, wenn ich morgen Zeit haben sollte, kann ich dir evtl. mit einem kurzen Codeschnipsel zeigen wie das ganze gemeint ist.

    mfG
    Markus

  9. #9
    Erfahrener Benutzer Fleiiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    sterreich
    Alter
    23
    Beitrge
    173
    Code:
    #include "asuro.h"
    int main (void)
    {
       Init();
    	int z;
       
       MotorSpeed(110,100);
      
      while(1)
    {
       
       
    if (PollSwitch()< 1) 
    	{MotorDir(FWD,FWD);
    		BackLED(ON,OFF);}
    else
    	{MotorDir(FWD,RWD);
    	BackLED(OFF,ON);}
    			for(z=0 ; z < 230 ; z++){Sleep(216);}
    	  
    MotorDir(FWD,FWD);	  
     
    
    	
    	
    	
    }
    
    return(0);
    }

    Das funkt jetzt vielen dank fr die Hilfe
    kenn mich voll aus

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhnge hochladen: Nein
  • Beitrge bearbeiten: Nein
  •