- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: PollSwitch(); funktionirt nicht mit if

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.11.2007
    Beiträge
    152

    PollSwitch(); funktionirt nicht mit if

    Anzeige

    E-Bike
    Ich habe ein großes Problem nämlich wenn ich ein Programm schreibe das ein if (PollSwich()...){ enthält funktionirt es nicht.
    So sieht mein Programm im ganzen aus
    Code:
    #include "asuro.h"
    
    int main(void){
    	Init();
    	unsigned char ta;
    	while(1){
    	ta=PollSwitch();
    	if(ta>0){
    		StatusLED(RED);
    	}
    	else{
    	StatusLED(GREEN);
    	}
    	}
    	return 0;
    	}
    Wenn ich aller dings einen Taster drücke passiert gar nichts.
    Und wenn ich das Programm so schreibe funktionirt es
    Code:
    #include "asuro.h"
    
    int main(void){
    	Init();
    	while(1){
    	while(PollSwitch()==0){
    	MotorDir(FWD,FWD);
    	MotorSpeed(120,120);
    	}
    	MotorSpeed(0,0);
    	}
    	return 0;
    }
    Das kurze Programm funktionirt so aber ein Langes kann so ja nicht funktioniren.
    [schild=14 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Roboter sind cool[/schild]

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    hmm, ich glaube es könnte daran liegen, dass du die variable unsigned char ta nicht auf null gesetzt hast, versuch mal:

    unsigned char ta=0;

    und dann ruf einmal die funktion pollswitch mehr mals auf, also so etwa:

    PollSwitch();
    Sleep(255);
    PollSwitch();
    Sleep(255);
    PollSwitch();
    Sleep(50);
    PollSwitch();
    Sleep(50);

    und dann schreibst du:

    PollSwitch() = ta;

    ich glaube, dass müsste eig nun funktionieren, also bei mir funktioniert es auf jeden fall.

    mfg hans

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    384
    Hi,

    also die Pollswitch funktion mehrmal aufzurufen ist richtig und muss eigentl. auch gemacht werden, aber die Sleep funktion dazwischen brauchst du eigentlich nicht. So geht es etwas eleganter:
    Code:
       a=PollSwitch();
    	b=PollSwitch();
    	
        
    	   if ((a==b)&&(b>0))
         
        {mach_irgendwas()}
    mfg
    Erik

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    ja da hast du eig recht, bin eben noch am andang meiner programmierkarriere und bin im mom noch glücklich, wenn er überhaupt fährt^^

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    384
    Solange es funktioniert und er das macht was er soll ist es ja egal wies aussieht.

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    31.12.2007
    Beiträge
    131
    ja genau so seh ich es auch so, allerdings versuche ich immer mehr allgemeiner zu programmieren, mit der zeit funktioniert es immer besser

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.11.2007
    Beiträge
    152
    a=PollSwitch();
    b=PollSwitch();


    if ((a==b)&&(b>0))

    {mach_irgendwas()}
    Soo das habe ich in meine Programm eingesetzt. Das sieht jetzt so aus
    Code:
    #include "asuro.h"
    
    int main(void){
    	unsigned char a;
    	unsigned char b;
    	Init();
    	a=PollSwitch(); 
    	b=PollSwitch();
    	while(1){
    	if ((a==b)&&(b>0))
    	{
    	BackLED(ON,OFF);
    	}
    	
    	else{
    	BackLED(OFF,ON);
    	}
    	BackLED(OFF,OFF);
    	}
    	return 0;
    	}
    Eigentlich sollte jetzt die Rechte LED leuchten und wenn ich eine Taste drücke sollte die Linke LED leuchten. Doch esleuchtet die Rechte duchgehend und die Linke glimmt.
    Wo liegt der Feler? ich kann ihn nicht finden.
    [schild=14 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Roboter sind cool[/schild]

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    384
    Nimm mal den letzten Befehl, laso BackLED(OFF,OFF) raus vllt klappts dann.

    mfg
    Erik

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    30.11.2007
    Beiträge
    152
    NEE Klappt immer noch nicht. Ist eigentlich auch egal, Weil der Befehl nur die LEDs aus schaltet wass sonstnach der Warteschleife passieren würde. also ist es egal ob er da steht oder nicht.
    [schild=14 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]Roboter sind cool[/schild]

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.11.2006
    Ort
    Hamburg
    Alter
    32
    Beiträge
    384
    Also ich hab den Fehler gefunden eigentlich recht einfach. Du hast nämlich nur einmal ganz am Anfang die Pollswitch funktion, und das auch nur einmal,
    d.h. wenn dann keine Taste gedrückt war hat er das für das ganze programm genommen. Hier die berichtigte Variante, ich hab einfach nur die Pollswitch funktionen mit in di Schleife genommen.

    Code:
    #include "asuro.h"
    
    int main(void){
       unsigned int a;
       unsigned int b;
       
       Init();
       
       
       while(1)
       {
    	   a=PollSwitch();
    	   b=PollSwitch();
    	   
    	   if ((a==b)&&(b>0))
    	   {
    			BackLED(ON,OFF);
    	   }
    	   
    	   else
    	   {
    			BackLED(OFF,ON);
    	   }
    	   
       }
     return 0;
       }
    mfg
    Erik

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests