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
Lesezeichen