so jetzt müssen da noch bumper und IR dazu, dann habe ich mienen staubwischer
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:
NACHTEIL: der fährt dann erstmal 2m, oder eben 2cm an die wand und dann x sec gegen die wand, bis er es merktCode:if(bumper nicht gedrückt) { // hier dein Programmteil } else { // die Bumperauswertung }
Bessere und schonenedere Variante:
mit Zähler und while-schleife
setze für "(keine) Bumper gedrückt" eben den passenden Ausdruck ein (also z.B. "if(PIND & (1 << PD5))" )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 }
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
Gruß, AlKi
Jeder Mensch lebt wie ein Uhrwerk, wie ein Computer programmiert...
==> UMPROGRAMMIEREN!
Kubuntu
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 ...
Lesezeichen