hi allerseits,
eigentlich wollte ich hier ein video reinstellen, dass alles klappt, klappt ja auch aber nur im prinzip. Der RP6 findet brav die bake, fährt hin, bleibt aber per abfrage der bumper nicht zuverlässig genung stehen. mal tut er das, dann wieder nicht, ich glaube, ich habe nun in dem code die möglichkeiten die bumperabfrage zu plazieren ziemlich ausgeschöpft...
bzw. am ende der do-while schleife:Code:task_checkINT0();
task_I2CTWI();
if(bumper_left && bumper_right)
{
break;
stop();
}
evtl. liegt dort das problem, die abfrage der beiden task liegt innerhalb (am ende) der do-whileschleife? Könnte sich bitte jemand den code anschauen?Code:while(!bumper_left && !bumper_right);
break;
stop();
das wird oberhalb der hauptschleife aufgerufen:
Code:I2CTWI_initMaster(100);
I2CTWI_setTransmissionErrorHandler(I2C_transmissionError);
I2CTWI_setRequestedDataReadyHandler(I2C_requestedDataReady);
Code:case 3://
setLEDs(0b0100);
writeString_P("suche der bake \n");
writeChar('\n');
initRP6Control();
initLCD();
startStopwatch3();
t=0;
while(true)
{
do
{
if(getStopwatch3() > 50)
{
temp = read_IR_value();
if (temp == 0)
{
x = getStopwatch3();
setMultiIOLED3(1);
setMultiIOLED3(0);
if (t<10)
{
t++;
if (t == 10)
{
y = getStopwatch3();
z = y-x;
t=0;
setStopwatch3(0);
if (z< 600)
{
move(100, FWD, DIST_MM(100), false);
setStopwatch3(0);
t=0;
mSleep(400);
task_checkINT0();
task_I2CTWI();
if(bumper_left && bumper_right)
{
break;
stop();
}
}
}
}
}
else
{
setMultiIOLED1(1);
setMultiIOLED1(0);
rotate(80, RIGHT, 1, false);
setStopwatch3(0);
}
task_checkINT0();
task_I2CTWI();
if(bumper_left && bumper_right)
{
break;
stop();
}
}
task_checkINT0();
task_I2CTWI();
}
while(!bumper_left && !bumper_right);
break;
stop();
/**************************/
uint8_t key_1;
mSleep(100);
key_1 = getMultiIOPressedButtonNumber();
if(key_1 != 0) break;
stop();
/**************************/
}
break;