- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: bumper mit M32 auslesen[gelöst]

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.01.2010
    Ort
    Bielefeld
    Beiträge
    101

    bumper mit M32 auslesen[gelöst]

    Anzeige

    Praxistest und DIY Projekte
    hallo

    ich will mit meiner M32 die vorderen bumper auslesen. ich will einfach nur das er mir ne 1 ausgibt wenn rechts gedrückt wurde, ne 2 für links, ne 3 für beide und ne 0 wen keiner gedrückt ist.

    habe das bis jetzt so gemacht aber ich bekomme keine reaktion:
    Code:
    {
    	brr=0;
    	if(bumper_left && bumper_right)
    	{
    		brr=3;
    	}
    	else if(bumper_left)
    	{
    		brr=2;
    	}
    	else if(bumper_right)
    	{
    		brr=1;
    	}
    	return brr;
    }

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    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:

    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;
    	}
    }
    Die Funktionen der Bumper in der Datei RP6RobotBaseLib.c der RP6-Library.

    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
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.01.2010
    Ort
    Bielefeld
    Beiträge
    101
    in der m32 gibt es auch bumper_left & right das dann über den bus angesteuert bzw ausgelesen wird, aber warscheinlich funktioniert das dort auch nur mit einem statechangedhandler oder ne art task_bumpers muss ich mal irgend was ausprobieren.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.01.2010
    Ort
    Bielefeld
    Beiträge
    101
    habs hinbekommen:

    habe vergessen: task_checkINT0(); in die hauptschleife zu setzten jetzt geht alles so wie ich das will.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress