-
SO GEHTS :)
Code:
// Cruise Behaviour:
#include "RP6RobotBaseLib.h"
#define IDLE 0
#define TURN_SPEED 60
#define MOVE_SPEED 100
#define MOVE_FORWARDS 1
void behaviour_cruise(void)
{
uint8_t turn_direction = LEFT;
move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
rotate(TURN_SPEED, turn_direction, 102, BLOCKING);
move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
rotate(TURN_SPEED, turn_direction, 102, BLOCKING);
move(MOVE_SPEED, FWD, DIST_MM(2000), BLOCKING);
rotate(TURN_SPEED, RIGHT, 102, BLOCKING);
move(MOVE_SPEED, FWD, DIST_MM(100), BLOCKING);
rotate(TURN_SPEED, RIGHT, 102, BLOCKING);
}
// akku_load:
void Batt(void)
{
setStopwatch1(400);
startStopwatch1();
if(getStopwatch1() > 300)
{
writeString_P("\nADC Akku: Voll");
writeInteger(adcBat, DEC);
writeChar('\n');
if(adcBat > 900)
{
setLEDs(0b001001);
writeString_P("\nADC Akku: >9V");
}
else if(adcBat < 901 && adcBat > 800)
{
writeString_P("\nADC Akku: >8V");
statusLEDs.LED4 = !statusLEDs.LED4;
statusLEDs.LED1 = !statusLEDs.LED1;
updateStatusLEDs();
}
else if(adcBat < 801 && adcBat > 700)
{
setLEDs(0b000001);
writeString_P("\nADC Akku: >7V");
}
else if(adcBat < 701 && adcBat > 590)
{
statusLEDs.LED1 = !statusLEDs.LED1;
updateStatusLEDs();
writeString_P("\nADC Akku: Leer");
}
else if(adcBat < 591 && adcBat > 500)
{
writeString_P("\nADC Akku: Laden!");
powerOFF();
}
setStopwatch1(0);
}
}
int main (void)
{
initRobotBase();
startStopwatch1();
powerON();
while(true)
{
task_ADC();
Batt();
behaviour_cruise();
task_RP6System();
behaviour_cruise();
}
return 0;
}
-
so jetzt müssen da noch bumper und IR dazu, dann habe ich mienen staubwischer :)
-
wie mache ich das er dann bei bumperaktivität sein fahrprogramm unterbricht ... klar es gibt unzählige beispiele ... aber so einfach findi hc das noch nicht ...
Danke erstmal für die Hilfe von vorhin!
-
das geht am einfachsten mit ifs:
Code:
if(bumper nicht gedrückt)
{
// hier dein Programmteil
}
else
{
// die Bumperauswertung
}
NACHTEIL: der fährt dann erstmal 2m, oder eben 2cm an die wand und dann x sec gegen die wand, bis er es merkt
Bessere und schonenedere Variante:
mit Zähler und while-schleife
Code:
// benötigt Variable zaehler (für 2m fahren wird die wohl seeeehr hoch gezählt, mach also am besten long int oder mehr)
void main(void)
{
// initialisierungscode usw.
zaehler=0;
// Motoren an
while((zaehler < wasweißichwieviel) && (kein Bumper gedrückt))
{
zaehler++ ;
// wenn zaehler für die Zeitverzögerung nicht ausreicht,
// nochmal so ne "while"-schleife (MIT "&&(Bumper.... )" )
// evtl Batteriestand ausgeben
}
// Motoren aus
if(BumperX gedrükt) // auswertung für Bumper X
{
// deine Reaktion
{
// Auswertung der anderen Bumper
// dann dasselbe noch mit den anderen wende- und vorwärtsbewegungen
// NICHT VERGESSEN: zaehler nach jeder while-schleife wieder auf 0 setzen, aber NIE in einer while-schleife
}
setze für "(keine) Bumper gedrückt" eben den passenden Ausdruck ein (also z.B. "if(PIND & (1 << PD5))" )
und für "wasweißichwieviel" eben den Maximalwert, bis zu dem dein Robby die Variable "zaehler" zählen soll (die ist für die Zeitverzögerung zuständig)
EDIT: dann brauchst du deine stopwatch auch nicht mehr.
habs auch nochn bissle lesbarer gemacht
-
wofür ist eigentlich dein "setStopwatch1(400);" in Batt() ?
-
das ist ein fetzten unwissen heit ;)
-
Du hast unten in der Funktion Batt ein setStopwatch1(0);
Das wird doch am Anfang der Funktion eh wieder auf 400 gesetzt,
wiso machst du nicht das setStopwatch1(0) zu setStopwatch1(400) und machst dann oben die Zeile weg ?
Sparst du dir eine ( verwirrende ) Zeile Code.
-
Zu dem Fahren:
Du kannst ja machen, dass er solange geradeaus fährt bis er auf eine Wand trifft oder mleft_dist oder mright_dist = 2m oder 2cm ist. Wenn mleft_dist oder mright_dist =2m oder 2cm ist musst du sie natürlich wider auf Null stellen.
Dann hört er direkt auf zu fahren wenn er vor eine Wand trifft.
MfG blenderkid
-
mleft_dist bzw mright_dist misst die Strecke die der RP6 seit dem Programmstart gefahren ist.
-
ok ... "meißel"
ich werd mich mal dran setzen ... hoffe das klappt :)
ja das mit der stopwatch war dann klar ...
Danke, werd heute aber nicht mehr all zu viel schaffen ...