-         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 24 von 24

Thema: Asuroprojekt mit Odometrie und LCD-Display

  1. #21
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    9
    Anzeige

    so
    tut mir echt leid für die verspätete antwort hatte letzen tage bissl stress^^
    das hier ist mein volles programm
    ich gehe mal von aus das ihr das dann versteht was o auf sich hat
    Code:
    #include "stdlib.h"
    #include "asuro.h"
    #include "lcd.h"
    #include "i2c.h"
    
    int speed = 100;
    int o = 1;
    
    void start(int speed)
    {
     int keys;
     int i = 1;
     int zaehler = 0 ;
     while(i >0)
    	  {
     	   keys = PollSwitchLCD();
       	   if (keys & LCD_KEY_YELLOW)		//schwarzer Taster
      	   {
    	   	while ( zaehler == 0)
    		{
    		 if(speed < 350)					//Geschwindigkeit erhöhen
    		 {
             speed = speed +10;
    		 ClearLCD(); 
    		 PrintSetLCD(0,0,"Geschwindigkeit");
    		 SetCursorLCD(0, 1);
    		 zaehler  = zaehler +1;
        	 PrintIntLCD(speed);
    		 }
             zaehler  = zaehler +1;
    		 }
      		 }
             else if (keys & LCD_KEY_RED )	//roter Taster
        	 {								//wechseln von der Geschwindigkeiseinstellung
             i = 0;							//in den Messbetrieb	
        	 }
        	 else if (keys & LCD_KEY_BLUE )	//Blauer Taster
        	 {
    		 while ( zaehler == 0)
    		 {
    		 if(speed >0)
    		 {
             speed = speed -10;				//Geschwindigkeit vermindern
    		 ClearLCD();
    		 PrintSetLCD(0,0,"Geschwindigkeit");
    		 SetCursorLCD(0, 1);
    	     PrintIntLCD(speed);
    		 zaehler  = zaehler +1;
    		 }
    		 zaehler  = zaehler +1;
    		}
        	}
    		if(!keys)				// für das einmalige hochzählen beim drücken eines knopfes
    		{
    		Msleep(100);
    		zaehler = 0;
            }
    		
          }
    	  o--;
    
    	  
    
    }
    
    void berechnung(int zeit)
    {
     int keys;
     int reifen = 120; //Reifenumfang in mm
     int wegaenderung = 0;
     int inszeit = 0;
     int geschwindigkeit = 0;
     int durchschnitt = 0;
     int zaehler = 1 ;
    
    
      while(1)
      {	
      	
      	int odometrie =  encoder[0];
    
        wegaenderung = odometrie + reifen / 8 / 10;
    	inszeit = Gettime() /1000;
    	geschwindigkeit = wegaenderung / inszeit;
    	durchschnitt = wegaenderung / inszeit;
        keys = PollSwitchLCD();
          if(keys)				// für das ständige aktuallisieren der Daten
    	     {
    	     zaehler = 0;
             }
          if ((keys & LCD_KEY_YELLOW) || (zaehler == 1) ) // Geschwindigkeit
             {
    		 ClearLCD(); 
    		 PrintSetLCD(0,0,"CM pro S");
    		 SetCursorLCD(0, 1);
        	 PrintIntLCD(geschwindigkeit);
    		 zaehler = 1; 
    		 }
          else if ((keys & LCD_KEY_RED) || (zaehler == 2)) //Zurückgelegter Weg
             {
    		 ClearLCD(); 
    		 PrintSetLCD(0,0,"Weg in CM");
    		 SetCursorLCD(0, 1);
        	 PrintIntLCD(wegaenderung);
    		 zaehler = 2;  
             }
          else if ((keys & LCD_KEY_BLUE) || (zaehler == 3)) // Durchschnittsgeschwindigkeit
             {
    		 ClearLCD(); 
    		 PrintSetLCD(0,0,"CM pro S");
    		 SetCursorLCD(0, 1);
        	 PrintIntLCD(durchschnitt);
    		 zaehler = 3;
    		 }
    	
        Msleep(100);
      }
    }
     
     //Hauptprogramm 
    int main(void)
    {
    
        //Geschwindigkeit 
        //void int speed = 100;
       
    
    	
        Init();
    	InitI2C();
        InitLCD();
    	EncoderInit();
    	EncoderSet(780,790);
    	EncoderStart();
        GREEN_LED_ON;
    
    	while(o > 0)
    	{
        PrintSetLCD(0,0,"Geschwindigkeit");
    	SetCursorLCD(0, 1);
    	PrintIntLCD(speed);
    	start(speed);
    	}
    	MotorDir(FWD,FWD);
        MotorSpeed(speed,speed);
    	int zeit = Gettime() / 1000;	//zeit in Sekunden
    	ClearLCD(); 
    	PrintIntLCD(zeit);
    	berechnung(zeit);
    	
        
      	 
    }
    das einzigste problem ist einfach das speed mit start zwar verändert werden kann aber nicht weiter übernommen wird

  2. #22
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    56
    Beiträge
    5.793
    Blog-Einträge
    8
    Wenn du die Funktion mit "void start(int speed)" definierst, wird beim Aufruf eine für diese Funktion lokale Variable "speed" erzeugt. Diese ist nicht identisch mit der beim Programmstart global definierten gleichnamigen Variablen. Wenn du aber mit "void start(void)" keine Parameterübergabe festlegst, verwendet start() die selbe Variable wie main(). Dann wird die Änderung an der globalen Variablen durchgeführt.

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

  3. #23
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    01.03.2008
    Ort
    Niederlanden
    Beiträge
    1.170
    Oder mit Zeiger und Referenzen. Im Bericht 13 war er schon ganz in die nähe mit (int &speed) :

    http://www.rn-wissen.de/index.php/C-...r.C3.BCbergabe

  4. #24
    Neuer Benutzer Öfters hier
    Registriert seit
    29.03.2011
    Beiträge
    9
    alles kla valen und radbruch mein programm funktioniert jetzt außer einigen macken die zwischendurch mal wieder auftreten, die aber nach dem neutstart wieder weg sind ^^
    ok ich kann dieses forum nur weiterempfehlen
    vielen dank
    mfg Hermann (:

Seite 3 von 3 ErsteErste 123

Ähnliche Themen

  1. Odometrie
    Von HAWK-Matze im Forum Asuro
    Antworten: 33
    Letzter Beitrag: 05.03.2008, 09:40
  2. Odometrie die 10.000
    Von NebuK im Forum Asuro
    Antworten: 5
    Letzter Beitrag: 10.11.2006, 13:02
  3. odometrie
    Von Toschtosch im Forum Asuro
    Antworten: 9
    Letzter Beitrag: 03.11.2006, 19:52
  4. Navigation mit Odometrie
    Von Rosowitsch im Forum Asuro
    Antworten: 1
    Letzter Beitrag: 07.06.2006, 16:36
  5. Odometrie LED
    Von Rosowitsch im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 30.05.2006, 20:29

Stichworte

Berechtigungen

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