Hallo,
danke für die schnelle Antwort.
Zu 1)
Hier mal mein Quellcode, wie gesagt ist nichts großes war nur zum Bumper und Motor testen. So wie er da steht ist es mit Endlosschleife da Abbruchbedingung x<4 ist und x nirgends 4< wird, so funktioniert es, lass ich dann beide Bumper los, fährt er auch wieder.
Änder ich allerdings die Abbruchbedingung in x<3 und drücke dann beide, müsste er ja den Motorspeed auf 0 setzen und dürfte nirgendwo sonst hinlaufen und danach nur noch die Ausgabe "Aus" ausgeben. Soweit tut er das auch bis eben auf den MotorSpeed.
Irgend eine Idee?
Code:
#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase(); // Always call this first! The Processor will not work
// correctly otherwise.
setLEDs(0b111111); // Turn all LEDs on
mSleep(500); // delay 500ms
setLEDs(0b000000); // All LEDs off
//left_power = 5;
//right_power = 2;
powerON(); // Turn Encoders, Motor Current Sensors
changeDirection(FWD);
moveAtSpeed(0,0);
writeString("An\n");
int x = 0;
while(x<4)
{
if (bumper_left && bumper_right)
{
x=3;
writeString("Speed auf 0|0\n");
//while(bumper_left && bumper_right)
moveAtSpeed(0,0);
//task_RP6System();
//}
}
else if (bumper_right)
{
x=1;
moveAtSpeed(20,50);
writeString("Speed auf 20|50\n");
}
else if (bumper_left)
{
x=2;
moveAtSpeed(50,20);
writeString("Speed auf 50|20\n");
}
else if (!bumper_left && !bumper_right)
{
x=0;
moveAtSpeed(50,50);
writeString("Speed auf 50/50\n");
}
writeString("x="); writeInteger(x, DEC); writeString("\n");
task_RP6System();
}
writeString("Aus");
//stop();
return 0;
}
zu 2) ja den Thread habe ich gesehen, aber das ist nicht ganz das was ich suche. Das ist mehr oder weniger die Sammlung der premade RP6 Lib Prozeduren (z.B. eben die moveAtSpeed(x,y); Prozedur), welche mitgeliefert wird, ich Suche allerdings viel mehr nach einer Erklärung der Befehle aus der sich dann diese fertigen Prozeduren zusammen setzen
Bsp: Prozedur getBumperLeft setzt sich aus folgendem zusammen:
Code:
uint8_t getBumperLeft(void)
{
PORTB &= ~SL6;
DDRB &= ~SL6;
nop();
uint8_t tmp = PINB & SL6;
if(statusLEDs.LED6) {
DDRB |= SL6;
PORTB |= SL6;
}
return tmp;
}
Lesezeichen