-         

Ergebnis 1 bis 3 von 3

Thema: Asuro Problem Init()

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2006
    Beiträge
    10

    Asuro Problem Init()

    Anzeige

    Habe ein kleines Programm für den asuro geschrieben, mit welchem er Abgründen und Hindernissen ausweichen kann. Das funktioniert mit diesem Quelltext auch wunderbar.
    Das Problem ist:
    Ich habe versucht die Init() außerhalb der while-schleife aufzurufen, was dazu führte, dass der asuro nur noch ausweicht. Also er fährt ständig rückwärts->kurve->rückwärts->kurve...
    Manchmal fährt er dann doch gerade aus, bis er auf ein hinderniss oder einen Abgrund trifft, und dann wiederholt er das Ausweichmanöver wieder einige Male.
    Kann mir das mal jemand erklären? Wo liegt mein Fehler im Programm?

    Quellcode:
    #include "asuro.h"
    #define STOP 50
    /*asuro kann einem abgrund mittels der liniensensoren ausweichen und hindernissen mittels der kollisionstaster*/

    int main(void)
    {

    while(1)
    {
    //***************************deklaration der variablen***************************************** ***
    unsigned int lineData[2]; //array für die daten der liniensensoren
    unsigned char running = TRUE;
    unsigned char i; //laufvariable für die for-schleifen
    unsigned char taste=0; //nimmt den wert der kollisionstaster auf
    //***************************programm*************** **********************************************
    Init();
    FrontLED(ON);
    Sleep(20); //kurze pause, damit linedata die richtigen werte erfasst
    LineData(lineData);

    PollSwitch();
    taste = PollSwitch();


    if ((lineData[0] > STOP) && (lineData[1] > STOP) && (taste==0)) //vorwärts falls kein hinderniss und kein abgrund
    {
    MotorDir(FWD,FWD);
    MotorSpeed(140,150);
    PollSwitch();
    }
    else //wenden falls abgrund oder hinderniss
    {
    MotorSpeed(0,0); //stop
    BackLED(ON,ON);
    Sleep(100);
    for(i=0; i<210; i++) //kurz zurueck
    {
    MotorDir(RWD,RWD);
    MotorSpeed(130,130);
    Sleep(100);
    }
    MotorSpeed(0,0);

    for(i=0; i<140; i++) //wenden
    {
    MotorDir(FWD,RWD);
    MotorSpeed(140,140);
    Sleep(100);
    }
    BackLED(OFF,OFF);
    }

    Sleep(100);
    }
    return 0;
    }

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    02.12.2004
    Ort
    München
    Alter
    44
    Beiträge
    198
    Ich tippe auf das klassische Problem mit den Kollisionstastern, die manchmal Werte liefern, ohne dass eine Kollision stattgefunden hat. Hier hilft mehrfaches Auslesen und Vergleichen. Es ist aber auch nicht schlimm, die Init()-Funktion mehrfach aszuführen. Warum's dann geht, kann ich auch nicht sagen.

    CU, Robin

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    03.04.2006
    Beiträge
    10
    Danke für den Tip, habe das problem gefunden.
    Waren tatsächlich dei Kollisionstaster, rufe jetzt die funktion einfach mehrfach auf, und siehe das, es geht.
    Schätze mal, dass es mit der init in der schleife ging, weil die Initialisierung des atmel ja ne kurze zeit dauert, in der sich C7 wahrscheinlich entladen konnte und somit gings.

Berechtigungen

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