-
        

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

Thema: Asuro fährt fast immer mit 255

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173

    Asuro fährt fast immer mit 255

    Anzeige

    Hallo

    Irgendwas wiederspricht sich da

    Code:
    #include <stdbool.h>
    #include <stdio.h> 
    #include <asuro.h>
    	int main(void)
    {
    	Init();
    	char aC[2];
    
    
    bool tanzen = true;
    bool B = true;//(Beschleunigung)
    	
    	int LANG = 0,z = 0,y = 0,t = 0,gas = 0,a = 50;
    /*******************************************************************************************/
    while( 1 )
    {
    	LANG=LANG+2;
    	gas=gas+1;
    
    
    
    	if (tanzen == true)
    {		
    		MotorSpeed(120,120);
    	if((gas >  0) && (gas < 5 ))
    		MotorDir(FWD,RWD);
    	if((gas >  5) && (gas < 15))
    		MotorDir(RWD,FWD);
    	if((gas > 15) && (gas < 20))
    		MotorDir(FWD,RWD);
    	if((gas > 20) && (gas < 30))	
    		MotorDir(FWD,FWD);
    	if((gas > 30) && (gas < 35))
    		MotorDir(RWD,FWD);
    	if((gas > 35) && (gas < 45))
    		MotorDir(FWD,RWD);
    	if((gas > 45) && (gas < 50))
    		MotorDir(RWD,FWD);
    	if((gas > 50) && (gas < 60))	
    		MotorDir(RWD,RWD);
    	if (gas > 60)
    		gas=0;
    }		
    	
    	if (tanzen == false)	
    		MotorSpeed(0,0);		
    /************************************/
    
    if(B == true)
    {
    	MotorDir(FWD,FREE);
    	MotorSpeed(a,0);
    	a=a+5;
    if(a > 255)
    	a = 255;	
    }	
    
    if(B == false)
    	MotorDir(FREE,FREE);
    
    
    
    		
    		utoa (z, aC, 10);				//Übertragen
    		SerWrite(aC, 2);				//Übertragen
    		SerWrite (" z\n\r", 5);			//Übertragen
    	for (t=0; t< 120; t++)				//Übertragen
            {								//Übertragen
            Sleep (72);						//Übertragen
            }								//Übertragen
    
    		utoa (a, aC, 10);				//Übertragen
    		SerWrite(     aC, 12);			//Übertragen
    		SerWrite ("     a\n\r", 8);		//Übertragen
    	for (t=0; t< 120; t++)				//Übertragen
            {								//Übertragen
            Sleep (72);						//Übertragen
            }								//Übertragen
    
    
    	y++;
    	if (y > 5)
    		z++;
    	if (y > 5)	
    		y=0;
    
    	
    	if ((z > 0) && (z < 8))			
    		
    	tanzen = true;
    
    	if ((z > 8) && (z < 12))		
    	B = true;
    		
    
    	if (z > 15)
    		z=0;
    	
    	
    }
    	return 0;
    }


    Er beschleunigt auf 255 hält die geschw immer auch wenn lang > 30 (also es wieder bei 0 beginnt)ist fährt er noch mit 255) // km/h


    Könnt ihr mir da helfen?

    Lg

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Ich vermute, dass dein Programm so schnell ausgeführt wird, dass die Motoren nicht hinterherkommen und das Ansteuerungssignal die meiste Zeit 255 beträgt.
    Au0erdem fragst du die Variable LANG doch nirgends im Programm ab, wie soll er darauf reagieren können.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Habs nur kurz überflogen...
    a gibt die Geschwindigkeit an und wird mit a=a+5 hochgezählt und durch if(a > 255) a = 255; auf 255 begrenzt, aber an keiner Stelle im Programm wieder aus Null gesetzt.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    Zitat Zitat von TobiKa
    Habs nur kurz überflogen...
    a gibt die Geschwindigkeit an und wird mit a=a+5 hochgezählt und durch if(a > 255) a = 255; auf 255 begrenzt, aber an keiner Stelle im Programm wieder aus Null gesetzt.
    Ich stimme zu. "a" wird nirgends in dein Programm wieder kleiner.

    Das war einfach zu finden in dein Programm. Aber du verwendest 5 Zahler die durcheinander erhöht werden. Verstehst du noch was das alles macht und in welcher folge das geht? Ich nicht mehr! Könntest du das nicht vereinfachen?

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    Ja

    Ich habe es jetzt so geändert

    Code:
    #include <stdbool.h>
    #include <stdio.h>
    #include <asuro.h>
       int main(void)
    {
       Init();
       char aC[2];
    
    
    bool tanzen = true;
    bool B = true;//(Beschleunigung)
       
       int z = 0,y = 0,t = 0,gas = 0,a = 50;
    /*******************************************************************************************/
    while( 1 )
    {
       
       gas=gas+1;
    
    
    
       if (tanzen == true)
    {      
          MotorSpeed(120,120);
       if((gas >  0) && (gas < 5 ))
          MotorDir(FWD,RWD);
       if((gas >  5) && (gas < 15))
          MotorDir(RWD,FWD);
       if((gas > 15) && (gas < 20))
          MotorDir(FWD,RWD);
       if((gas > 20) && (gas < 30))   
          MotorDir(FWD,FWD);
       if((gas > 30) && (gas < 35))
          MotorDir(RWD,FWD);
       if((gas > 35) && (gas < 45))									// gas
          MotorDir(FWD,RWD);
       if((gas > 45) && (gas < 50))
          MotorDir(RWD,FWD);
       if((gas > 50) && (gas < 60))   
          MotorDir(RWD,RWD);
       if (gas > 60)
          gas=0;
    }      
       
       if (tanzen == false)   
          MotorSpeed(0,0);      
    /************************************/
    
    if(B == true)
    {
       MotorDir(FWD,FREE);
       MotorSpeed(a,0);
       a=a+5;
    if(a > 255)													//zähler a
       a = 255;   
    }   
    
    if(B == false)
       MotorDir(FREE,FREE);
    
    /************************************/
    
          
          utoa (z, aC, 10);            //Übertragen
          SerWrite(aC, 2);            //Übertragen
          SerWrite (" z\n\r", 5);         //Übertragen
       for (t=0; t< 120; t++)            //Übertragen
            {                        //Übertragen
            Sleep (72);                  //Übertragen
            }                        //Übertragen							Zähler t
    
          utoa (a, aC, 10);            //Übertragen
          SerWrite(     aC, 12);         //Übertragen
          SerWrite ("     a\n\r", 8);      //Übertragen
       for (t=0; t< 120; t++)            //Übertragen
            {                        //Übertragen
            Sleep (72);                  //Übertragen
            }                        //Übertragen
    /*******************************************************************/
    
       y++;
       if (y > 5)
          z++;
       if (y > 5)   
          y=0;
    
       
       if ((z > 0) && (z < 8))         
          
       tanzen = true;																//Zähler y und z
    
       if ((z > 8) && (z < 12))      
       B = true;
          
    
       if (z > 15)
          z=0;
       
       
    }
       return 0;
       a = 0;
    }

    Alles gleich geblieben

    Lg

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.06.2009
    Beiträge
    1.266
    Dein Problem mit a bleibt aber bestehen, da B = true ist

  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Ich war mal so frei und habe deinen Code umformatiert. Ich kann das einfach nicht ertragen wie du uns hier quälst. Selbstverständlich darf jeder so programmieren wie er will und mein Stil ist sicher auch nicht der vorbildlichste. Die Bools habe ich wieder rausgeschmissen, weil sie dir offensichtlich nicht weiterhelfen und du sie auch nicht verstanden hast. Wichtigstes neues Hilfsmittel ist die if ... else if- Anwendung:

    Code:
    #include <stdio.h>
    #include <asuro.h>
    
    #define false 0 // quick&dirty!
    #define true 1
    
    int main(void)
    {
       Init();
       char aC[2];
    
    	unsigned char tanzen = true;
    	unsigned char Beschleunigung = true;
    
       int z = 0, y = 0, t = 0, gas = 0, a = 50;
    
    	while( 1 )
    	{
    	   gas=gas+1;
    
    	   if (tanzen)
    		{
    	      MotorSpeed(120,120);
    
    	   	if(gas < 5 )
    	      	MotorDir(FWD,RWD);
    	   		else if(gas < 15)
    	      		MotorDir(RWD,FWD);
    	   			else if(gas < 20)
    		      		MotorDir(FWD,RWD);
    	   				else if(gas < 30)
    	      				MotorDir(FWD,FWD);
    	   					else if(gas < 35)
    		      				MotorDir(RWD,FWD);
    		   					else if(gas < 45)
    		      					MotorDir(FWD,RWD);
    		   						else if(gas < 50)
    		      						MotorDir(RWD,FWD);
    		   							else if(gas < 60)
    		      							MotorDir(RWD,RWD);
    	   									else gas=0;
          }
    		else MotorSpeed(0,0);
    
    		if(Beschleunigung)
    		{
    	   	MotorDir(FWD,FREE);
    	   	MotorSpeed(a,0);
    	   	a=a+5;
    			if(a > 255)
    	   		a = 255;
    		}
    		else MotorDir(FREE,FREE);
    
    	   utoa (z, aC, 10);
    	   SerWrite(aC, 2);
    	   SerWrite (" z\n\r", 5);
    	   for (t=0; t< 120; t++)
    	      Sleep (72);
    
    	   utoa (a, aC, 10);
    	   SerWrite(aC, 12);
    	   SerWrite ("     a\n\r", 8);
    	   for (t=0; t< 120; t++)
            	Sleep (72);
    
    	   if (z < 8)
    			tanzen = true;
    			else if (z < 12)
    	   		Beschleunigung = true;
    
    	   y++;
    	   if (y > 5)
    	   {
    	      y=0;
    		   z++;
    	   	if (z > 15)
    	      	z=0;
    		}
    	}
       return 0;
       a = 0; // ???
    }
    Wenn ich beim Editieren (1,5Std!) keinen Fehler gemacht habe, sollte es wieder (fast) genau die selbe Funktion haben wie dein aktueller Code. Zur Übung könnest du hier mal erklärende Kommentare einfügen und die oben gemachten Änderungsvorschläge einbauen.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    Danke

    Aber wo soll ich jetzt a auf null stellen weil er macht das gleiche wie bei meinen Programm

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.167
    "return 0;" soll das Allerletzte Befehl in den Funktion main sein. Danach a auf 0 stellen hat gar keinen Sinn. Es soll jedenfals innerhalb der while-Schleife stehen. Aber wo genau ist abhängig von dein Wunsch in welcher Situation. Da haben wir keinen Ahnung von. Wir haben bis jetzt noch gar keinen Beschreibung bekommen was dein Asuro tun soll. Nur das es Beschleunigt.

  10. #10
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.11.2010
    Ort
    Österreich
    Alter
    23
    Beiträge
    173
    Ja

    Also er soll zuerst "tanzen" und wenn er damit fertig ist soll er auf einen rad beschleunigen.

    Lg

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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