-
        

Ergebnis 1 bis 7 von 7

Thema: Asuro fahre 1Sekunde zurück

  1. #1
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1

    Asuro fahre 1Sekunde zurück

    Anzeige

    Hallo zusammen,

    hier kommt mein erster Eintrag.
    Ich beschäftige mich erst seit kurzem mit der Programmierung und wollte nun meinem Asuro beibringen:

    Fahre vorwärts, bis ein Taster gedrückt wird
    dann fahre für ein Sekunde rückwärts.

    Nun habe ich es mehrfach versucht und scheitere immer an der Zeitangabe, sprich: der Roboter fährt nach der Kollision zurück ohne anzuhalten.

    Hier kommt mein Programmierversuch:

    #include "asuro.h"

    int main(void){
    unsigned int i;

    Init();
    while(PollSwitch()==0)
    {StatusLED(GREEN);
    MotorDir(FWD,FWD);
    MotorSpeed(120,120);

    }

    if(PollSwitch()!=0)
    {StatusLED(RED);

    MotorDir(RWD,RWD);
    MotorSpeed(120,120);
    for (i=0;i>255;i++){Break(255);}
    }

    while(1);
    return 0;
    }


    Danke für eure Hilfe!!!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    25.10.2010
    Alter
    22
    Beiträge
    21
    Das heißt nicht Break(255); sondern Sleep(255)

  3. #3
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Selbst mit Sleep funktionier das nicht.

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    Willkommen im RN-Forum und Glückwunsch zum asuro.

    Wenn in deinem Programm die erste While-Schleife "while(PollSwitch()==0)" verlassen wird, läuft das restliche Programm in einem Rutsch durch bis zum finalen while(1);

    Break() ist keine Verzögerung, hier sollte Sleep() stehen. In der For-Schleife ist die Abbruchbedingung falsch: for (i=0;i>255;i++){Break(255);}

    Deshalb wird die Schleife nie betreten, also auch Break() nicht ausgeführt. (Möglicherweise wird die Schleife doch einmalig ausgeführt, weil die Abbruchbedingung erst am Schleifenende geprüft wird. Das würde aber keinen Unterschied machen, weil nach Break() die Schleife trotzdem sofort beendet und verlassen wird.)

    Nach

    MotorDir(RWD,RWD);
    MotorSpeed(120,120);

    springt das Programm deshalb direkt nach

    while(1);

    Grundsätzlich fehlt im Programm aber auch die Endlosschleife:

    PHP-Code:
    #include "asuro.h"

    int main(void)
    {
        
    unsigned int i;

        
    Init();

        while(
    1)
        {
            
    StatusLED(GREEN);
            
    MotorDir(FWD,FWD);
            
    MotorSpeed(120,120);

            while(
    PollSwitch()==0);

            
    StatusLED(RED);
            
    MotorDir(RWD,RWD);
            
    MotorSpeed(120,120);

            
    //while(PollSwitch()!=0);

            
    for (i=0;i<1000;i++)
            {
                
    Sleep(72); // 72 bei orginaler CD-Library, bei neuen Libs 36
            
    }
        }
        return 
    0;

    (Ungetestet)

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Also habe ich zuerst einmal die while (1) schleife nach oben verlegt.

    while(1){

    while(PollSwitch()==0)
    {StatusLED(GREEN);
    MotorDir(FWD,FWD);
    MotorSpeed(120,120);
    }.....

    jetzt fährt er vorwärts. Sobald ein Taster gedrückt wird, fährt er rückwärts bis der Schalter wieder =0 ist. Dann wieder von vorn =)

    Wenn ich jetzt noch die Abbruchsbedingung ändere, ändert sich jedoch auch nix.

    P.S. Danke der schnellen Antwort

  6. #6
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Das Programm von die funktioniert!!!

    Vielen Dank für die schnellen Antworten!

    Gruß WOMBATZ

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Prima.

    So könnte man testen, ob die Schleife überhaupt betreten wird, wenn schon zu Beginn die Abbruchbedingung erfüllt ist:

    PHP-Code:
    #include "asuro.h"

    int main(void)
    {
        
    unsigned int i;

        
    Init(); // StatusLED ist grün nach Init()

        
    for (i=0;i>255;i++)
        {
            
    StatusLED(YELLOW); // Schleife wurde betreten
            
    break;
        }

        for (
    i=0;i>255;i++)
        {
            break;
            
    StatusLED(RED); // Schleife wurde durch break NICHT verlassen!
        
    }

        for (
    i=0;i>255;i++)
        {
            Break(
    255); //erzeugt eine Kompilerwarnung!
        
    }

        while(
    1);
        return(
    0);

    (ebenfalls ungetestet)

    Weiterhin viel Spass mit deinem asuro.

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Motor steuern/vor-zurück
    Von Mikro93 im Forum Motoren
    Antworten: 6
    Letzter Beitrag: 07.10.2008, 19:50
  2. Antworten: 5
    Letzter Beitrag: 24.07.2007, 21:53
  3. Wie fahre ich parallel an einer Wand entlang?
    Von maetsches im Forum Software, Algorithmen und KI
    Antworten: 11
    Letzter Beitrag: 12.04.2007, 22:47
  4. DMX Konverter auf UDP und zurück
    Von Häuptling im Forum Elektronik
    Antworten: 2
    Letzter Beitrag: 11.07.2006, 15:44
  5. aus unterprogramm zurück zur hauptschleife
    Von freaky360 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 16.01.2006, 17:49

Berechtigungen

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