-         

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 25

Thema: warum geht dieses Programm nicht?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2006
    Beiträge
    140

    warum geht dieses Programm nicht?

    Anzeige

    Ich wollte ein Prgramm für meinen ASURO schreiben, das den ASURO geradeaus fahren lässt. Wenn er gegen etwas stößt soll er kurz zurückfahren und dann wieder weiter geradeaus fahren. Aus irgendeinem Grund fährt der ASURO aber bei diesem Programm nur noch rückwärts sobald Msleep ins Spiel kommt:
    Code:
    #include "asuro.h"
    int main(void) {
    Init();
    while (1) {
    if (PollSwitch()>0) {
    StatusLED (RED);
    MotorDir(RWD,RWD);
    MotorSpeed(180,180);
    Msleep(600);}
    else{
    MotorDir(FWD,FWD);
    MotorSpeed(200,200);
    StatusLED (GREEN);}
    }
    }
    [/code][/stream]

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.10.2004
    Ort
    Rheinstetten
    Alter
    34
    Beiträge
    357
    Hast du schonmal andere Werte für das Msleep probiert? Ich weiss noch aus der Zeit, als ich mehr mit dem Asuro gemacht hab, dass die Asuro Sleep Funktionen manchmal Probleme gemacht haben (in manchen Fällen war die Angabe nicht Millisekunden, sondern Sekunden). Gib einfach mal 1 als Parameter für die Msleep funktion ein, um die Länge zu testen.

    Die andere Möglichkeit ist, dass es an deiner IF-Abfrage hängt. Hast du mal getestet, was die PollSwitch-Funktion so ausgibt? Wenn das Ergebnis immer größer 0 ist, wird der else-Teil nie erreicht.
    Unwissenheit ist ein Segen

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2006
    Beiträge
    140
    Es muss wohl an dem Msleep liegen. Ich hab mal verschiedene Werte für Msleep eingegeb: Bei 1 fährt er noch gerade aus, bei zwei auch noch aber bei 10 fährt er nur noch rückwräts.

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,
    Poste mal den Code dieser Msleep Funktion.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2006
    Beiträge
    140
    Meinst du diesen Code:
    Code:
    #include "asuro.h"
    int main(void) {
    Init();
    while (1) {
    if (PollSwitch()>0) {
    StatusLED (RED);
    MotorDir(RWD,RWD);
    MotorSpeed(180,180);
    Msleep(2);}
    else{
    MotorDir(FWD,FWD);
    MotorSpeed(200,200);
    StatusLED (GREEN);}
    }
    }

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Nein ich meine eher das:
    Code:
    void Msleep(int dauer)
    {
    	int z;
    	for(z=0;z<dauer;z++) Sleep(72);
    }
    darin wird die Funktion Sleep aufgerufen :
    Code:
    /* uses 72kHz timer => Sleep(x) = x/72kHz [sec] */
    void Sleep(unsigned char time72kHz)
    {   unsigned char ziel=(time72kHz+count72kHz) & 0x00FF;
    	while (count72kHz != ziel);
    }
    cout72kHz wird in der ISR inkrementiert :

    Code:
    SIGNAL (SIG_OUTPUT_COMPARE2)
    {
    	count72kHz ++;
    	if (!count72kHz) timebase ++;
    }
    Ich hab heute keine Lust mehr das weiter zu verfolgen, vielleicht kannst Du hier Antworten darauf finden warum es mit 2 geht und 600 nicht...

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.10.2004
    Ort
    Rheinstetten
    Alter
    34
    Beiträge
    357
    Scheint wohl wirklich die Angabe in Sekunden zu sein.
    Unwissenheit ist ein Segen

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    12.06.2005
    Ort
    Südwestdeutschland
    Beiträge
    1.062
    Blog-Einträge
    2
    Nein, Msleep bedeutet Millisekunden Sleep.

    Msleep(1000);

    warete für 1 Sekunde.

    Gruss,
    stochri

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    01.10.2006
    Beiträge
    11
    Ist Msleep() eine Standardfunktion aus der asuro.h-Headerdatei?
    In dem Handbuch vom Asuro wird nur die Funktion Sleep() vorgestellt.
    Gibt es zur Programmierung des Asuros, noch ein umfrangreichere Hilfe?

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2006
    Beiträge
    140
    @_goto
    Msleep kommt nicht bei der "normalen" bibliothek vor.

    Leider habe ich immer noch nicht verstanden warum es mit 2 geht und mit 600 nicht und wie man das Problem löst weiß ich auch noch nicht. Könnt ihr mir bitte helfen!

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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