PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : YETI- Programmierung: Ultraschallplatine



Mandy88
14.04.2010, 08:40
Hallo Leute!

Ich habe mal wieder eine Frage. :-k
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. :-k

/----------------------------------------------------------------------
// 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

m.a.r.v.i.n
14.04.2010, 11:07
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:


...
while(1)
{
vInitUltrasoon();
if(ucGetObjectDistanceInCentimeters()<=10)
{
...