PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Need Help!! bei programm



M.Stoni
27.01.2010, 18:51
Hallo an alle!!

habe bei einem programm probleme
Wollte das programm RP6_BASE_SERVO_01 bearbeiten:

// Uncommented Version of RP6Base_Servo_01.c
// written by D. Ottensmeyer
// ------------------------------------------------------------------------------------------

#include "RP6RobotBaseLib.h"

#define SERVO_OUT SDA

#define LEFT_TOUCH 550
#define RIGHT_TOUCH 254
#define PULSE_ADJUST 4
#define PULSE_REPETITION 19

void bumpersStateChanged(void)
{
if(bumper_left)
{
moveAtSpeed(0,0);
setLEDs(0b010000);
startStopwatch1();
}
if(bumper_right)
{
moveAtSpeed(0,0);
setLEDs(0b010001);
startStopwatch1();
}
}

void blink(void)
{
if(getStopwatch1() > 500)
{
statusLEDs.LED2 = !statusLEDs.LED2;
statusLEDs.LED5 = !statusLEDs.LED5;
updateStatusLEDs();
setStopwatch1(0);
}
}

void initSERVO(void)
{
DDRC |= SERVO_OUT;
PORTC &= ~SERVO_OUT;
startStopwatch1();
}

void pulseSERVO(uint8_t position)
{
cli();
PORTC |= SERVO_OUT;
delayCycles(LEFT_TOUCH);
while (position--)
{
delayCycles(PULSE_ADJUST);
}
PORTC &= ~SERVO_OUT;
sei();
}

void task_SERVO(void)
{static uint8_t pos;
if (getStopwatch1() > PULSE_REPETITION)
{
pulseSERVO(pos);
if (getStopwatch2() > 48) {
pos++;
if (pos > RIGHT_TOUCH) {pos = 0;}
setStopwatch2(0);
}
setStopwatch1(0);
}
}

int main(void)
{
initRobotBase();
setLEDs(0b010001);
mSleep(2500);

BUMPERS_setStateChangedHandler(bumpersStateChanged );


powerON();



initSERVO();


while(true)
{
task_SERVO();
task_RP6System();


setLEDs(0b010001);
move(100, FWD, DIST_MM(300), true);
rotate(50, RIGHT, 180, true);
move(200, FWD, DIST_MM(300), true);
rotate(50, LEFT, 180, true);


}
return 0;}

dass robby nach vorne fährt wendet, und an die start pos. zurück kehrt!!
aber sich das SERVO die ganze zeit nach links dreht und sich langsam zurück nach rechts stellt!

Das original servo prog. funktioniert einwandfrei!!!
wenn ich die fahrt-, und bumper funktionen dazu schreibe,
zuckt der SERVO mal kurz dann is ende, die fahrt und bumper befehle
werden aber ab gearbeitet!!!!!

Was also tuen ausser Weinen????


ps: Prog. anfänger!!b :shock:


DANKE SCHON MAL FÜR DIE HILFE

M.Stoni
27.01.2010, 19:04
smilie im programm is ungewollt!!! da gehört 8 )
if (getStopwatch2() > 48 ) {

suicide
27.01.2010, 19:24
Die Methode task_SERVO() wird exakt einmal ausgeführt, sie sollte aber vermutlich häufiger aufgerufen werden um die Position des Servos zu verändern.
Entweder arbeitest du mit einer Statemachine und setzt Ereignisse für jeden Fahrbefehl oder du rufst die Fahrbefehle mit blocking=false auf und packst hinter jeden Fahrbefehl eine

while(!isMovementComplete()){
task_SERVO();
}
Schleife.

Grüße,
Jan

P.S.: mit [ code ] und [ /code ] wird der Quelltext auch schön dargestellt ;-)

M.Stoni
28.01.2010, 12:00
Danke für die hilfe werde ich sofort ausprobieren!
und Danke fur den tipp mit code!!!!!!!!!!

danke mfg stoni