bloß zeigt er jetzt entweder den batt status an oder er fährt, je nach dem was ich in main zuerst ablaufen lasse -echt cool haha weiß da jemand was ?
Hi,
in "void behaviour_cruise(void)" ist die geschweifte Klammer vor setLEDs zuviel.
Zusaetzlich ist in "void Batt(void)" die Klammer vor der while-Schleife zuviel. (Falls ich mich nicht verzaehlt habe ...)
Ich wuerde dringend empfehlen einen Editor zu verwenden der es erlaubt die Klammerung zu "ueberwachen" (einfaerben, springen, etc.). Ein defensiverer Programmierstil kann auch helfen (d.h. bei Beginn einer Anweisung, welche Klammerung benoetigt, diese SOFORT zu setzen - oeffnende und schliessende, dann vergisst man auch keine)
HTH
Kay
bloß zeigt er jetzt entweder den batt status an oder er fährt, je nach dem was ich in main zuerst ablaufen lasse -echt cool haha weiß da jemand was ?
kannst du vielleicht den jetzt richtigen Code hochladen.
klarCode:// Cruise Behaviour: #include "RP6RobotBaseLib.h" #define IDLE 0 #define TURN_SPEED 50 #define MOVE_SPEED 100 #define MOVE_FORWARDS 1 void behaviour_cruise(void) { uint8_t turn_direction = LEFT; setLEDs(0b100100); 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); while (true) { 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; }
du sagst im Batt() "while(True)", also ist eine endlose Schleife.
mach einfach das "while(True)" und die dazugehöringen Klammern weg.
und mach uas dem "BLOCKING" eine "0"
Also:
Code:// Cruise Behaviour: #include "RP6RobotBaseLib.h" #define IDLE 0 #define TURN_SPEED 50 #define MOVE_SPEED 100 #define MOVE_FORWARDS 1 void behaviour_cruise(void) { uint8_t turn_direction = LEFT; setLEDs(0b100100); move(MOVE_SPEED, FWD, DIST_MM(2000), 0); rotate(TURN_SPEED, turn_direction, 102, 0); move(MOVE_SPEED, FWD, DIST_MM(100),0); rotate(TURN_SPEED, turn_direction, 102, 0); move(MOVE_SPEED, FWD, DIST_MM(2000),0); rotate(TURN_SPEED, RIGHT, 102, 0); move(MOVE_SPEED, FWD, DIST_MM(100), 0); rotate(TURN_SPEED, RIGHT, 102, 0); } // akku_load: void Batt(void) { 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(); powerON(); startStopwatch1(); while(true) { task_ADC(); Batt(); behaviour_cruise(); task_RP6System(); behaviour_cruise(); } return 0; }
das "startStopwatch1()" startest du in der main und das BLOCKING ausschalten, das setStopwatch(400); muss weg das hat keinen Sinn.
Das "while(True)" muss auch weg, sonst ist es endlose.
Code nicht getestet.
MfG blenderkid
[/code]
ja das merkt man ... also wenn ich alle Blockings weg mache dreht ersich im kreis, zeigt aber auch die batt an...
@KayH zu viele klammern schaden nicht, nur dann wenn man die übersicht verliehrt *grins* - mein bluefish zeigt leider keine klammerhilfe an... aber schaue mal ob es das programmers notepad nicht auch für linux gibt ...
hol dir "gvim" mit "apt-get install"
...also wenn ich alle Blockings weg mache dreht ersich im kreis, zeigt aber auch die batt an...
soll er nicht genau das machen ?
nee er soll 2m vor, links im 90° winkel rotieren, 10cm vor wieder links im 90° winkel drehen und anschließend wieder 2m vor, dann 90° nach rechts rotieren 10cm vor 90° nach rechts rotieren und dann von forne...
ist das aus dem code nicht ersichtlich ?
Lesezeichen