- 12V Akku mit 280 Ah bauen         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 60

Thema: Einzelnen Taster auslesen.

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Anzeige

    Powerstation Test
    Wo ist die Funktion PollSwitch(), bekommst du von dort die richtige Variable für Taste?
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  2. #12
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    53
    Beiträge
    502
    Das Problem wird sein, dass du am Anfang zwar PollSwitch aufrufst, aber da wahrscheinlich noch kein Taster betätigt ist. Wenn er in die while Schleife kommt, wird der Wert von Taste nicht wieder aktualisiert. Das heißt er kommt weder in den if noch in den else if Zweig. Was mich wundert, ist allerdings warum er nicht losfährt, denn das machst du ja schon am Anfang.

    Vielleicht solltest du die Ziele erst mal nicht so hoch stecken und den Inhalt der Zweige eher klein halten.

    zB
    Code:
    while(1)
    {
    	taste = PollSwitch();
    	if (taste == 1)
    	{
    		StatusLED(RED);
    		FrontLED(ON);
    		BackLED(OFF,OFF);
    	}
    	else if (taste == 2)
    	{
    		StatusLED(RED);
    		FrontLED(OFF);
    		BackLED(OFF,OFF);
    	}
    	else if (taste == 4)
    	{
    		StatusLED(GREEN);
    		FrontLED(ON);
    		BackLED(OFF,OFF);
    	}
    	else if (taste == 8)
    	{
    		StatusLED(GREEN);
    		FrontLED(OFF);
    		BackLED(OFF,OFF);
    	}
    	else if (taste == 16)
    	{
    		StatusLED(RED);
    		FrontLED(ON);
    		BackLED(ON,ON);
    	}
    	else if (taste == 32)
    	{
    		StatusLED(RED);
    		FrontLED(OFF);
    		BackLED(ON,ON);
    	}
    }
    Und das Fahren erst später einbauen.
    Das wüste Verwenden von Funktionen bringt da nicht viel. StartSwitch und StopSwitch ergeben nach dem was ich gerade im asurowiki gelesen habe nicht wirklich Sinn.

    Ich habe zwar keinen Asuro, aber könnte mir vorstellen, dass auch mal mehr als ein Taster zur gleichen Zeit angesprochen wird. Das wird natürlich durch solche Abfragen nicht abgefangen.

    sast

    雅思特史特芬
    开发及研究

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    04.07.2009
    Alter
    31
    Beiträge
    31
    Das Problem wird sein, dass du am Anfang zwar PollSwitch aufrufst, aber da wahrscheinlich noch kein Taster betätigt ist. Wenn er in die while Schleife kommt, wird der Wert von Taste nicht wieder aktualisiert. Das heißt er kommt weder in den if noch in den else if Zweig. Was mich wundert, ist allerdings warum er nicht losfährt, denn das machst du ja schon am Anfang.
    Da hätten wir auch drauf kommen können

    Aber so sollte es dann Funktionieren.[/quote]

  4. #14
    Code:
    #include "asuro.h" 
    
    int main(void) 
    { 
       Init(); 
       int zeit; 
       unsigned char taste; 
       MotorDir(FWD,FWD); 
       MotorSpeed(120,124); 
       StatusLED(GREEN); 
       FrontLED(ON); 
       while (1){ 
       taste=PollSwitch;
       if (taste==1 || taste==2 || taste==4) 
       { 
       MotorSpeed(0,0); 
       StatusLED(RED); 
       BackLED(ON,ON); 
       MotorDir(RWD,RWD); 
       MotorSpeed(150,152); 
       for(zeit=0;zeit<1000;zeit++){        
        Sleep(72);} 
       BackLED(OFF,OFF); 
       StatusLED(GREEN); 
       MotorDir(FWD,FWD); 
       MotorSpeed(180,0); 
       for (zeit=0; zeit<500; zeit++){ 
       Sleep(72);} 
       MotorSpeed(120,124); 
       for(zeit=0;zeit<500;zeit++){        
        Sleep(72);} 
       BackLED(OFF,OFF); 
       StatusLED(GREEN); 
       MotorDir(FWD,FWD); 
       MotorSpeed(0,180); 
       for (zeit=0; zeit<500; zeit++){ 
       Sleep(72);} 
       MotorSpeed(120,121); 
       } 
       else if (taste==8 || taste==16 || taste==32) 
       { 
       MotorSpeed(0,0); 
       StatusLED(RED); 
       BackLED(ON,ON); 
       MotorDir(RWD,RWD); 
       MotorSpeed(150,152); 
       for(zeit=0;zeit<1000;zeit++){        
        Sleep(72);} 
       BackLED(OFF,OFF); 
       StatusLED(GREEN); 
       MotorDir(FWD,FWD); 
       MotorSpeed(0,180); 
       for (zeit=0; zeit<500; zeit++){ 
       Sleep(72);} 
       MotorSpeed(120,124); 
       for(zeit=0;zeit<500;zeit++){        
        Sleep(72);} 
       BackLED(OFF,OFF); 
       StatusLED(GREEN); 
       MotorDir(FWD,FWD); 
       MotorSpeed(180,0); 
       for (zeit=0; zeit<500; zeit++){ 
       Sleep(72);} 
       MotorSpeed(120,121); 
       } 
       } 
       while(1); 
       return(0); 
    }
    Das Problem wird sein, dass du am Anfang zwar PollSwitch aufrufst, aber da wahrscheinlich noch kein Taster betätigt ist. Wenn er in die while Schleife kommt, wird der Wert von Taste nicht wieder aktualisiert. Das heißt er kommt weder in den if noch in den else if Zweig. Was mich wundert, ist allerdings warum er nicht losfährt, denn das machst du ja schon am Anfang.
    Also ich habe das jetzt so gemacht, wie ihr geschrieben habt, der Erfolg ist schon mal: Er fährt.

    Aber sonst passiert nichts hier noch mal der Code von dem Ursprungsprogramm, nachdem habt ihr ja gefragt.

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();
    	int zeit;
    	MotorDir(FWD,FWD);
    	MotorSpeed(120,124);
    	StatusLED(GREEN);
    	FrontLED(ON);
    	while (1){
    	while (PollSwitch()==0) {
    	SerWrite("Hallo",5);
    	}
    	MotorSpeed(0,0);
    	StatusLED(RED);
    	BackLED(ON,ON);
    	MotorDir(RWD,RWD);
    	MotorSpeed(150,152);
    	for(zeit=0;zeit<1000;zeit++){        
        Sleep(72);}
    	BackLED(OFF,OFF);
    	StatusLED(GREEN);
    	MotorDir(FWD,FWD);
    	MotorSpeed(0,180);
    	for (zeit=0; zeit<500; zeit++){
    	Sleep(72);}
    	MotorSpeed(120,124); 
    	for(zeit=0;zeit<500;zeit++){        
        Sleep(72);}
    	BackLED(OFF,OFF);
    	StatusLED(GREEN);
    	MotorDir(FWD,FWD);
    	MotorSpeed(180,0);
    	for (zeit=0; zeit<500; zeit++){
    	Sleep(72);}
    	MotorSpeed(120,121); 
    	}
    }

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    04.07.2009
    Alter
    31
    Beiträge
    31
    Das liegt an PollSwitch, dass ist eine Funktion die du da aufruhfst, deshalb muss das
    tast = PollSwitch();
    heißen.

    Code:
    #include "asuro.h"
    
    int main(void)
    {
       Init();
       int zeit;
       unsigned char taste;
       MotorDir(FWD,FWD);
       MotorSpeed(120,124);
       StatusLED(GREEN);
       FrontLED(ON);
       while (1){
       taste=PollSwitch();
       if (taste==1 || taste==2 || taste==4)
       {
       MotorSpeed(0,0);
       StatusLED(RED);
       BackLED(ON,ON);
       MotorDir(RWD,RWD);
       MotorSpeed(150,152);
       for(zeit=0;zeit<1000;zeit++){       
        Sleep(72);}
       BackLED(OFF,OFF);
       StatusLED(GREEN);
       MotorDir(FWD,FWD);
       MotorSpeed(180,0);
       for (zeit=0; zeit<500; zeit++){
       Sleep(72);}
       MotorSpeed(120,124);
       for(zeit=0;zeit<500;zeit++){       
        Sleep(72);}
       BackLED(OFF,OFF);
       StatusLED(GREEN);
       MotorDir(FWD,FWD);
       MotorSpeed(0,180);
       for (zeit=0; zeit<500; zeit++){
       Sleep(72);}
       MotorSpeed(120,121);
       }
       else if (taste==8 || taste==16 || taste==32)
       {
       MotorSpeed(0,0);
       StatusLED(RED);
       BackLED(ON,ON);
       MotorDir(RWD,RWD);
       MotorSpeed(150,152);
       for(zeit=0;zeit<1000;zeit++){       
        Sleep(72);}
       BackLED(OFF,OFF);
       StatusLED(GREEN);
       MotorDir(FWD,FWD);
       MotorSpeed(0,180);
       for (zeit=0; zeit<500; zeit++){
       Sleep(72);}
       MotorSpeed(120,124);
       for(zeit=0;zeit<500;zeit++){       
        Sleep(72);}
       BackLED(OFF,OFF);
       StatusLED(GREEN);
       MotorDir(FWD,FWD);
       MotorSpeed(180,0);
       for (zeit=0; zeit<500; zeit++){
       Sleep(72);}
       MotorSpeed(120,121);
       }
       }
       while(1);
       return(0);
    }

  6. #16
    Man könnte jetzt so in etwa sagen, dass es funktioniert, aber asuro macht das alles jetzt öfters ohne, dass ein Taster gedrückt wurde.

    Muss man da PollSwitch() nicht öfters aufrufen.

    Ich glaube, dazu stand was in "Mehr Spass mit Asuro Band 1".

    Edit: Ich weiß aber nicht wie man, dass da einbauen könnte.

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    04.07.2009
    Alter
    31
    Beiträge
    31
    Was hat es mit dem letzten
    Code:
    while(1);
    auf sich?

    Oder was soll das bewirken?

  8. #18
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Dein Programm läuft bis hierher
    Code:
    #include "asuro.h"
    
    int main(void)
    {
       Init();
       int zeit;
       unsigned char taste;
       MotorDir(FWD,FWD);
       MotorSpeed(120,124);
       StatusLED(GREEN);
       FrontLED(ON);
       while (1){
       taste=PollSwitch();
       if (taste==1 || taste==2 || taste==4)
       {
    Das was nachher kommt wird nie aufgerufen.
    Ich habe mir diese Programmwurst nicht genau angeschaut, aber die Schleife sollte schon bis ans Ende gehen. Das while am Ende ist, wie schon erwähnt, überflüssig.
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  9. #19
    Mit dem while(1) wollte ich eigentlich nur die Vorgaben aus der Anleitung erfüllen.

    Da steht, dass wenn keine Endlosschleife am Schluss manchmal Programmteile aus alten Programmen hervortreten können.

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    04.07.2009
    Alter
    31
    Beiträge
    31
    @Hubert

    Warum sollte dort das Programm schon zu Ende sein?
    Die Klammer geht doch auf und nicht zu.

    @Asuroneuling

    Versuch einmal PollSwitch() 2x auszulesen, wegen dem C7 Kondensator.

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad