-         

Ergebnis 1 bis 9 von 9

Thema: Hier ist der Wurm drin (Programmierfehler)?

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

    Hier ist der Wurm drin (Programmierfehler)?

    Anzeige

    Irgendwo ist hier der Wurm drin:
    Die Tasenrückgaben kann ich mir auf dem Hyperterminal ansehen
    K1,K2,K3 ergeben 1,2,4,8 und so weiter... - das ist alles klar.
    nun mach ich so was hier:

    #include "asuro.h"

    int main(void)
    {
    Init();
    int a,b;

    while(1)
    {
    PollSwitch();
    a=PollSwitch();
    if(a==1)
    BackLED(ON,ON);
    if(a==2)
    StatusLED(RED);
    for(b=0;b=3000;b++)
    Sleep(72);
    return 0;
    }
    }

    die if Anweisungen werden aber nicht angesprochen.. was mach ich falsch?

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    setz mal das return 0 außerhalb der while Schleife.

    Gruß m.a.r.v.i.n

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

    -...

    Danke fürt den Hinweis !
    Führt leide rimme rnoch nicht zum gewünschen Ergebnis ;(((((
    Hab mal gesehen das in einigen programmen die Abfrage
    if ( a & 0x1 ) gesehen ... ist doch im Prinzip das selbe (?)

    Ich gehe davon aus das ich irgendeas falsch mache bei der If-Abfrage

    Wie gesagt im Hyperterminal bekomm ich von den tasten schön 1,2,4,8 und so weiter heraus

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Du fragst nur einen kurzen Moment die switches ab. Nur wenn in dem Augenblick eine Taste gedrückt ist, wird ein Wert dabei rauskommen. Halte eine Taste (z.B. die, die die '1' liefert) mal _lange_ gedrückt. Dann sollte es eigentlich klappen (sofern das return aus der schleife raus ist).

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    55
    Beiträge
    534
    Wieso PollSwitch(); x 2 ?
    Das erste PollSwitch(); läuft ins Leere .. wenn in PollSwitch(); die Variablen gelöscht werden, dann kann das Zweite nie etwas werden ..
    Außerdem ists mit dem Wartebefehl unschön .. nett zum Testen ...
    Ich würde Dir raten, die Tastenabfrage (flag setzen bei gedrückt) durch einen Timer zu erledigen und im Hauptporgramm die Flags auswerten und dann löschen .. so würde Dir nix entgehen ..
    Timer-Tastenabfrage kann auch zum Entprellen genommen werden, um Mehrfachreaktionen auszulösen oder zw. kurzen und langem Tastendruck zu unterscheiden ...
    Du solltest PollSwitch(); auch mal reinstellen ....
    Ich kann mir keine Signatur leisten - bin selbständig!

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    10.07.2006
    Ort
    Bielefeld
    Alter
    42
    Beiträge
    16
    Hallo,

    das Programm bleibt in der for Schleife hängen, da keine richtige Abbruchsbedingug besteht!

    Die Schleife müsste so aussehen:

    for(b=0;b==3000;b++)

    So funktioniert es:

    Code:
    #include "asuro.h" 
    
    int main(void) 
    { 
    Init(); 
    int a,b; 
    
    while(1) 
    	{ 
    	PollSwitch(); 
    	a=PollSwitch(); 
    	if(a==1) 
    		BackLED(ON,ON); 
    	if(a==2) 
    		StatusLED(RED); 
    	for(b=0;b==3000;b++) 
    	Sleep(72); 	
    	} 
    return 0; 
    }

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.801
    eher b<=3000 oder b!=3000, sonst wird die SCHleife nie ausgeführt...
    Disclaimer: none. Sue me.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    10.07.2006
    Ort
    Bielefeld
    Alter
    42
    Beiträge
    16
    Oh ha ,

    da hat SprinterSB nicht ganz unrecht .

    Hiermal der neue Code in dem die LEDs auch wieder ausgeschaltet werden:
    Code:
    #include "asuro.h" 
    
    int main(void) 
    { 
    Init(); 
    int a,b;
     
    
    while(1) 
    	{ 
    	PollSwitch(); 
    	a=PollSwitch(); 
    	if(a==1) 
    		{
    		BackLED(ON,ON);
    		for(b=0;b!=3000;b++) 
    			Sleep(72);
    		BackLED(OFF,OFF);
    		}
    	if(a==2) 
    		{
    		StatusLED(RED); 
    		for(b=0;b!=3000;b++) 
    			Sleep(72); 
    		StatusLED(OFF);
    		}	
    	} 
    return 0; 
    }

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

    DANKEE

    DANKEE:. Fehler entdeckt. Nun läuft der Asuro einwandfreii *gggggg*
    Nun muss ich nur noch mal die Linedata aufs hyperterminal bringen..
    danke an alle !!

Berechtigungen

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