-         

Ergebnis 1 bis 6 von 6

Thema: Servoprogrammierung

  1. #1

    Servoprogrammierung

    Anzeige

    Hallo zusammen,
    ich würde gerne einen Servo mittels meinen Axon I Microcontroller mittels Tastatur steuern. Kurz gesagt, mit Hilfe von A-Taste nach links wählen, mit Hilfe von S-Taste nach rechts drehen. Ich habe schon einen Code gemacht, leider dreht er sich immer in die selbe Richtung. Kann man den Code irgendiwe umprogrammieren, damit er in die gewünschte Richtung dreht?

    Code:

    Code:
    void control(void)
    	{
    
    	char cByte;
    	
    	rprintf("Auto ist bereit!\n");
    	rprintf("a druecken fuer Vorne\n");
    	rprintf("s druecken fuer Hinten\n");
    	rprintf("x druecken fuer LED anmachen\n");
    	rprintf("c druecken fuer LED ausmachen\n");
    	
    	while(1)
    		{
    	   cByte = UART1GetByte();                          //qC bekommt Steuerbefehle von UART1 also Tastatur
    			if (cByte == 'a')  
    			{
    			    servo(PORTH,2,50);                         //Servo an Port2 wird um 50 erhöht
    			}
    
    
    	cByte = UART1GetByte(); 
    			if (cByte == 's') 
    			{
    			   servo(PORTH,2,-50);
    			}
    	 
    
    
    	   cByte = UART1GetByte(); 
    			if (cByte == 'x') /
    			{
    				LED_on();
    			}
    
    	  cByte = UART1GetByte(); 
    			if (cByte == 'c') 
    			{
    				LED_off();
    			}
     		}	
    	}

    Außerdem hab ich das Problem, dass der Servo sich irgendwie hackelig dreht, also als ob da eine kurze Warteschleife ist. Mfg

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    04.05.2010
    Beiträge
    88
    Ich habe schon einen Code gemacht....
    Kann man den Code irgendiwe umprogrammieren, damit er in die gewünschte Richtung dreht?
    wenn du den code selbst geschrieben hast, solltest du eigentlich auch wissen wo es hackt.

    dass der Servo sich irgendwie hackelig dreht, also als ob da eine kurze Warteschleife ist.
    du zeigst nur so wenig code und verlangst von andern sie sollen wie hellseher wissen wo der fehler liegt und noch am besten umschreiben das alles läuft so wie du dir das vorstellst.

    es fehlt schon als minimum die port initialisierung auch sehe ich die servo() funktion nicht!

  3. #3
    Wiso wenig Code? Mehr Code brauch ich nicht um den Servo anzusteuern!
    Mit Hilfe von:

    Code:
    { 
                servo(PORTH,2,50); 
    }
    Initialisiere ich den Port 2 an dem der Servo angeschlossen ist, hiermit kann ich ihn auch ansprechen. Nun weiß ich leider nicht, wie man ihn entweder schneller und langsamer macht und wie man auswählt in welche Richtung er drehen soll

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    04.05.2010
    Beiträge
    88
    servo() ist eine funktion und irgentwo ist programmiert was die funktion genau macht.
    ohne das kann keiner außer der autor sagen was für argumente/werte die funktion denn gerne haben will.

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    @Madcilc:
    Was auffällt:
    1. Nach jedem servo() Befehl muss man eine Pause von 10..20 ms einbauen.
    2. Wenn du eine Taste für Linksdrehung und eine andere für Rechtsdrehung nehmen willst, must du den 3. Parameter von servo() als Variable definieren. Da zählst du dann z.B. 10 dazu oder nimmst minus 10 für die andere Drehrichtung. So einfach mit 50/-50 wird das nicht klappen.

    Gruß Dirk

  6. #6
    So, ich habe den Code verändert, allerdings dreht sich der Servo immer noch in eine bestimmte Richtung , ich krieg ihn nicht dazu in eine bestimmte Richtung zu drehen. Bin leider kein guter Coder, verstehe deswegen leider nicht wo der Fehler liegen kann. Mfg


    Code:
    void control(void)
    	{
    
    
    	char cByte;
    	int i=1000;
    
    	
    	rprintf("Auto ist bereit!\n");
    	rprintf("W druecken fuer Vorne\n");
    	rprintf("S druecken fuer Hinten\n");
    	rprintf("X druecken fuer LED aus\n");
    	rprintf("C druecken fuer LED ein\n");
    	
    	while(1)
    		{
    		cByte = UART1GetByte(); // get byte from UART1 on the axon
    			if (cByte == 'w') // if character received is w then
    			{
    				
    				servo(PORTH,2,i=i+10);
    				delay_ms(20);
    			
    			}
    
    
    			
    
    
    		cByte = UART1GetByte(); // get byte from UART0 on the axon
    			if (cByte == 's') // if character received is s then
    			{
    			
    			servo(PORTH,2,i=i-10);
    			delay_ms(20);
    		
    			}
    	 
    
    
    	   cByte = UART1GetByte(); // get byte from UART1 on the axon
    			if (cByte == 'x') // if character received is x then
    			{
    				LED_on();
    			
    			}
    
    	  cByte = UART1GetByte(); // get byte from UART1 on the axon
    			if (cByte == 'c') // if character received is c then
    			{
    				LED_off();
    			
    			}
    
    			
     		}
    }

Berechtigungen

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