-         

Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 60

Thema: Einzelnen Taster auslesen.

  1. #1

    Einzelnen Taster auslesen.

    Anzeige

    Also ich habe ein kleines "Kollisions - zurückfahr - umdreh - weiterfahr" Programm geschrieben und möchte jetzt das Asuro je nach dem wie er sich gestoßen hat verschieden dreht. Jetzt mein Problem: Ich weiß nicht wie ich einzelne Gruppen von Tasten ansprechen soll.

    Hier mal das Programm:

    Code:
    #include "asuro.h"
    
    int main(void)
    {
    	Init();
    	int t;
    	MotorDir(FWD,FWD);
    	MotorSpeed(120,120);
    	StatusLED(GREEN);
    	FrontLED(ON);
    	while (1){
    	while (PollSwitch()==0) {
    			SerWrite("Ab die Post!",12);
    			}
    	MotorSpeed(0,0);
    	StatusLED(RED);
    	MotorDir(RWD,RWD);
    	MotorSpeed(120,120);
    	BackLED(ON,ON);
    	for(t=0;t<1000;t++){        
        Sleep(72);}    
    	BackLED(OFF,OFF);
    	MotorDir(FWD,FWD);
    	MotorSpeed(0,180);
    	for (t=0; t<1000; t++){
    	Sleep(72);}
    	MotorDir(FWD,FWD);
    	MotorSpeed(120,120);
    	}
    }
    An die Leute denen es aufgefallen ist
    Ich habe Teile das Programms insbesondere die for - Schleife aus diesem Forum übernommen um mir Anzugucken wie man so ein Programm erstellt.

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2006
    Beiträge
    164
    gcc tutorial auf mikrocontroller.net reinkucken

  3. #3
    Tut mir leid ich habe mir das Tutorial anguckt und da stand nichts zu einelne Sensoren auslesen.

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  5. #5
    Nein modifizier doch mal mein Programm so, dass es auf einzelne Taster reagiert, vielleicht versteh ich es ja dann

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    04.07.2009
    Alter
    24
    Beiträge
    31
    So sind ja die rückgabewerte:

    Bit0 (1) -> K6
    Bit1 (2) -> K5
    Bit2 (4) -> K4
    Bit3 (8) -> K3
    Bit4 (16) -> K2
    Bit5 (32) -> K1

    dazu habe ich auch eine frage, und zwar sagen wir einmal, dass K1 gedrückt wird. Dann belpmmen wir den Wert 32 zurück, aber den kann ma n doch auch erhalten, wenn K2, K4 und K5 gedrückt sind.

    Aber nun zu deiner Frage.
    Mit den Knöpfen 2 - 6 sollte es ja keine Probleme geben, denn da kann man nie auf 2 verschiedene arten auf den gleichen wert kommen einfach schreiben:

    Code:
    taste = PollSwitch();
    if (taste==1)
       ...
    else if(taste==2)
       ...
    else if(taste==4)
       ...
    else if(taste==8)
       ...
    else if(taste==16)
       ...
    und der rest ist meine Frage.
    Ich hoffe ,dass das hier richtig ist.

    lg
    Hannes

  7. #7
    Code:
    hallo#include "asuro.h"
    
    int main(void)
    {
    	Init();
    	int zeit;
    	unsigned char taste;
    	taste = PollSwitch();
    	MotorDir(FWD,FWD);
    	MotorSpeed(120,124);
    	StatusLED(GREEN);
    	FrontLED(ON);
    	while (1){
    	StartSwitch();
    	StopSwitch();
    	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); 
    	}
    	}
    }
    Ich habe das nach deinem Beitrag hier weiterentwickelt, aber es passiert nichts, außer, dass die StatusLED grün leuchtet.

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    04.07.2009
    Alter
    24
    Beiträge
    31
    ich glaube ich habe den Fehler gefunden.

    wie ich das weiß ist doch ODER = || und nicht |

    Demnach müsste der Quellcode so heißen:

    Code:
    hallo#include "asuro.h"
    
    int main(void)
    {
       Init();
       int zeit;
       unsigned char taste;
       taste = PollSwitch();
       MotorDir(FWD,FWD);
       MotorSpeed(120,124);
       StatusLED(GREEN);
       FrontLED(ON);
       while (1){
       StartSwitch();
       StopSwitch();
       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);
       }
       }
    }
    Bitte korigieren wenn das falsch ist.

  9. #9
    • Tut mir leid euch enttäuschen zu müssen, aber es funktioniert immer noch nicht.

      Code:
      #include "asuro.h" 
      
      int main(void) 
      { 
         Init(); 
         int zeit; 
         unsigned char taste; 
         taste = PollSwitch(); 
         MotorDir(FWD,FWD); 
         MotorSpeed(120,124); 
         StatusLED(GREEN); 
         FrontLED(ON); 
         while (1){ 
         StartSwitch(); 
         StopSwitch(); 
         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 einzige was passiert ist, dass die BackLED leuchten und die StatusLED grün leuchtet.

      Das Programm soll ja eigentlich so wirken, dass wenn er irgendwo antstößt zurückfährt, und je nachdem wie er sich gestoßen hat dreht (90°) kurz fährt wieder um 90° dreht (aber diesmal in die andere Richtung) und dann weiterfährt. Ohne die Idee mit einzelne Taster auslesen funktionierte es übrigens.

      Nun was soll ich machen?


    Edit: Könnte es vielleicht an if hängen, da ich im anderen Programm(das funktioniert hat) while benutzt habe.

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    04.07.2009
    Alter
    24
    Beiträge
    31
    post doch mal deinen alten Code bei dem es Funktioniert hat, dann kann ich ja mal schauen ob man das einfacher umschreiben kann.

    Dass z.B: beim drücken der taste 2 das licht ot wird, den ganzen rest (fahren) kann man ja immer noch in die schleife integrieren.

Seite 1 von 6 123 ... LetzteLetzte

Berechtigungen

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