Loading...
Pages: [1]   Go Down
Author Topic: Arduino mini pro - MavLink Protokoll / Daten aufsplitten  (Read 406 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin Moin!

Ich suche etwas Hilfe oder ein zwei Musterbeispiele, um Daten (MavLink-Protokoll) an einem Eingang (Software Serial) auszuwerten. Der Datenstrom muss leider über eine Software Serial kommen, da ich den Hardware Serial bereits in Verwendung habe. Letztlich möchte ich den Datenstream (Software Serial) in die Einzelwerte aufsplitten und sie in Variablen legen, um damit weiter arbeiten zu können (Log, Display, ...) und ganz am Ende in einem neuen Format wieder weitersenden (Hardware Serial). Das Versenden der bestehenden Variablen funktioniert bereits tadellos, jedoch schaff ich das Einbinden dieses Protokolls (für die weiteren Werte) leider (noch) nicht. :/ Kann mir jemand ein paar Tipps geben, wie ich es richtig anstelle mit vllt. sogar einer Variable als Codemuster? Als Grundlage dient erstmals ein Arduino mini pro (328 / 3,3V / 8MHz).

http://qgroundcontrol.org/mavlink/start

VG Reddi
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vielleicht solltest du dir mal das hier anschauen.

http://code.google.com/p/ardupilot-mega/wiki/MAVLink
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

wenn ich das richtig lese erhältst du 14 bytes die du dann in ein byte-Array mit 14 stellen legst.

byte incomingByte[14] ;   // for incoming serial data
int i=0;
void setup() {
        Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps  hier muß deine SoftSerial stehen
}

void loop() {

        // send data only when you receive data:
        if (Serial.available() > 0) {
                // read the incoming byte:
                incomingByte = Serial.read();
                i=i+1;

                // say what you got:
                Serial.print("I received: ");
                Serial.write(incomingByte, HEX);
        }
}

Die Variablen kannst du dann aus dem Array herausholen

byte Command_ID = incomingByte[0];
byte  Options = incomingByte[1];
...
long Parameter_2=0;

for (i=0;i<4;i++){
Parameter_2 = Parameter_2 << 8;                              // Bits 8 Stellen nach links verschieben (eigentlich erst nach 1. Durchlauf notwendig)
Parameter_2 = Parameter_2| incomingByte[i+3];        // Neues Byte einfügen


Schau auch mal in den References nach den Bitoperatoern.
« Last Edit: July 23, 2012, 01:02:10 pm by circuit99 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Erst mal vielen Dank für den Tipp. Ich werde mal schauen, ob ich die MavLink-Lib überhaupt in ein neues Projekt eingefügt bekomme...

Wie gesagt, bin halt bei "Arduino" absoluter Anfänger. smiley-wink
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Irgendwie bekomme ich das Protokoll gar nicht eingebunden. Ich habe ein neues Projekt erstellt und im Projekt-Ordner den Unterordner libraries erstellt und dort hinein die Ordner mavlink und FastSerial eingerichtet. Entsprechend dieser Anleitung: http://qgroundcontrol.org/dev/mavlink_arduino_integration_tutorial Die Dateien habe ich unter den Punkten 1 und 2 bei "Preparation Steps" geladen und entsprechend in die obige Ordner kopiert. Jedes mal, wenn ich den Beispielcode unter "Receive Function" kompiliere, erhalte ich die Meldung 'MAV_MODE_UNINIT' was not declared in this scope und unten - es sei angemerkt, dass ich die mavlink.h Dateien mit verschiedenen Pfad-Angaben versucht habe einzubinden...:

mavtohott.cpp:1:21: error: mavlink.h: No such file or directory
In file included from mavtohott.cpp:2:
C:\Users\Anxxxxxxx\Desktop\arducopter\mavtohott\libraries\FastSerial/FastSerial.h:108: error: conflicting return type specified for 'virtual void FastSerial::write(uint8_t)'
E:\arduino-1.0\hardware\arduino\cores\arduino/Print.h:48: error:   overriding 'virtual size_t Print::write(uint8_t)'
mavtohott:7: error: 'MAV_MODE_UNINIT' was not declared in this scope
mavtohott.cpp: In function 'void communication_receive()':
mavtohott:17: error: 'mavlink_message_t' was not declared in this scope
mavtohott:17: error: expected `;' before 'msg'
mavtohott:18: error: 'mavlink_status_t' was not declared in this scope
mavtohott:18: error: expected `;' before 'status'
mavtohott:22: error: 'uart0_char_available' was not declared in this scope
mavtohott:24: error: 'uart0_get_char' was not declared in this scope
mavtohott:26: error: 'MAVLINK_COMM_0' was not declared in this scope
mavtohott:26: error: 'msg' was not declared in this scope
mavtohott:26: error: 'status' was not declared in this scope
mavtohott:26: error: 'mavlink_parse_char' was not declared in this scope
mavtohott:31: error: 'MAVLINK_MSG_ID_SET_MODE' was not declared in this scope
mavtohott:33: error: 'mavlink_msg_set_mode_get_mode' was not declared in this scope
mavtohott:36: error: 'MAVLINK_MSG_ID_ACTION' was not declared in this scope
mavtohott:49: error: 'status' was not declared in this scope
mavtohott:53: error: 'uart1_char_available' was not declared in this scope
mavtohott:55: error: 'uart1_get_char' was not declared in this scope
mavtohott:57: error: 'MAVLINK_COMM_1' was not declared in this scope
mavtohott:57: error: 'msg' was not declared in this scope
mavtohott:57: error: 'mavlink_parse_char' was not declared in this scope

Wie bekomme ich den Kram vernünftig eingebunden? Hilfe! *args*
Logged

Germany
Offline Offline
Edison Member
*
Karma: 27
Posts: 1496
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
byte incomingByte[14];
...
incomingByte = Serial.read();

kann nicht funktionieren!

Du meinst sicher
   incomingByte = Serial.read();

Was
Quote
Serial.write(incomingByte, HEX);
macht, ist evtl. formal richtig, aber sicher nicht was du eigentlich willst. Schau dir genau an, welche Varianten von Serial.write() es gibt. ( Und dann gibt es noch Serial.print()  )

Wann wird i wieder zurückgesetzt, und was passiert bei i >= 14 ???


Quote
mavlink.h: No such file or directory
Deine Compiler-Fehler löst du am besten vom Anfang her, viele sind oft Folgefehler.

Das hat erstmal nichts mit deinem geposteten Code zu tun, sorry.

Logged

Pages: [1]   Go Up
Print
 
Jump to: