hi,
jetzt bleibt der RP 6 zumindest stehen, wenn er mit dem bumper an der bake angekommen ist
, das video muss noch ein bischen warten, die lichtverhältnisse sind beim bedeckten himmel nicht gut genug 
nun möchte ich weitermachen und in dem beispiel "RP6Control_10_Move2.c" habe ich ein dankbares objekt zum experimentieren gefunden. Komplett verstanden habe ich es noch nicht, aber deshalb will ich ja experimentieren...
dort wird auch auf einen niedrigen batteriestand reagiert:
Code:
// Behaviour check low Battery:
#define BATTERY_LOW 1
behaviour_command_t checkLowBattery = {0, 0, FWD,
false, false, 0, IDLE};
/**
* In this behaviour routine, we have nothing to do
*/
void behaviour_checkLowBattery(void)
{
}
/**
* This is a new Event Handler and it gets called when the Battery Voltage
* is getting low! The Parameter isVoltageLow is true, when the voltage
* is low and false, when the voltage is OK.
*/
void batteryVoltageLow(uint8_t isVoltageLow)
{
if(isVoltageLow)
checkLowBattery.state = BATTERY_LOW;
bake_suche();
}
die abfrage "if(isVoltageLow)" habe ich um die funktion bake_suche() ergänzt:
Code:
void bake_suche(void)
{
// accuzustand();
setLEDs(0b0100);
writeString_P("bake_suche_1 \n");
writeChar('\n');
initRP6Control();
initLCD();
startStopwatch3();
t=0;
do
{
if(getStopwatch3() > 50)
{
temp = read_IR_value();
if (temp !=0)
{
setMultiIOLED1(1);
setMultiIOLED1(0);
rotate(80, RIGHT, 5, false);
temp = read_IR_value();
if (temp == 0) stop(); //break;
if(bumper_left && bumper_right) //stop();//break;
{
stop();
// break;
}
}
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;
writeInteger(x, DEC);
writeChar('\n');
writeInteger(y, DEC);
writeChar('\n');
writeInteger(z, DEC);
writeChar('\n');
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)
{
stop();
// move(100, BWD, DIST_MM(200), false);
// break;
}
}
}
}
}
}
task_checkINT0();
task_I2CTWI();
}
while(!bumper_left && !bumper_right);
stop();
}
das ganze lässt sich auch kompilieren, also von daher steht dem experimentieren nur eines im weg: auf welchem weg holt sich das "Behaviour check low Battery:" die batteriewerte? Das habe ich leider nicht gefunden...
Um nicht so lange warten zu müssen bis der akku wirklich leer ist, möchte ich die abfrage irgendwie beeinflussen...
Lesezeichen