-         

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

Thema: Probleme mit Tastern: PollSwitsch() gleich nach Start >0?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2006
    Alter
    24
    Beiträge
    6

    Probleme mit Tastern: PollSwitsch() gleich nach Start >0?

    Anzeige

    Code:
    #include "asuro.h"
    
    int main(void)
    	{	Init();
    		unsigned int i,t;
    		t=0;
    		MotorSpeed(140,140);
    		MotorDir(FWD,FWD);
    		while(1) {
    			t=PollSwitch();
    			if (t>0) {
    				MotorDir(RWD,BREAK);
    				for(i=1;i<100;i++){
    					Sleep(255);
    				}
    			MotorSpeed(140,140);
    			
    			}
    		}
    		FrontLED(ON);
    		return 0;
    	}
    Ich habe meinen Asuro diesen Code gegeben, doch leider fähr er nur kurz gerade aus und fängt dann mit dem if(t>0) an.
    Woran könnte das liegen?
    MfG
    MicRos

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    21.03.2004
    Ort
    73061 Ebersbach
    Alter
    48
    Beiträge
    52
    Ich habe meinen Asuro diesen Code gegeben, doch leider fähr er nur kurz gerade aus und fängt dann mit dem if(t>0) an.
    Woran könnte das liegen?
    meinst du damit, dass er
    A.)
    MotorDir(RWD,BREAK);
    for(i=1;i<100;i++){
    Sleep(255);
    macht?

    oder
    B.) macht er das nun nicht?

    ZU A.) hast du dir mal die werte von PollSwitch(); ausgeben lassen? da gibt es einige routine hier im forum, evtl. ist da die tolleranz so, dass er "denkt" ein taster ist gedrückt.

    ZU B.) hmm mal sehen ob ich das mit dem code richtig verstehe. er soll fahren bis ein hindernis kommt,
    t=PollSwitch();
    if (t>0)
    dann drehen
    MotorDir(RWD,BREAK);
    for(i=1;i<100;i++){
    Sleep(255);
    und danach weiter
    MotorSpeed(140,140);
    sollte kein hindernis kommen dann brennt die LED
    FrontLED(ON);

    fehlt da nach der drehung nicht ein MotorDir(FWD,FWD);???

    gruß
    downad

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2006
    Alter
    24
    Beiträge
    6
    A war richtig. ich such dan was zum ausgeben der daten. zu B:
    ja, stimmt, war vorher richtig, hab es aber dann reduziert wegen dem fehler, hat da aber auch keine wirkung gezeigt.
    MfG
    MicRos

    [edit]
    ich hab das ganze mal mit SerWrite probiert, da klappte alles. und mit dem fahren nach den drehen auch, da ist er aber einiges gefahren und dann mitten im Zimmer auf der stelle gedreht.

  4. #4
    Moderator Robotik Einstein Avatar von damaltor
    Registriert seit
    28.09.2006
    Ort
    Jena
    Alter
    31
    Beiträge
    3.912
    kurz nach dem start ist pollswitch meist >0. daran könnte es liegen. auch im laufenden programm werden häufig falsche werte ausgegeben.

    verhindern kannst du das, indem du nach dem start eine kurze verzögerung machst
    Code:
    Sleep(255);
    (das sind ca 3 millisekunden, du wirst es nicht merken =) und dann IMMER wenn du pollswitch abfragst, 3-4 mal fragst um einen guten wert zu bekommen (also nicht nur zu beginn, sondern immer wenn du die werte abfragst). ersetze also
    Code:
    t=PollSwitch();
    durch
    Code:
    for(i=0;i<10;i++)
    {
    PollSwitch();
    }
    t=PollSwitch();
    der wert wird also 10x abgefragt, bevor er in der variable gespeichert wird. dadurch werden dann meist korrekte werte zurückgegeben.
    kleinschreibung ist cool!

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    das scheitert glaub ich an der PllSwtich() fuintkion.
    (1) mehrmals hintereinenader aufrufen, wenn das nicht nützt dann,
    (2) stattdessen die variable switched hernehmen
    erst mit StartSwitch() interrupt aktivieren !
    ...

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2006
    Alter
    24
    Beiträge
    6
    mit der while fnktion müsste ja eigentlich die Funktion imer wiederholt werden, da es mit der (1) imer den wert erfüllt zurückgibt. bei 2. blick ich grad net durch.

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    pro while schleife ein mal. nachdem da ne sekunde verzögerung drinne ist, wird pollswitch alle sekunde einmal ausgeführt.
    für computer berhältnisse seeeeeeeeeeehr wenig.

    du musst pollswitch mehrmals dirket hintereinander aufrufen, weil sich die kondensatoren da erst entladen müssen.

    alle sekunde einmal nützt nix .
    ...

  8. #8
    Benutzer Stammmitglied
    Registriert seit
    21.03.2004
    Ort
    73061 Ebersbach
    Alter
    48
    Beiträge
    52
    mit der neune lib (ich glaube 2.6 )
    gibt es die möglichkeit pber einen interrupt sowas zu lösen.

    hier ein bsp mit switched und einer ausgabe

    Code:
    int main(void)
    {
      Init();
      Encoder_Init();
      StartSwitch(); //Startet das switched!!!
      int sw_pressed;
     
      SerWrite("\n\r",2);
      //        123456789012345678901234567890123456789012
      SerWrite("Hallo Ralf, ich beginne mit dem Programm: ",42);
      SerWrite("\n\r",2);
    
       
      while (1) {
     
       while (!switched) {   /solange kein Hindernis
          SerWrite("-nix-",5);
          } //end while (!switched)         
          
       sw_pressed=PollSwitch();  //lade sw_pressed mir PollSwitch wert
       //ausgabe an terminal
            SerWrite("\n\rSchalter: ",12);
            PrintInt(sw_pressed);
            serWrite("\n\r",2);
    
       switched=0;
      } //end while (1)
     
    // Nie vergessen, reine Vorsichtsmassnahme..
      while(1){}
      return 0;
    
    } // end int main()
    gruß
    downad

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    11.12.2006
    Alter
    24
    Beiträge
    6
    ok, ich füge dann eine for zählerschleife ein, mal testen ob das dann geht.
    was muss ich eigentlich öfters aufrufen? das t=PollSwitsch?

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    01.11.2006
    Beiträge
    433
    und hier gleich ne neuere version von dem code oben, die keine syntaxfehler enthält

    Code:
    #include "asuro.h"
    int main(void)
    {
      Init();
      Encoder_Init();
      StartSwitch(); //Startet das switched!!!
      int sw_pressed;
     
      SerWrite("\n\r",2);
      //        123456789012345678901234567890123456789012
      SerWrite("Hallo Ralf, ich beginne mit dem Programm: ",42);
      SerWrite("\n\r",2);
    
       
      while (1) {
     
       while (!switched) {   //solange kein Hindernis
          SerWrite("-nix-",5);
          } //end while (!switched)         
         
       sw_pressed=PollSwitch();  //lade sw_pressed mir PollSwitch wert
       //ausgabe an terminal
            SerWrite("\n\rSchalter: ",12);
            PrintInt(sw_pressed);
            SerWrite("\n\r",2);
    
       switched=0;
      } //end while (1)
     
    // Nie vergessen, reine Vorsichtsmassnahme..
      while(1){}
      return 0;
    
    } // end int main()
    ...

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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