kleines Funkübertragungsprotokoll für arduino schreiben

Gast #3808069
Hallo zusammen,

ich möchte gerne ein kleines Funkübertragungsprotokoll schreiben. ganz 
einfach vom aufbau

--------   -------------  -----------
Stop Bit    Nachricht      Start Bit

habe aber keine Ahnung wie ich anfangen soll. da ich leider nirgendwo 
das Thema bearbeitet finde und alle bücher zu dem Thema in der BiB 
ausgeliehen sind.

Ich dankeim Voraus
#3808126
Hi Bene,

da stellt sich mir erst die Frage, auf welchem Level das 
"Funkübertragungsprotokoll" greift?

Auf der HF Ebene, der Sicherungsebene, der ..-Eben, der Obejektebene ?

Was machst Du bei Fehlern in der Datenübertragung ?

Was soll das "Stop Bit", wenn danach eine "Nachricht" kommt ?
Gast #3808333
Grundlagen sind schon vorhanden, ich dachte nur ich versuche mal das 
ganze viel einfach zu beschreiben.


Problem ist, dass ich werte zwischen 0 und 255 übertragen muss. wenn ich 
aber 255 sende kommt beim empfänger

2
5
5

an.
normal hätte ich jetzt schon beim sender gesagt er soll halt immer 3 
zeichen rausschicken, die Aufgabenstellung ist aber ein PRotokoll zu 
entwickeln, welches vom empfänger unabhängig von der Länge der Nachricht 
ausgelesen werden kann.


wie das Funkmdul funktioniert kann ich leider nicht beantworten. mein 
Verdacht ist aktuell, dass es einfach alles rausschickt was auf dem BUS 
unterwegs ist. (hoffe ich habe die frage richtig verstanden).


meine idee war es so einfach zu machen, dass ich dem  sender z.B. sage:

Sende

.255,

und dadurch der Empfänger weis, dass er alles von . bis , zusammenfassen 
soll.

das bekomme ich aber nicht hin.
#3808341
Bene schrieb:
> die Aufgabenstellung ist aber ein PRotokoll zu
> entwickeln, welches vom empfänger unabhängig von der Länge der Nachricht
> ausgelesen werden kann.
Man könnte einfach das erste Byte dazu verwenden dem Empfänger zu sagen 
wie lange die folgende Nachricht ist, hast du vor längere Nachrichten zu 
senden dann eben die ersten paar Bytes.
Oder über ein Timeout, wenn z.B. für 2ms keine Daten kommen ist die 
Nachricht fertig.
> wie das Funkmdul funktioniert kann ich leider nicht beantworten.
Und welches es ist?
Gast #3808468
int incomingByte = 0;
int incomingbyte2 = 0;


void setup() {
  Serial.begin(9600);
}

void loop(){

  if (Serial.available() > 0) {

   // char incoming1 [3];

    incomingByte = Serial.read();
    incomingbyte2 = Serial.read();

    word(incomingByte,incomingbyte2);

  /*  if (incomingByte = ',')
    { incomingByte = Serial.read();
        incoming1[0] = incomingByte;
          incomingByte = Serial.read();
          if (incomingByte != '.'){
            incoming1[1] = incomingByte;
            incomingByte = Serial.read();
                if (incomingByte != '.'){
                incoming1[2] = incomingByte;

    }}}

    char incoming2 [3];
    incomingByte = Serial.read();
    if (incomingByte = '.')
    { incomingByte = Serial.read();
        incoming2[0] = incomingByte;
      incomingByte = Serial.read();
      if (incomingByte != ','){
        incoming2[1] = incomingByte;
      incomingByte = Serial.read();
      if (incomingByte != ','){
        incoming2[2] = incomingByte;

    }}}
    else {
    int incoming1 = 0;
    int incoming2 = 0;
    }
    */
    Serial.print( "I received: ");
    Serial.write();
    Serial.print("\r\n");
    Serial.print( "and: ");
    Serial.write();
    Serial.print("\r\n");


  }
}
Gast #3808471
das übertragen mit . als Start für wert1 und, als Start für WErt 2 
klappt jetzt. jetzt fehlt nurnoch, dass ich das ganze sinnvoll wieder 
zusammengeaut bekomme.

akteull gibt er nämlich irgendwelche dubiosen werte aus die nicht 
gesendet wurden..
Gast #3808473
Sorry falscher code

int incomingByte = 0;



void setup() {
  Serial.begin(9600);
}

void loop(){

  if (Serial.available() > 0) {

    char incoming1 [3];

    incomingByte = Serial.read();



    if (incomingByte = ',')
    { incomingByte = Serial.read();
        incoming1[0] = incomingByte;
          incomingByte = Serial.read();
          if (incomingByte != '.'){
            incoming1[1] = incomingByte;
            incomingByte = Serial.read();
                if (incomingByte != '.'){
                incoming1[2] = incomingByte;

    }}}

    char incoming2 [3];
    incomingByte = Serial.read();
    if (incomingByte = '.')
    { incomingByte = Serial.read();
        incoming2[0] = incomingByte;
      incomingByte = Serial.read();
      if (incomingByte != ','){
        incoming2[1] = incomingByte;
      incomingByte = Serial.read();
      if (incomingByte != ','){
        incoming2[2] = incomingByte;

    }}}
    else {
    int incoming1 = 0;
    int incoming2 = 0;
    }

    Serial.print( "I received: ");
    Serial.write();
    Serial.print("\r\n");
    Serial.print( "and: ");
    Serial.write();
    Serial.print("\r\n");


  }
}
Gast #3809725
Du benutzt nur eine serielle Schnittstelle. Diese ist mit dem Funkmodul 
verbunden. Wie willst du dann irgendwelche Ausgaben machen ? Die sendest 
du ja dann an das Funkmodul. Es sei denn du hast die TX-leitung vom 
Funkmodul getrennt. Außerdem empfängst du doch schon den richtigen Wert. 
Wie sieht den dein Sendeprogramm aus ?

Wenn du Daten mit Funk überträgst werden die Daten von jedem Empfänger 
in Reichweite empfangen, der auf der gleichen Frequenz arbeitet. D.h. du 
must erst mal in die Daten die du sendest die Adresse einarbeiten an wen 
du senden willst. Der Empfänger kann dann überprüfen ob die Daten 
überhaupt für ihn bestimmt sind. Außerdem sollte man immer eine 
Checksumme mitsenden damit der Empfänger überpüfen kann ob die Daten die 
er empfängt auch korrekt sind. Wenn die Daten unterschiedlich lang sein 
sollen/können ist eine Angabe wieviele Datenbytes gesendet werden recht 
hilfreich.

A. Zöller

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.