- Labornetzteil AliExpress         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: if-else + while

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    24.11.2006
    Beiträge
    40

    if-else + while

    Anzeige

    Praxistest und DIY Projekte
    Hi,
    habe mal was ganz einfaches geschrieben, aber es funktioniert nicht wie es sollte. Asuro soll zuerst checken ob er irgendwo dagegen steht, ist dies der Fall soll er stehen bleiben und eben eine Nachricht ausspucken, das macht er auch wunderbar.
    Sollte keiner der Taster gedrückt sein, soll er solange geradeausfgahren bis er irgendwo dagegen stößt, dann soll er ca. 1 s still stehen und dann rückwärts fahren.
    In wirklichkeit macht er jedoch das: Wird er eingeschaltet steht er ca 1s und fährt dann rückwärts.

    Code:
    #include "asuro.h"
    
    int main(void)
    {
       Init();
       if(PollSwitch()==0){
    		while(PollSwitch()==0){
    		MotorDir(FWD,FWD);
    		MotorSpeed(150,150);
    		StatusLED(GREEN);
    		}
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(0,0);
    	Msleep(666);
    	MotorDir(RWD,RWD);
    	MotorSpeed(100,100);
        }
       else{
    	MotorDir(BREAK,BREAK);
    	MotorSpeed(0,0);
    	StatusLED(RED);
    	SerWrite("Hinderniss!\n",11);
       }
       
       
       
    }

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    also die schleife wird einmal ausgeführt, un ddann eben nicht mehr.

    möglicherweise hilft es , wenn du poillswitch öfters aufrufst

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    kleiner nachtrag:
    schrieb vieleicht ans ende while(1)
    und der form halber auch noch return 0

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    soo wolln wir uns das mal ansehen.

    #include "asuro.h"

    int main(void)
    {
    Init();

    if(PollSwitch()==0){ Warum die if schleife? die while schleife prüft doch schon ob PollSwitch gleich null ist...

    while(PollSwitch()==0){ soweit in ordnung... solange kein taster gedrückt, fahre gerade aus
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    StatusLED(GREEN);
    }

    MotorDir(BREAK,BREAK); sooo... wenn eine taste gedrückt wurde (und die while schleife von oben abgebrochen wurde) dann halte an, warte 666millisekunden, und fahre rückwärts.
    MotorSpeed(0,0);
    Msleep(666);
    MotorDir(RWD,RWD);
    MotorSpeed(100,100);

    ab hier...

    }
    else{
    MotorDir(BREAK,BREAK);
    MotorSpeed(0,0);
    StatusLED(RED);
    SerWrite("Hinderniss!\n",11);
    }

    bis hier, dieser code wird nicht gebraucht. schliesslich sind ja schon beide möglichkeiten geschreiben worden da oben.

    } diese klammer markiert das ende der main funktion


    also lässt sich der code auf folgendes reduzieren:

    Code:
    #include "asuro.h"
    
    int main(void){
    
    Init();
    while(PollSwitch()==0){
     MotorDir(FWD,FWD);
     MotorSpeed(150,150);
     StatusLED(GREEN);
    }
    
    MotorDir(BREAK,BREAK);
    MotorSpeed(0,0);
    Msleep(666);
    MotorDir(RWD,RWD);
    MotorSpeed(100,100);
    
    }
    ausserdem gibt es noch ein problem:

    die Funktion PollSwitch() gibt immer mal wieder falsche werte zurück, deshlab sollte sie immer mehrfach abgefragt werden, bevor du damit arbeitest. du könntest z.B. am beginn deines programms (hinter init() folgendes einbauen:

    Code:
    for(int k=0;k<10;k++){
    PollSwitch();
    }
    einfügen.

    gerade am beginn eines programms sind die werte von pollswitch meistens falsch.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    dr hacken ist nur, das es einen fallunterscheidung zwischen "ist hinderniss am anfang?" und "ist hinder niss während dem fahren?" gibt
    dafür braucht man dann die if abfrage schon...

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    hmm.. also ich würd sagen das ist egal... er fährt gerade aus, bis er irgendwo gegenfährt. und wenn ein hindernis am start ist, fährt er gar nicht erst los...
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    wenn ein hinderniss am anfang ist, fährt er gleuih rückwärts.
    auserdem gibt er nicht "hinderniss" aus.

  8. #8
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Milda
    Alter
    37
    Beiträge
    4.063
    achso.. hmm...

    öhm...

    dann muss um den ganzen code (ab der while schleife bis zum ende von meinem code) eine if schleife, so wei du es auch gemacht hast... probier mal folgendes:



    #include "asuro.h"

    int main(void){

    Init();
    for(int k=0;k<10;k++){
    PollSwitch();
    }
    if(PollSwitch==0){
    while(PollSwitch()==0){
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    StatusLED(GREEN);
    }

    MotorDir(BREAK,BREAK);
    MotorSpeed(0,0);
    Msleep(666);
    MotorDir(RWD,RWD);
    MotorSpeed(100,100);


    }else{
    SerWrite("Hindernis",10);
    }

    }
    [/code]

    das sieht deinem code schon wieder verdächtig ähnlich... mmhh.. probiers mal reinzukopieren.
    Read... or die.
    ff.mud.de:7600
    Bild hier  

  9. #9
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    bei GCC 4.1.2 friist er den code nicht.
    du darfs nicht for(int k=0; ... schrieben
    es muss heise
    int k;
    for (k=0; ......

    Code:
    #include "asuro.h"
    
    int main(void){
    
    Init();
    int k;
    for(k=0;k<10;k++){
    PollSwitch();
    }
    if(PollSwitch==0){
    while(PollSwitch()==0){
    MotorDir(FWD,FWD);
    MotorSpeed(150,150);
    StatusLED(GREEN);
    }
    
    MotorDir(BREAK,BREAK);
    MotorSpeed(0,0);
    Msleep(666);
    MotorDir(RWD,RWD);
    MotorSpeed(100,100);
    
    
    }else{
    SerWrite("Hindernis",10);
    }
    
    }

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    aber funktionieren tuts trotzdem nicht.
    jetzt macht er (bei mir zumindest) gar nix ehr

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

LiFePO4 Speicher Test