-         

Ergebnis 1 bis 2 von 2

Thema: Linienverfolgung, bei Kollision -> 180° Dreh und weiter mit Linienverfolgung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2011
    Beiträge
    7

    Linienverfolgung, bei Kollision -> 180° Dreh und weiter mit Linienverfolgung

    Anzeige

    hallo,
    das programm soll eigentlich wie im titel beschrieben ablaufen...
    funktioniert aber irgendwie nicht...

    bitte werft mal´nen kurzen blick drauf, wo grob der fehler stecken könnte.

    Danke!

    Code:
    #include "asuro.h"
    #define SPEED 100
    int speedLeft,speedRight;
    unsigned int lineData[2];
    int ADOffset;
    unsigned char t1, t2;
    void LineLeft (void)
    {
      speedLeft  += 5;      /* links mehr Gas geben */
      speedRight -= 5;      /* rechts weniger Gas geben */
      if (speedLeft > 200) speedLeft = 200;
      if (speedRight < 60) speedRight = 60;
    }
     
    void LineRight (void)
    {
      speedRight  += 5;     /* rechts mehr Gas geben */
      speedLeft   -= 5;     /* links weniger Gas geben */
      if (speedRight > 200) speedRight = 200;
      if (speedLeft < 60) speedLeft = 60;
    }
    void Dreh (void)
    {
    EncoderInit ();
    StatusLED(RED);
    MotorDir (BREAK,BREAK);
    GoTurn (-20,  0, 100);
    GoTurn (0  ,160, 100);
    MotorDir (FWD,FWD);
    speedLeft = speedRight = SPEED; 
    }
    void Kollision (void)
    {
    t1 = PollSwitch();
    t2 = PollSwitch();
    if (t1 == 0 && t2 == 0)         /* keine Taste */
    {
    StatusLED(YELLOW);
    }
    else
    {
    Dreh();
    }
    }
    int main(void)
    {
      int i;
     
      Init();
      FrontLED(ON);
      StatusLED(OFF);
      LineData(lineData);
      ADOffset = lineData[LEFT] - lineData[RIGHT];
      speedLeft = speedRight = SPEED;
      for (;;)
        MotorDir (FWD,FWD); 
     { 
     LineData(lineData);
        i = (lineData[LEFT] - lineData[RIGHT]) - ADOffset;
     
        if ( i >= 4)
        {
          BackLED(OFF,ON);
          LineLeft();
        }
        else if ( i <= -4)
        {
          BackLED(ON,OFF);
          LineRight();
        }
        else
        {
          BackLED(OFF,OFF);
          speedLeft = speedRight = SPEED;
        }
     
     MotorSpeed(speedLeft,speedRight);
     
     {
        Kollision();
     }
     
      }
    }
    bitte werft mal´nen kurzen blick drauf, wo grob der fehler stecken könnte.

    Danke!

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von chido72 Beitrag anzeigen
    hallo,
    das programm soll eigentlich wie im titel beschrieben ablaufen...
    funktioniert aber irgendwie nicht...

    bitte werft mal´nen kurzen blick drauf, wo grob der fehler stecken könnte....
    Was ist irgendwie nicht? Was macht er was er nicht machen soll?

    Eines das ich mit sicherheit sagen kann ist das du Odometrie verwendest wann auch die BackLEDs noch angeschaltet können sein. (BackLEDs an/auf auf Basis von i, ... wann aber ein Kollision erkannt wird geht es im Dreh-funktion und kann es die Flachen nicht mehr zählen) Das geht nicht zusammen weil die Schaltung das ausschließt.

    Zweiter:
    PHP-Code:
    int main(void)
    {
      
    int i;
     
      
    Init();
      
    FrontLED(ON);
      
    StatusLED(OFF);
      
    LineData(lineData);
      
    ADOffset lineData[LEFT] - lineData[RIGHT];
      
    speedLeft speedRight SPEED;
      for (;;)
        
    MotorDir (FWD,FWD);  // Dein for-schleife wiederholt nur dass für immer!!!
        
    {  // Diese klammern ist kein teil der for-Schleife!!!
          
    LineData(lineData);
          
    = (lineData[LEFT] - lineData[RIGHT]) - ADOffset;
     
          if ( 
    >= 4)
          {
            
    BackLED(OFF,ON);
            
    LineLeft();
          }
          else if ( 
    <= -4)
          {
            
    BackLED(ON,OFF);
            
    LineRight();
          }
          else
          {
            
    BackLED(OFF,OFF);
            
    speedLeft speedRight SPEED;
          }
     
          
    MotorSpeed(speedLeft,speedRight);
          
    Kollision();
        }


Berechtigungen

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