ich habe jetzt das ganze programm nochmal gründlich überarbeitet.
das task_TeilErkannt(); habe ich jetzt im main teil in die while(true) schleife verschoben.


Code:
#include "RP6RobotBaseLib.h"

uint8_t i;
uint8_t a;
uint8_t n;
uint8_t p;
uint8_t z;

void task_teil_erkannt(void)
{if(PINA & (1<<4))
	{z=1;
writeString_P("Teil erkannt\n");}

if(z==1)
	{startStopwatch1();}

if(getStopwatch1()>3000)
	{z=0;
	setStopwatch1(0);}
}




void task_servo(void)
{

if(PINA & (1<<4)) // Greifer schließen 
{
while(i<52)
{
writeString_P("Greifer schließen\n");
PORTC |=(1<<0);
mSleep(1);
PORTC &=~ (1<<0);
mSleep(19);
p=0;
i++;}
}


if(i>50)	// Schwenkarm nach oben
{
while(a<52)
{
writeString_P("Schwenkarm nach oben\n");
PORTC |=(1<<1); 
mSleep(2);
PORTC &=~ (1<<1);
mSleep(18);
i=0;
a++;}
}


if(a>50) // Greifer öffnen                                      
{
while(n<40)
{
writeString_P("Greifer öffnen\n");
PORTC |=(1<<0);
mSleep(2);
PORTC &=~ (1<<0);
mSleep(18);
setStopwatch1(0);
a=0;
n++;}

}

if(n>38) //Schwenkarm wieder nach unten
{
while(p<20)
{
writeString_P("Schwenkarm wieder nach unten\n");
PORTC |=(1<<1);
mSleep(1);
PORTC &=~ (1<<1);
mSleep(19);
n=0;
p++;}
}

}

void task_fahren(void)
{if(z==1)
	{
	moveAtSpeed(0,0);
	writeString_P("Nicht Fahren\n");}
else if(z==0)
	{moveAtSpeed(50,50);
	writeString_P("Fahren\n");}

}


int main(void)
{
initRobotBase();

DDRC |=(1<<1);		//PORT 1 von Register C als Ausgang für Servo
DDRC |= (1<<0);	//PORT 0 von Register C als Ausgang für Servo
DDRA &=~ (1<<4);	//PORT 4 von Register A als Eingang für Reflexkoppler

powerON(); 
changeDirection(BWD);





while(true)
{task_servo();
task_teil_erkannt();
task_fahren();
task_RP6System();
}
return 0;
}












aber das alte problem besteht immer noch.
der roboter ignoriert den task_teil_erkannt() teil komplett.

die textmeldung "teil erkannt wird nie" ausgegeben.

nur die Servos bewegen sich korrekt.

irgendwie wird das alles durch die servo schleifen blockiert.

ich kann mir das nicht erklären.....