- LiTime Speicher und Akkus         
Ergebnis 1 bis 2 von 2

Thema: YETI- Programmierung: Ultraschallplatine

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.03.2010
    Alter
    35
    Beiträge
    26

    YETI- Programmierung: Ultraschallplatine

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute!

    Ich habe mal wieder eine Frage.
    Und zwar: Ich möchte gerne, dass der Roboter nur solange eine Funktion durchführt, bis er auf ein Hindernis stößt (10 cm Entfernung). Danach soll sich der Yeti drehen und dann wieder solange eine bestimmte Funktionsabfolge machen, bis er wieder auf ein Hindernis, in 10 cm Entfernung stößt.
    Ich habe jetzt einen Quellcode geschrieben, der leider so nicht funktioniert.
    Code:
    /----------------------------------------------------------------------
    // Titel     : Yeti, Yeti, Yeti
    //----------------------------------------------------------------------
    // Funktion  : Der Yeti läuft, lässt seine Augen leuchten, tanzt und macht TÖne
    // Schaltung : Yeti und mySmartUSB
    //----------------------------------------------------------------------
    // Prozessor : Atmega8
    // Takt		 : 8 MHz
    // Sprache   : C
    // Datum     : April 2010
    // Version   : 1.0
    // Autor     : Mandy 
    //----------------------------------------------------------------------
    
    #include "yeti.h"                       // Lade Definitionen und Funktionen des Yetis
    #include "yetimove.c"                   // Lade Definitionen und Funktionen der Yetibewegungen
    #include "ultrasoon.c"					// Lade Definitionen und Funktionen der Ultraschallsensoren
    
    //	Start der "Main- Methode"
    //================================================================================
    int main(void)
    {
    
    	//Initalisierung der Variablen
    	int i;
    	DDRC=0x00;
    
    
    	vInitYeti();                        	// initalisiert alle Mikrocontrollerfunktionen des Yetis
    	vInitUltrasoon(); 
    
    	// Tonabfolge
    	vBeep(400,80);
    	vBeep(520,80);
    	vBeep(360,80);
    	vBeep(580,80);
    
    
    	vStandUpright();                    	// Yeti stellt sich in die Ausgangsposition
    	vCalibrateServos();                 	// Kalibrierung der Servos
    	vStandUpright();                    	// Yeti stellt sich in die Ausgangsposition
    	vWaitMilliseconds(1000);
    
    	while(1)                            	// Start einer Unendlichschleife: Der Yeti wiederholt das Folgende bis er ausgeschaltet wird.
    	{
    	
    	    if(ucGetObjectDistanceInCentimeters()<=10)
    		{
    			// DAS HINDERNIS IST NAHE, WAS SOLL ICH TUN?!			
    			
    			vFrontLEDs(BOTH);				// Schaltet beide LEDs des Yetis an
    			vFrontLEDs(OFF);				// Schaltet beide LEDs des Yetis aus
    			vWaitMilliseconds(1000);		// Wartet 1 s
    			vFrontLEDs(BOTH);				// Schaltet beide LEDs des Yetis an
    			
    			
    			//Tonabfolge
    			vBeep(580,120);
                vBeep(400,150);
                vBeep(520,120);
    			
                vTurnLeftXSteps(6,true);        // Lässt den Yeti 6 Schritte nach links drehen
                vBeep(460,80);                  // Lässt den Yeti einen Ton erzeugen
    	    
    		}
    		
    
    		else
    		{	
    			// DAS HINDERNIS IST WEIT WEG
    			// LAUFEEEEEEEEEEEEN!!!
    			
    			vFrontLEDs(LEFT);               // Schaltet das linke Auge des Yetis an
    			vMoveForwardXSteps(8);          // Lässt den Yeti 8 Schritte vorwärts laufen
    			vBeep(400,80);                  // Lässt den Yeti einen Ton erzeugen
    			vFrontLEDs(RIGHT);              // Schaltet das rechte Auge des Yetis an
    	
    			vBeep(360,80);                  // Lässt den Yeti einen Ton erzeugen
    			vMoveBackwardXSteps(8);         // Lässt den Yeti 8 Schritte rückwärts laufen
    	
    			vBeep(650,80);                  // Lässt den Yeti einen Ton erzeugen
    			vFrontLEDs(BOTH);               // Schaltet beide Augen des Yetis an
    	
    			vStandUpright();                // Yeti stellt sich in die Ausgangsposition
    	
    			for(i=0;i<4;i++)                // Zählschleife: Wiederholt das Folgende 4x
    			{
    				vBeep(520,80);              // Lässt den Yeti einen Ton erzeugen
    				vFrontLEDs(LEFT);           // Schaltet das linke Auge des Yetis an
    				vMoveBody(12,10);           // Bewegt den Yeti nach links
    	
    				vBeep(580,80);              // Lässt den Yeti einen Ton erzeugen
    				vFrontLEDs(RIGHT);          // Schaltet das rechte Auge des Yetis an
    				vMoveBody(-12,10);          // Bewegt den Yeti nach rechts
    				vMoveBody(0,10);            // Bewegt den Yeti in Ruheposition
    			}                               // Ende der Zählschleife
    	
    			vBeep(420,80);                  // Lässt den Yeti einen Ton erzeugen
    			vFrontLEDs(OFF);                // Schaltet beide Augen des Yetis aus
    	
    			vStandUpright();                // Yeti stellt sich in die Ausgangsposition
    			
    		}
    	   
    	}                                   	// Ende der Unendlichschleife: Startet die Unendlichschleife von vorne
    	return 0;   
    }                      					  	// Verlässt die Main
    Kann mir bitte jemand helfen? [-o<

    MFG
    Mandy

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    Hallo Mandy,

    ich habe zwar keinen Yeti, aber soweit ich die Doku kenne, muß die vInitUltrasoon() Funktion immer vor jedem Auruf der ucGetObjectDistanceInCentimeters() Funktion aufgerufen werden, wenn man vBeep oder vRs232Write Funktionen benutzt. Also innerhalb der while Schleife.

    Etwa so:
    Code:
    ...
      while(1)
      {
         vInitUltrasoon();
         if(ucGetObjectDistanceInCentimeters()<=10)
         {
         ...

Berechtigungen

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

LiTime Speicher und Akkus