Arduino mini pro - MavLink Protokoll / Daten aufsplitten

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. :confused: 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

Vielleicht solltest du dir mal das hier anschauen.

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

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.

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. :wink:

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

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

kann nicht funktionieren!

Du meinst sicher

** **  incomingByte[i] = Serial.read();** **

Was

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 ???


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.