-         

Ergebnis 1 bis 8 von 8

Thema: Asuro soll den Fleck meiden

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173

    Asuro soll den Fleck meiden

    Anzeige

    Ich habe da eine sache die voll komisch ist


    und zwar

    Wenn ich über Hyper Terminal die Werte messe hat das
    weiße papier den Wert von 400-440
    der Schwarze Fleck den Wert von 10-30

    Ich möchte, dass er den schwarzen Fleck meidet und hier das Programm:


    if (data[1] > 350 ) //hab gedacht 350 ist groß genug damit er schneller reagiert oder so ist aber auch umstonst
    {
    MotorDir(FWD,FWD);
    MotorSpeed(95,90);
    }
    else
    {
    MotorDir(RWD,RWD);
    MotorSpeed(150,100);
    }
    for(z=0 ; z < 80 ; z++){Sleep(216);}



    ich habe bei ROT schon viele Werte getestet und mit keinen war ich so richtig zufrieden. Hat jemand eine Idee was ich da reinschreiben soll


    versteh ich nicht bei gewissen Werten funkt es ein par mal und dann fährt er auf den Fleck


    (Fortsetzung von Asuro soll die Helligkeitswerte über Hyper terminal ausgeben )

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    08.09.2007
    Ort
    Berlin
    Alter
    24
    Beiträge
    1.545
    Hallo,

    ich habe zwar keinen Asuro und C kann ich auch nicht, aber was mir auffällt ist:
    Die for(...)-Schleife bremst meiner Meinung nach das ganze Programm aus. Warum hast du die da?
    Außerdem wäre es interresant zu wissen, wie das restlichte (/ganze) Programm aussieht. Den der Rest sieht für mich eig gut aus.

    Wird eig data[1] automatisch neu beschrieben, oder ist das nur hier nicht zu sehen oder hast du das vielleicht vergessen?

    Gruß
    Chris

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    hallo

    die schleife soll den asuro ein stück zurück fahren lassen

    ich gebe das programm morgen rein

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    32
    Beiträge
    563
    Die for-Schleife wird bei jedem Durchlauf ausgeführt. Also auch im Vorwärtsgang. Wenn diese jetzt erreicht wird kurz bevor deine Sensoren den Fleck erfassen fährt er ein Stück drauf.

    Steck deine for-Schleife doch mal mit in die else-Anweisung.

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    Ja danke
    das kann sein
    habe gestern meinen robi nicht ausgeschaltet und jetzt sind die akkus leer

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    Wenn ich die schleife nach for stelle färht er immer RWD




    #include "asuro.h"
    #include "stdlib.h"

    int main(void)
    {
    unsigned int data[2];
    char data0[5], data1[5];
    int t=0,z=0;


    Init();
    StatusLED (GREEN);
    FrontLED (ON);


    while (1)
    {
    LineData (data);

    itoa (data[0], data0, 5);
    itoa (data[1], data1, 5);

    SerWrite (data0, 4);
    SerWrite (" links\n\r", ; //Damit sehe ich am hyper T wie groß die werte sind

    SerWrite (data1, 4);
    SerWrite (" rechts\n\r", 9);

    for (t=0; t< 50; t++)
    {
    Sleep (72);
    }

    if (data[1] > 50 )
    {MotorDir(FWD,FWD);
    MotorSpeed(105,100);}
    else for(z=0 ; z < 80 ; z++){Sleep(216);}
    {MotorDir(RWD,RWD);
    MotorSpeed(250,200);}




    }
    return 0;
    }



    Es Funkt nicht irgendwie Der will mich verarschen glaub ich



    mfg

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    12.04.2008
    Alter
    32
    Beiträge
    563
    Auch hier wird die Schleife mit der sleep-Funktion jedes Mal aufgerufen. Was ich sagen wollte ist, dass du die for-Schleife mit der Sleepfunktion in den else-Block setzt

    Code:
    if (data[1] > 50 ) 
    {
       MotorDir(FWD,FWD); 
       MotorSpeed(105,100);
    } 
    else
    {
       MotorDir(RWD,RWD); 
       MotorSpeed(250,200);
       for (t=0; t< 50; t++) 
       { 
          Sleep (72);
       } 
    }
    So fragt er den Wert ab. Wenn er über 50 liegt (kein Fleck) fährt er vorwärts. Sollte der Wert <50 liegen schaltet er die Motoren in den Rückwärtsgang. Die for-Schleife mit der sleep-Funktion hält den Rückwärtsgang einen Moment lang "fest". Ohne die Schleife würde der Asuro, sobald er vom Fleck runter ist, wieder sofort wieder in den Vorwärtsgang schalten.

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    Zitat Zitat von Arkon
    Ohne die Schleife würde der Asuro, sobald er vom Fleck runter ist, wieder sofort wieder in den Vorwärtsgang schalten.

    Hab eich auch schon probiert


    Danke für die hilfe ich gebe s mal ein und schau was er macht


    mfg

Berechtigungen

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