hi, wo genau in der switch anweisung ist denn die ecke?also welche anweisung führt die 90° drehung aus?
edit: hab´s gefunden, wer lesen kann ist klar im vorteil 
probier mal den code:
Code:
#include "asuro.h"
//Schwellwert für die Hell/Dunkel-Unterscheidung
//Eventuell muss damit etwas variiert werden
#define TRIGGERLEVEL 680
#define HYSTERESIS 30
#define LOW 0
#define HIGH 1
int main(void)
{
unsigned int data [2];
signed int status [2]={0,0};
unsigned int speed=255;
//Startwert für halbe Motorgeschwindigkeit
signed int difference=0;
unsigned int distance=0;
int i;
int zaehler=0;
Init();
MotorDir(FWD,FWD);
BackLED(OFF,OFF);
while (zaehler<4)
{
switch(distance) {
//Am Anfang der Strecke Vollgas
case 0:MotorDir(FWD,FWD);
MotorSpeed(speed,speed);
break;
//Am Ende langsamer werden...
case 215:speed=200;
break;
case 230:speed=150;
break;
//...und stehen bleiben
case 251:MotorDir(BREAK,BREAK);
//etwas warten, bis der Roboter wirklich steht
for (i=0; i<100; i++)
{
Sleep(255); }
//auf der Stelle nach links drehen
MotorDir(RWD,FWD);
speed=255;
//und noch vermeiden, dass die Verzögerung
//mehrmals aufgerufen wird
distance=252;
zaehler++;
break;
case 282: speed=200;
break;
case 288: speed=150;
break;
case 292: MotorDir(BREAK,BREAK);
for (i=0; i<100; i++)
{
Sleep(255); }
MotorDir(FWD,FWD);
speed=255;
distance=0;
//und noch vermeiden, dass die Verzögerung
//mehrmals aufgerufen wird
break;
}
//Helligkeitswerte der Lichtschranken auslesen
OdometrieData(data);
//Wechsel linker Sensor von niedrig auf hoch?
if((status[0]==LOW)&&(data[0]>TRIGGERLEVEL+HYSTERESIS)) {
status[0]=HIGH;
difference++;
distance++; }
//Wechsel linker Sensor von hoch auf niedrig?
if((status[0]==HIGH)&&(data[0]<TRIGGERLEVEL-HYSTERESIS)) {
status[0]=LOW;
difference++;
distance++; }
//Wechsel rechter Sensor von niedrig auf hoch?
if((status[1]==LOW)&&(data[1]>TRIGGERLEVEL+HYSTERESIS)) {
status[1]=HIGH;
difference--; }
//Wechsel rechter Sensor von hoch auf niedrig?
if((status[1]==HIGH)&&(data[1]<TRIGGERLEVEL-HYSTERESIS)) {
status[1]=LOW;
difference--; }
//zur Sicherheit: verhindern, dass der Differenzzähler den erlaubten
//Wertebereich verlässt
if(difference<-155) difference=-155;
if(difference>155) difference=155;
//StatusLED noch entsprechend der erkannten Segmente aufleuchten
//lassen, grün für links, rot für rechts
StatusLED(status[0]+status[1]*2);
//Zähldifferenz passemd auf die Motoren verteilen
if(difference>0) MotorSpeed(155-difference,155);
else MotorSpeed(155,155+difference);
}
return 0;
}
mfg jeffrey
Lesezeichen