Hallo
bumper_left und bumper_right funktionieren nur zusammen mit task_Bumpers(). Ohne das Tasksystem des RP6 kann man die Bumpers aber auch direkt mit getBumperLeft() und getBumperRight() auswerten:
Die Funktionen der Bumper in der Datei RP6RobotBaseLib.c der RP6-Library.Code:/*****************************************************************************/ // Bumpers: /** * Returns true if the the left Bumper is hit. * This function turns off the LED connected to the port, reads the Bumper * value and restores previous LED state afterwards! * * Example: * * if(getBumperLeft()) * // do something */ uint8_t getBumperLeft(void) { PORTB &= ~SL6; DDRB &= ~SL6; nop(); uint8_t tmp = PINB & SL6; if(statusLEDs.LED6) { DDRB |= SL6; PORTB |= SL6; } return tmp; } /** * Returns true if the the right Bumper is hit. * This function turns off the LED connected to the port, reads the Bumper * value and restores previous LED state afterwards! * * Example: * * if(getBumperRight()) * // do something */ uint8_t getBumperRight(void) { PORTC &= ~SL3; DDRC &= ~SL3; nop(); uint8_t tmp = PINC & SL3; if(statusLEDs.LED3) { DDRC |= SL3; PORTC |= SL3; } return tmp; } // ------------------------------- // Bumpers State changed handler: void BUMPERS_stateChanged_DUMMY(void){} static void (*BUMPERS_stateChangedHandler)(void) = BUMPERS_stateChanged_DUMMY; /** * Use this function to set the Bumpers state change handler. * */ void BUMPERS_setStateChangedHandler(void (*bumperHandler)(void)) { BUMPERS_stateChangedHandler = bumperHandler; } // ------------------------------- volatile uint8_t bumper_timer; uint8_t bumper_left; uint8_t bumper_right; /** * If you call this frequently out of the mainloop (or use task_RP6System which * calls this routine for you), the global bumper_left and bumper_right * variables are updated automatically every 50ms and can be used everywhere * in your program. It can also call an event handler routine, that you * need to register with BUMPERS_setStateChangedHandler before. */ void task_Bumpers(void) { if(bumper_timer > 50) { // 50ms uint8_t left = getBumperLeft(); uint8_t right = getBumperRight(); if(bumper_left != left || bumper_right != right) { bumper_left = left; bumper_right = right; BUMPERS_stateChangedHandler(); } bumper_timer = 0; } }
Da ich kein M32 besitze verstehe ich nicht ganz, was du mit dem Programmausschnitt beabsichtigst. Ich vermute, es handelt sich um Code für die RP6-Base, weil das M32 selbst keine Bumper hat?
Gruß
mic






Zitieren

Lesezeichen