danke, hat sich erledigt! das mit dem uint16_t zahler (void) ist ja ne funktion! ich habe die variablen jetzt nicht definiert, sondert als 16bitvariable angegeben!(uint16_t a). jetzt klappt alles super!
danke an alle,
roboman
Druckbare Version
danke, hat sich erledigt! das mit dem uint16_t zahler (void) ist ja ne funktion! ich habe die variablen jetzt nicht definiert, sondert als 16bitvariable angegeben!(uint16_t a). jetzt klappt alles super!
danke an alle,
roboman
sry, doch noch ein fehler:
jetzt kommt die fehlermeldung:error: expected expression before 'else'
in den zeilen steht:
uint16_t behaviour_avoid(void)
{
static uint8_t last_obstacle = LEFT;
static uint8_t obstacle_counter = 0;
switch(avoid.state)
{
case IDLE:
if(obstacle_right && obstacle_left)
f++;
avoid.state = AVOID_OBSTACLE_MIDDLE;
else if(obstacle_left)
e++;
avoid.state = AVOID_OBSTACLE_LEFT;
else if(obstacle_right)
avoid.state = AVOID_OBSTACLE_RIGHT;
d++;
break;
bitte um hilfe, was falsch sein könnte!
roboman
hat sich schon erledigt
noch ne frage zu nem anderen code! ich will, dass ein servo sich hin und her bewegt! dazu klemme ich den signaleingang vom servo an eine LED!
wenn ich den code ausführe, bewegt sich der servo nach rechts(soweit richtig) aber danach immer weiter nach rechts, obwohl er schon längst die maximale position (20) erreicht hat!
hier der code:
#include "RP6RobotBaseLib.h"
uint16_t servopos = 20;
int main (void)
{
initRobotBase();
while (true)
{
task_RP6System();
servoposi();
}
return 0;
}
void servotrim(void)
{
setLEDs(0b000000);
sleep(200-servopos);
setLEDs(0b010000);
sleep(servopos);
}
void servoposi(void)
{
if(servopos==10)
{
while(servopos != 20)
{
servopos++;
servotrim();
mSleep(50);
}
}
else if(servopos==20)
{
while(servopos != 10)
{
servopos--;
servotrim();
mSleep(50);
}
}
}
Hallo
Zufällig hängt mein neuer Greifer auch auf den LEDs, deshalb kann ich es einfach testen. Der Fehler war die vertauschte Logik des Steuersignals:
Damit macht mein RP6 das:Code:#include "RP6RobotBaseLib.h"
uint16_t servopos = 20;
void servotrim(void)
{
setLEDs(1);
sleep(servopos);
setLEDs(0);
sleep(200-servopos);
}
void servoposi(void)
{
if(servopos==10)
{
while(servopos != 20)
{
servopos++;
servotrim();
mSleep(50);
}
}
else if(servopos==20)
{
while(servopos != 10)
{
servopos--;
servotrim();
mSleep(50);
}
}
}
int main (void)
{
initRobotBase();
while (true)
{
task_RP6System();
servoposi();
}
return 0;
}
Bild hier
http://www.youtube.com/watch?v=44955UWDgyA
Gruß
mic
an sich funktioniert es ja, ich will nur, dass der servo sich langsamer bewegt, aber ohne zu ruckeln
hab jetzt mSleep vor der inkrementierung eingefügt, funktioniert super!
frage habt ihr die servos einfach mit an die led gelötet oder habt ihr die leds abgebaut?
lg
Hallo
Viele Anschlüsse am RP6 sind zusätzlich auf freien Lötaugen verfügbar, so sind die LEDs/Bumpers auch mit IO1-4 bzw. BPL/BPR verbunden. Hier sieht man meine Platine mit eingelöteten Stiftleisten:
Bild hier
(Anklicken für größeres Bild. Mehr Pics und Erklärungen:
https://www.roboternetz.de/phpBB2/ze...=356247#356247)
Das funktionierte eigentlich recht gut, allerdings habe ich inzwischen meinen USRBUS mit den LEDs belegt. Das ist langfristig wohl die bessere Lösung:
(Aus: https://www.roboternetz.de/phpBB2/ze...=439019#439019)Code:SL1 1 - 2 GND
SL2 3 - 4 Vcc
SL3 5 - 6 ADC0
SL4 7 - 8 ADC7
SL5 9 - 10 ADC1
SL6 10- 12 Vcc
frei 13- 14 GND
Gruß
mic
Hallo,
sry ich wollte nicht extra ein neues forum aufmachen.
mein prob is ich will 2 servos gleihzeitig ansteuern und habs so gemacht:aber ich kann sie nicht gleichzeitig ansteuern wie kann ich es ansters machen? oder geht das mit disen code nicht?Code:#include "RP6RobotBaseLib.h"
uint16_t servopos = 20;
uint16_t servopos2 = 20;
void servotrim(void)
{
setLEDs(0b001000);
sleep(servopos);
setLEDs(0);
sleep(200-servopos);
mSleep(50);
}
void servoposi(void)
{
if(servopos==8)
{
while(servopos != 20)
{
servopos++;
servotrim();
mSleep(50);
}
}
else if(servopos==20)
{
while(servopos != 8)
{
servopos--;
servotrim();
mSleep(50);
}
}
}
//***********************SERVO2*******************************************************+
void servotrim2(void)
{
setLEDs(1);
sleep(servopos2);
setLEDs(0);
sleep(200-servopos2);
mSleep(50);
}
void servoposi2(void)
{
if(servopos==8)
{
while(servopos2 != 20)
{
servopos2++;
servotrim();
mSleep(50);
}
}
else if(servopos2==20)
{
while(servopos2 != 8)
{
servopos2--;
servotrim2();
mSleep(50);
}
}
}
int main (void)
{
initRobotBase();
powerON();
while (true)
{
task_RP6System();
servoposi();
servoposi2();
}
return 0;
}