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.....
Lesezeichen