-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Problem mit Switch-Anweisung

  1. #1

    Problem mit Switch-Anweisung

    Anzeige

    Hallo,

    ich hab seit einem Monat einen Asuro. Das Programmieren funktioniert nach anfänglichen Schwierigkeiten schon recht gut.
    Vor kurzem wollte ich eine Switch-Anweisung testen. Doch ich versteh noch nicht ganz den richtigen Aufbau dieser Anweisung.
    Ich wollte mit den rechten Kollisionstastern den das linke Rücklicht leuchten lassen und mit den linken Tastern das rechte.
    Hier mein Programm:
    Code:
    #include "asuro.h" 
    
    
    int main(viod) 
    {
    
    Init ();
    while(1)
    {
    switch (PollSwitch)
    {case 0x07;
    BackLED(ON,OFF);
    break;
    case 0x38;
    BackLED(OFF,ON);
    break;
    }
    }
     return 0;
    }
    Kann mir jemand helfen?
    danke
    mfg

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Code:
    switch (PollSwitch) 
    {
    case 0x07:                ! Doppelpunkt ! 
                BackLED(ON,OFF); 
            break; 
    case 0x38:                ! Doppelpunkt ! 
                BackLED(OFF,ON); 
            break; 
    default:                            !  muss nicht sein, sollte man sich aber angewoehen 
            break;
    }
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Habs gerade probiert aber funktioniert nicht. Habs auch direkt kopiert:

    Code:
    #include "asuro.h" 
    
    
    int main(viod) 
    {
    
    Init ();
    
    
    switch (PollSwitch) 
    { 
    case 0x07:                
                BackLED(ON,OFF); 
            break; 
    case 0x38:                
                BackLED(OFF,ON); 
            break; 
    default:                           
            break; 
    } 
    
    
     return 0;
    }

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    case 0x07 wird dann, und NUR dann, ausgeführt wenn taster eins, zwei UND drei gleichzeitig gedrückt wurden. es reicht nicht wenn ein taster gedrückt wurde. gleiches gilt für 0x38: 0x38 entsteht nur wenn taster 4,5,6 gleichzeitig gedrückt wurden.

    war das das ziel?

    ausserdem: es heisst PollSwitch() und nicht nur PollSwitch. die klammern sind wichtig! aber eigentlich solltest du dafür eine warning vom compiler gefangen haben...

    noch was: es heisst main(void) und nicht main(viod). das sollte einen error geben.


    ausserdem muss unbedingt die letzte zeile vor "return 0;" eine endlosschleife enthalten (z.b. "while(1);" oder "for(;;);"), da sonst nach beendigung des programmes der zustand des prozessors nicht sicher ist (man nennt das "undefiniert"). da könnte es sein, dass fragmente alten codes ausgeführt werden, oder zufällige befehle ausgeführt werden.



    bitte benutze ab jetzt den code-button wenn du code einfügst. ich werde deine beiträge entsprechend ändern.
    kleinschreibung ist cool!

  5. #5
    ES FUNKTIONIERT!!!!!!!!!!!!!!! \/ \/ \/
    Danke für die schnellen Antworten.
    mfg

  6. #6
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    kein problem...
    kleinschreibung ist cool!

  7. #7
    Hallo,

    ich hätt da nochmal ne kleine Frage.
    Soweit funktioniert jetzt alles.
    Jedoch das Schalten der LED's erfolgt nur wenn ich die Tasten schon beim Einschalten gedrückt habe.
    Wie kann ich das Programm ändern so dass die BackLED's erst leuchten wenn ich die Tasten drücke und wenn ich sie loslasse erlischen.
    Hab schon mit der while-Schleife herumexperimentiert, bin aber auf keine Lösung gekommen.

    mfg

  8. #8
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.913
    ich denke, dass die while-schleife am ende des programms liegt, und deshalb der programmcode nur einmal und in wenigen millisekunden abläuft...

    poste doch nochmal deinen programmcode, so wie er jetzt aussieht.
    kleinschreibung ist cool!

  9. #9
    Hier mein Programm

    Code:
    #include "asuro.h" 
    
    
    int main(void) 
    {
    
    Init ();
    while(1);
    {
    switch (PollSwitch()) 
    { 
    case 0x01:                
                BackLED(ON,OFF);
            break; 
    case 0x08:                
                BackLED(OFF,ON); 
            break; 
    default:                           
            break; 
    } 
    }
    
     return 0;
    }

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    12.09.2007
    Alter
    23
    Beiträge
    98
    das simikolon hinter while(1) muss weg, dann müsste es eigentlich funktionieren.

    mfg liggi
    Lieber am Asuro rumschrauben als alles andere.
    Meine Homepage

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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