-         

+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Verzögerung mit sleep

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Ort
    Whv
    Beiträge
    89

    Verzögerung mit sleep

    Anzeige

    Hallo. Ich hab mal eine Frage. Meinen Asuro hab ich noch nicht zusammengebaut aber ich programmiere shcon fleissig, da ich schon Vorkentnisse in C hab.

    ich möchte eine Verzögerung haben. vor eine Wand fahren... dann 2-3 sek warten, dann zurückfahren.

    Verzögerungen gehen ja mit sleep. Aber es sind nur Übergabeparameter bis 256 möglich. dann wartet er längstens einige Millisekunden..

    Ist es zweckmäßig sleep in eine for-schleife zu in tegrieren und diese dann z.B. 50 mal laufen zu lassen - oder geht es noch eleganter ???

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2006
    Alter
    25
    Beiträge
    113
    Naja, du nimmst einfach die neue Asurolib von Wenk und co...
    Da gibt es die Msleep(zeitangabe in millisekunden)...

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    30.03.2006
    Alter
    29
    Beiträge
    15
    du kannst aber auch eine eigene Methode schreiben wo du das umrechnest und dann kannst du deine eigene methode verwenden ist ein tolles erfolgserlebnis wenns dann funktioniert ^^

    ich hab das grad für mich geschrieben. ich zähle auch zu den anfängern aber solche programme bauen auf ^^
    und die funktion Sleep funktioniert so :

    Sleep(x) = x / 72kHz [sec.]

    also wenn du Sleep(72) nimmst und das 1000 mal wiederholen lässt kriegst du genau eine sekunde raus

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Ort
    Whv
    Beiträge
    89

    Schon ne Idee

    hab schon ne Idee :

    Funktion definieren (pause) :

    int pause(void)
    {
    for(a=0;a<=1000;a++)
    {
    sleep(72);
    }
    }


    Jetz muss ich einfach nur im Programm schreiben
    pause() ;

    und schon hab ich ne pause *gggg*

    kann man auch gut zum blinken verwenden
    blinken() ;
    dann natürlich noch die backLED-Befehle rein..

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2006
    Alter
    25
    Beiträge
    113
    wäre es nicht schöner wenn du selbst sagen könntest wie lange er "sleepen" soll?

    int pause(zeit)
    {
    for(a=0;a<=zeit;a++)
    {
    sleep(72);
    }
    }
    Stell dir vor es ist krieg - und keiner geht hin.
    Gewinner des Roboterwettbewerbs "Zukunft durch Innovation" des Bundeslandes NRW in Aachen.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2006
    Alter
    25
    Beiträge
    113
    außerdem ist das ja unpraktisch wenn der immer wieder die schleife macht, errechne doch einfach den Sleep wert, dann hast du nicht die schleife...
    Stell dir vor es ist krieg - und keiner geht hin.
    Gewinner des Roboterwettbewerbs "Zukunft durch Innovation" des Bundeslandes NRW in Aachen.

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Ort
    Whv
    Beiträge
    89

    rechnen

    ja, kann ich wohl errechnen.. aber
    soweit ich weiß ist der höchste wert, den ich übergeben kann
    sleep(255)

    dann hab ich gerade mal 3 ms
    zu wenig

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.06.2006
    Alter
    25
    Beiträge
    113
    stimmt, 255 ist das maximale...
    Stell dir vor es ist krieg - und keiner geht hin.
    Gewinner des Roboterwettbewerbs "Zukunft durch Innovation" des Bundeslandes NRW in Aachen.

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    29
    Beiträge
    478
    Bitteschön (In meiner C++ Umgebung läuft es, sollte auch in C laufen)

    Code:
    //Deklaration der Funktionen
    void Schlafen(long milliseconds);
    int d2i(double d); // Double --> Integer
    
    void main()
    {
    Schlafen(1337); //Funktionsaufruf
    }
    
    void Schlafen(long milliseconds)
    {
    long i; //Wiederholungs-variable
    long rest; //Was bei der Division übrig bleibt
    
    i = d2i(milliseconds / 250);
    
    rest =  milliseconds - d2i(milliseconds / 250 )*250;
    
    {
    int a;
    for(a=1;a<=i;a++)
       {
        sleep(250);
       }
    }
    if(rest!=0){sleep(rest)};
    }
    
    int d2i(double d)
    {
      return d;
    }

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    13.06.2006
    Ort
    Whv
    Beiträge
    89

    ...

    also ehrlich gesagt finde ich das hier besser


    int pause(zeit)
    {
    for(a=0;a<=1000 zeit;a++)
    {
    sleep(72);
    }
    }


    (funktion natürlich im kopf als Prototypen deklarieren)

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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