-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 13

Thema: Beim abbiegen/ drehen blinken

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228

    Beim abbiegen/ drehen blinken

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Guten Abend,

    hab an meinen RP6 4 Gelbe LEDs angeklemmt, jeweils 2 links und 2 rechts.
    Nun weiß ich absolut nicht weiter wie ich ihne dazu bekomme beim Drehen/ Abbiegen zu "blinken".

    Dadurch das ich für das blinken eine eigene Funktion gemacht habe, bleibt er da in der while- Schleife hängen und blinkt ewig. Ich weiß aber absolut nicht wie ich es umändern könnte das es funktioniert.

    Code:
    #include "RP6RobotBaseLib.h"
    
    void blink (void){
        DDRA |= ADC1;
        while(0){
            PORTA |= ADC1;
            mSleep(500);
            PORTA &= ~ADC1;
            mSleep(500);
        }
    }
    
    int main (void){
    	initRobotBase();
    	powerON();
        int i;
        DDRC |= (SDA | SCL);
        PORTC |= SDA;
    	for(i = 0; i < 2; i++){
            PORTC &= ~SCL;
    		move(80, FWD, DIST_MM(700), BLOCKING);
            blink();
            rotate(60, RIGHT, 120, BLOCKING);
    		move(80, FWD, DIST_MM(700), BLOCKING);
            blink();
            rotate(60, RIGHT, 120, BLOCKING);
    		move(80, FWD, DIST_MM(700), BLOCKING);
            blink();
            rotate(60, RIGHT, 120, BLOCKING);
            PORTC |= SCL;
    		mSleep(2500);
        }
    	while(1){
            task_RP6System();
    	}
    	return 0;
    }
    MfG

    Ezalo

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    So vielleicht:
    Code:
    void blink (void)
    {
    	char anzahl=4; // viermal blinken
    	DDRA |= ADC1;
    	while(anzahl--)
    	{
    		PORTA |= ADC1;
    		mSleep(500);
    		PORTA &= ~ADC1;
    		mSleep(500);
    	}
    }
    (ungetestet)

    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 Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    Hab halt den ganzen Tag schon gegrübelt obs auch irgendwie möglich ist solange zu blinken bis der Endpunkt von rotate erreicht ist. Daher bin ich auch garnicht auf sowas gekommen ^^

    Ist das denn noch so möglich wie meine Gedanken waren?

    Danke erstmal für die Idee.

    Edit: Aber dann blinkt er ja wenn vor dem abbiegen und nicht während des abbiegens.

    MfG

    Ezalo

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Aber dann blinkt er ja (wenn) vor dem abbiegen und nicht während des abbiegens.
    Klar, das war ja deine Vorgabe:

    blink();
    rotate(60, RIGHT, 120, BLOCKING);

    Erst wenn das Blinken beendet ist beginnt die Drehung. So wie du im Moment programmierst wird jeder Befehl bis zu seinem Ende ausgeführt und erst dann der nächste Befehl gestartet. Was dir jetzt noch fehlt ist das Task-System des RP6. Grundgerüst für eine Drehung mit gleichzeitigem Blinken wäre etwa so:

    Code:
    #include "RP6RobotBaseLib.h"
    
    int main (void)
    {
    	initRobotBase();
    	powerON();
    	int i;
    	DDRC |= (SDA | SCL);
    	PORTC |= SDA;
    	DDRA |= ADC1;
    	PORTA &= ~ADC1;
    	startStopwatch1();
    	for(i = 0; i < 6; i++)
    	{
    		PORTC &= ~SCL;
    		move(80, FWD, DIST_MM(700), BLOCKING);
    		rotate(60, RIGHT, 120, NON_BLOCKING);
    		setStopwatch1(0);
    		while(!isMovementComplete())
    		{
    			if(getStopwatch1() >= 200) PORTA |= ADC1;
    			if(getStopwatch1() >= 500) { PORTA &= ~ADC1; setStopwatch1(0); }
    			task_RP6System();
    		}
    
    		if(i==2 || i==5) // :)
    		{
    			PORTC |= SCL;
    			mSleep(2500);
    		}
    	}
    	while(1); // fertig
       return 0;
    }
    (ungetestet)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    Nun weiß ich absolut nicht weiter wie ich ihne dazu bekomme beim Drehen/ Abbiegen zu "blinken".

    Dadurch das ich für das blinken eine eigene Funktion gemacht habe, bleibt er da in der while- Schleife hängen und blinkt ewig. Ich weiß aber absolut nicht wie ich es umändern könnte das es funktioniert.
    Aber das drückt ja eigentlich aus das ich nur nicht weiß wie ich das programmieren soll und es nicht dem entspricht was ich erreichen wollte

    Und danke für den Code, werds mal testen

    Edit: Funktioniert soweit nur die Blinkled bleibt an, aber das lässt sich ja lösen ^^ Ich hab auch das Problem das er seit heute mitten im Programm "abstürzt". Also das Programm startet, läuft ein Stück. Dann geht alles aus und er bootet neu. Was ist da los? <<-- Ist das ein Problem wenn ich das UART Kabel nicht entferne?

    MfG

    Ezalo

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Funktioniert soweit nur die Blinkled bleibt an,...
    Sorry:
    Code:
    		while(!isMovementComplete())
    		{
    			if(getStopwatch1() >= 200) PORTA |= ADC1;
    			if(getStopwatch1() >= 500) { PORTA &= ~ADC1; setStopwatch1(0); }
    			task_RP6System();
    		}
    		PORTA &= ~ADC1; // LED ausschalten
    Aber das drückt ja eigentlich aus...
    Meno, das habe ich "überlesen". Nochmals sorry ;)

    Dann geht alles aus und er bootet neu.
    Akkus leer?

    Du hast das schon recht gut im Griff ;)

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    07.07.2010
    Alter
    28
    Beiträge
    228
    1. Sorry: es stand doch ungetestet drunter, entfällt also ;o)
    2. Sorry: Wie soll ich das jetzt verstehen? ^^
    3. Akku leer?: Nein, UART Kabel entfernt -> kein reboot mehr bei Programmausführung :-/
    4. Wie ich hab das schon gut im Griff?

    MfG

    Ezalo

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    25.02.2004
    Ort
    Wilhelmshaven
    Beiträge
    129
    Ich würde das ganze Problem folgendermaßen angehen:

    LEDs über TimerISR toggeln.
    Blinkfrequenz mittels Timer konfigurieren und dann vor dem Fahrmanöver Timer starten und danach stoppen.

    Finde diesen Ansatz jetzt recht einfach und obendrein hast Du keine Wartezeiten, die unnötig bremsen, oder habe ich ein Gegenargument zu der Timerlösung überlesen (Habe kein RP6)?

    Gruß

    rockin_santa

  9. #9
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Hallo

    ...vor dem Fahrmanöver Timer starten und danach stoppen.
    Das ist im Prinzip schon richtig. Allerdings muss man beachten, dass der RP6 quasi ein eigenes "Betriebssystem" besitzt. Seine Library befindet sich zwischen seiner Hardware und dem Programm und steuert alle Zugriffe auf den RP6 mit seinem Task-System. Deshalb halte ich die Verwendung der Stopwatches() für die besser Lösung.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von SlyD
    Registriert seit
    27.11.2003
    Ort
    Paderborn
    Alter
    32
    Beiträge
    1.514
    > Akkus

    das hatten wir ja schon in einem anderen Thread... teste doch mal wie stark die Akkuspannung im Selbsttest Test #8 bei verschiedenen Geschwindigkeiten einbricht (UBat Wert am ende der Ausgabezeilen beachten).

    Natürlich im aktuellen Zustand der Akkus! Und danach dann mal alle einzeln aufladen und nochmal testen...

    MfG,
    SlyD

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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