- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 10

Thema: RP6_TV_ Remote

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.12.2008
    Beiträge
    6

    RP6_TV_ Remote

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo
    Hab versucht mit dem Beispielprogramm RP6Base_TV_REMOTE zu arbeiten.
    Meine Fernbedienung sendet.Ich bekomme auch Ausgaben welche Funktion
    er ausführen würde, im Terminal.
    Zeile 80 ist auskommentiert aber der Robby bewegt sich kein Stück.
    Sebsttest fkt ohne Prob. Hab ich noch irgendwo einen Denkfehler??

    Gruß Tom
    Angehängte Dateien Angehängte Dateien

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Also Du bekommst Ausgaben wie sie die Switch vorsieht mit:
    writeString_P("LEFT\n");
    writeString_P("RIGHT\n");
    usw. ?
    Und die LEDs schalten wie vorgegeben:
    setLEDs(0b100000);
    setLEDs(0b000100);
    usw.?
    Hm... wieso Zeile 80? Du meinst Zeile 10? 80 ist bei mir:
    #define ACCELERATE_VALUE 8
    Zeile 10 würde ich verstehen:
    //#define DO_NOT_MOVE
    Da später
    #ifndef DO_NOT_MOVE
    abgefragt wird, würde das aktivieren von DO_NOT_MOVE die Switsch entfernen.
    Stimmt denn die Zuordnung der keycodes mit Deiner Fernbedienung?
    Für Links und rechts müssten ja
    #define RC5_KEY_LEFT 21
    #define RC5_KEY_RIGHT 22
    Kommen was Dir bei
    writeString_P(" | Key Code:");
    writeInteger(rc5data.key_code, DEC);
    writeChar('\n');
    auch angezeigt werden müsste. Egal ob jetzt mit oder ohne DO_NOT_MOVE

    Damit wäre zumindest einzugrenzen wo der Fehler liegt...
    Poste doch mal eine Ausgabe aus dem Terminal beim drücken der Tasten incl. Info welche Tasten du gedrückt hast. Daran müsste man ja erkennen ob der Fehler im IR-Receiverteil oder im Steuerteil des Motors liegt... oder ggf. in der Wahl falscher Keycodes - was ich für warscheinlich halte....
    Ich muss dazu sagen, ich hab mit dem RC5 noch nichts gemacht aber eigentlich sind die Examples alle lauffähig.


    Aber vielleicht noch eine Frage an geneigte Mitleser zum Thema IR.
    Kennt jemand diese IR-Fernbedienungen für indoor-Hubschrauber und hat damit schon mal versucht den RP6 zu steuern? Ich hab leider keine Idee, was die für Signale ausgeben aber die dürften deutlich zuverlässiger und weiter senden als jede TV-RC - allerdings auch mit weniger Steuersignalen.

    LG Rolf
    Geändert von RolfD (19.03.2011 um 07:46 Uhr)
    Sind Sie auch ambivalent?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.12.2008
    Beiträge
    6
    Hallo Rolf
    Die Ausgaben im Terminal bekomme ich. Hab ich angehängt.
    Sorry, meinte die Zeile 10. Hab jetzt mal die Keycodes gwechselt.
    Die werden auch angzeigt aber der Motor schweigt .

    Gruß Tom
    Angehängte Dateien Angehängte Dateien

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    Ok.. schaut gesund aus. ggf. must Du dein Mapping noch anpassen. Aber ne ganz andere Frage... hast Du das hier gelesen und verstanden?

    * You need to HOLD DOWN the key - then the RP6 will accelerate slowly to the
    * MAX_SPEED values defined in this program. If you release the key again,
    * it starts to deccelerate slowly.

    und

    * (yes it is intentionally that the robot accelerates and decelerates so
    * slow Of course you can change this if you want!)

    Es stammt aus dem dokumentierten File... sprich.. nicht einfach nur kurz drücken und warten das er los fährt sondern gedrückt halten BIS er los fährt....
    Zumindest Dein Log zeigt das so nicht an, würde ich mal sagen...
    LG Rolf
    Sind Sie auch ambivalent?

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.12.2008
    Beiträge
    6
    stimmt, ist aus dem Log nicht zu sehen, wollte es übersichtlich halten.
    Gedrückt halten führt leider nicht zum Erfolg....

    Gruß Tom

  6. #6
    Erfahrener Benutzer Roboter-Spezialist Avatar von RolfD
    Registriert seit
    07.02.2011
    Beiträge
    414
    hm... hm... ok. Das war's wohl nicht.
    Nun gut.. also Du bekommst ja offensichtlich RC5 Signale rein da die receiveRC5Data wie gesehen aufgerufen wird und die Zuordnung ist erst mal 2.Frage ...
    Ansich passiert dann nicht mehr viel... berechnen der Accel-Daten für die Antriebe links und rechts... und dann per moveAtSpeed ab auf die MosFets.
    Poweron, initrobotbase und task_rp6sstem werden auch ausgeführt. Den Selbsttest hattest Du gemacht wie Du sagtest...
    Man könnte sich nun noch die errechneten Accel-Werte ausgeben lassen... um zu sehen ob der denn beschleunigen würde.
    Aber irgendwie glaube ich nicht an ein Fehler da... der würde sonst auch bei anderen zuschlagen.

    Hm.. Du Sorry... ich kann Dir nicht helfen Gesetzt den Fall, das alles so ist wie ich vermute und Du ja bestätigst, müsste er losfahren.
    Ich würde vorschlagen, du machst noch mal den Selbsttest - um sicher zu stellen das die Antriebe wirklich ok sind.
    Ich rechne allerdings damit, das der positiv ausgeht... und Dir damit nicht weiter hilft. Eine andere Fernbedienung kann man noch testen aber ob das was bringt....
    Ne Du.. ich bin am Ende mit meinen Tips. Tut mir leid.
    Vielleicht findet sich jemand, der Dir besser helfen kann. Warte mal ein paar Tage. Und wenn Du raus hast wo es dran lag, schreib es mal hier rein. Würd mich ja doch interssieren.
    LG Rolf

    EDIT: Eine Idee hab ich noch... aber wild geraten und ungeprüft.

    In deccelerate(void)
    wird per Timer mit
    if(getStopwatch1() > 250)
    4 mal / sek "gebremst" ... folglich müsste eine Fernbedienung mehr als 4 Impulse leisten?
    Da gibst aber noch die
    #define ACCELERATE_VALUE 8
    #define DECELERATE_VALUE 4
    Das würde dann glaube ich auf 2/sec reduzieren um die Waage zu halten und 3/sek damit man beschleunigt?
    Ich weis es nicht genau aber da in der Ecke könnte man mal etwas genauer gucken... mach mal aus der
    #define ACCELERATE_VALUE 8 eine 12, 16 oder 24 .. je nach dem wie viel Impulse/sek Du reinbekommst.
    Oder kommentier mal die deccelerate(void) versuchsweise ganz aus. Dann weisst Du zumindest, das es der richtige Weg ist.
    Geändert von RolfD (21.03.2011 um 12:55 Uhr)
    Sind Sie auch ambivalent?

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    08.12.2008
    Beiträge
    6
    Hallo Rolf
    #define ACCELERATE_VALUE 8 eine 12, 16 oder 24 .. je nach dem wie viel Impulse/sek Du reinbekommst.
    Das war die Lösung für das Prob.Hab den Wert auf 24 geändert und es fkt.
    Danke für den tollen Einfall.

    Gruß Tom

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hätte auch eine Frage zum RP6 mit TV-Remote:
    Wo wird denn bewerkstelligt, dass der RP6 weiß, dass eine Taste auf der Remote losgelassen wurde?
    In der großen Switch wird zwar die Stopwatch1 gestartet und in der "deccelerate" wird sie ausgelesen, aber wo und wie genau weiß das Programm denn nun, dass nichts mehr kommt? Wird da irgendwo "rc5data.key_code" zurückgesetzt, oder wie?
    Ich bräuchte so etwas wie eine Zurücksetzung von "rc5data.key_code" auf sagen wir "-1", um mehrfach-drücken einbauen zu können.

    Danke Euch

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von fabqu
    ... Wo wird denn bewerkstelligt, dass der RP6 weiß, dass eine Taste auf der Remote losgelassen wurde ...
    Die Antwort hat ja schon die Fernsteuerung parat: im ersten Byte - Start- und Adressbits - ist das dritte Bit (von Bit1 bis Bit 8 ) das Togglebit. Das wird invertiert jedes Mal, wenn eine Taste gelöst und neu gedrückt wird. Damit ist einfach festzustellen, ob die gleiche Taste festgehalten wird => das Togglebit bleibt dabei gleich.
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    06.11.2010
    Beiträge
    773
    Hmm, danke dir.
    Das geht nun auch, aber ich bin grad am verzweifeln:
    Wenn ich die Abfragen für RC5-Code, -Adresse und -Togglebit drinnen habe, dann geht auf der Base nahzu nix mehr. Sie führt zwar Befehle aus, aber das Senden der Sensordaten der Base durch die M128 an den PC (Licht L/R, Speed L/R, Bumper L/R vorne/hinten, Objekte L/R vorne/hinten, Motorstrom L/R, Register der Status-LEDs) geht überhaupt nicht mehr. Bestenfalls um etliche Sekunden verzögert...
    Streiche ich das Zeug raus, geht wieder alles!!!
    Und wenn ich nur alles für die RC5-Adresse rausnehme, geht alles, bis auf Speed L/R, Strom L/R, Bumper vorne und ACS vorne. Das heißt, ACS hinten, Bumper hinten und Helligkeit geht wieder.
    Was geht da ab???

    Hier mal mein Code ohne RC5-Adr.:
    In der Base:
    Code:
    ...
    #define I2C_REG_LEDS              27
    //#define I2C_REG_RC5_ADR              28
    #define I2C_REG_RC5_DATA          28
    #define I2C_REG_RC5_TOGGLE          29
    #define I2C_REG_BUMP_BACK_L         30
    #define I2C_REG_BUMP_BACK_R         31
    ...
    
            I2CTWI_readRegisters[I2C_REG_LEDS] =              (uint8_t)(statusLEDs.byte);
            //I2CTWI_readRegisters[I2C_REG_RC5_ADR] =          (uint8_t)((lastRC5Reception.device)|(lastRC5Reception.toggle_bit<<5));
            I2CTWI_readRegisters[I2C_REG_RC5_DATA] =          (uint8_t)(lastRC5Reception.key_code);
            I2CTWI_readRegisters[I2C_REG_RC5_TOGGLE] =          (uint8_t)(lastRC5Reception.toggle_bit);
            I2CTWI_readRegisters[I2C_REG_BUMP_BACK_L] =      (uint8_t)(bumper_back_left);
            I2CTWI_readRegisters[I2C_REG_BUMP_BACK_R] =      (uint8_t)(bumper_back_right);
    In der M128:
    Code:
    ...
        status_leds_base = messageBuf[24];
        //RC5_adr = messageBuf[25];
        RC5_data = messageBuf[25];
        RC5_toggle = messageBuf[26];
        bumper_back_left = messageBuf[27];
        bumper_back_right = messageBuf[28];
    
    
     /*print("RC5-Adr:");
                printInteger(RC5_adr);
                print("\n");*/
    
                print("RC5-Code:");
                printInteger(RC5_data);
                print("\n");
    
                print("RC5-Toggle:");
                printInteger(RC5_toggle);
                print("\n");
    
                print("LEDsBase:");
                printInteger(status_leds_base);
                print("\n");
    
                print("BumpHL:");
                printInteger(bumper_back_left);
                print("\n");
    
                print("BumpHR:");
                printInteger(bumper_back_right);
                print("\n");
    Danke Euch

Berechtigungen

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

12V Akku bauen