Headtracker und PPM Signal per nRF24L01

Hallo,

ich bin dabei einen Multi-Kopter zu bauen und möchte dabei die Kamera passend zu meinem Kopf bewegen.
Dazu habe ich einen GY-85 Board mit einem lagesensor (gyroscope), beschleuningungssensor und e-kompass, welches an meinem Kopf kommt.
Die Daten werden per Fernsteuerung an den Kopter gesendet und das funktioniert auch schon einigermaßen, dank dem Projekt von Dennis Frie.
(hier der Code zum direkten Anschauen)

Das Signal wird bei dieser Lösung mittels im Modellbau typischem PPM Verfahren per Funk gesendet.
Dazu wird vom Headtracker (Arduino und Sensorboard) ein PPM Signal generiert und an die Fernbedienung übertragen (die es dann zum Kopter weiterschickt).

Was mir an der Lösung nicht so gefällt ist, dass man ein Kabel vom Kopf/Headtracker zur Fernbedienung hat.

Meine Idee dazu ist, ein nRF24L01 am Headtracker und eines in der Fernsteuerung zur Datenübertragung zu nutzen.

Ich weiß allerdings nicht, wie ich das am Besten mache.
Soll ich die rohen Sensordaten an das Arduino in der Fernsteuerung schicken und dort dann zu PPM umwandeln oder geht das einfacher?
Das PPM Signal selbst zu senden geht ja, soweit ich das verstehe nicht.

Generell ist der Code von Dennis Frie für mich nicht sehr gut verständlich, weil ich nicht genau sehe, wo das PPM Signal wie zusammengebaut wird.

Ein simples Beispiel für meine Orientierungslosigkeit ist das hier:

    if ( buttonPressed )
    {
        if ( !pauseToggled && (buttonDownTime > BUTTON_HOLD_PAUSE_THRESH) )
        {
            // Pause/unpause
            ht_paused = !ht_paused;
            resetValues = 1;
            pauseToggled = 1;
        }
    }

Wenn man den Button länger als "BUTTON_HOLD_PAUSE_THRESH" (1500ms) drückt, dann ist pauseToggled = 1.
Bloß sehe ich im gesamten Code nicht, wie dieser Wert irgendwo was "pausiert".

Der Code ist also "zu hoch" für mich und ich hoffe daher auf Hilfe von euch Profis.

Lieben Dank!

Also ich habe mich mal dran gemacht und werde Stück für Stück den Code anpassen.
Dazu will ich erstmal rudimentär Daten an einer Stelle abgreifen und mittels nRF20L01 verschicken.
In einem Testsketch klappte das (nachdem ich ne stabile 3V Spannungsversorgung hatte) auch wunderbar.

Mein Problem ist jetzt, dass der Code mehrere Tabs hat.

Im ersten Tab ist das setup drin, wo nun das hier rein muss:

// ------ nRF24L01 Zeug ------ //
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);
  radio.openWritingPipe(addresses[0]);
  radio.openReadingPipe(1,addresses[1]);

Damit das geht, muss allerdings natürlich vorher das hier definiert werden:

#include <SPI.h>
#include "RF24.h"
RF24 radio(7,8);
byte addresses[][6] = {"1Node","2Node"};

soweit... so gut.

Nun will ich aber in einem anderen Tab etwa senden, was so geht:

radio.write( Variable,  sizeof(Variable) ));

Da wirft mir allerdings der Compiler einen Fehler, dass "radio" nicht definiert ist.

Wenn ich in diesem Tab nun aber das hier mache:

#include <SPI.h>
#include "RF24.h"
RF24 radio(7,8);

Bekomme ich den Fehler multiple definition of `radio'.

Der will mich wohl veräppel :smiley:

Erst wird behauptet "ist nicht definiert", dann definiere ich es und auf einmal wird gemeckert "mehrfach definiert"...

Was kann ich tun, damit es funktioniert?
In ne header-datei kann ichs ja auch nicht packen, weil as da ja nur deklariert und nicht definiert werden kann... :o

Leon333:
In ne header-datei kann ichs ja auch nicht packen, weil as da ja nur deklariert und nicht definiert werden kann... :o

Wie kommst Du auf das schmale Brett?
Alles was Du zentral brauchst kommt in die Headerdatei.

Gruß Tommy

Richtige Programmierer schreiben in einer Header - Datei

myheader.h

#ifndef __MY_HEADER
#define  __MY_HEADER
#include <SPI.h>
#include "RF24.h"
extern RF24 radio;
#endif

setup.cpp

#include "myheader.h"
RF24 radio(7,8);
void setup() {
  radio.begin();
}

Arduino Programmierer sorgen dafür, dass die tabs mit .ino Dateien so benamst sind, dass, in alphabetischer Reihenfolge sortiert, erst die Variablendefinitionen erscheinen bevor sie in anderen Tabs verwendet werden.

bist du eigentlich inzwischen weitergekommen?

Ich hab gestern 2 GY85 gekriegt. Ich muss mich jetzt mal näher mit beschäftigen