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:
die abfrage "if(isVoltageLow)" habe ich um die funktion bake_suche() ergänzt: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(); }
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...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(); }
Um nicht so lange warten zu müssen bis der akku wirklich leer ist, möchte ich die abfrage irgendwie beeinflussen...







Zitieren

Lesezeichen