Close

Komunikace přes sériovou linku

Úvodní stránka Fórum Hardware Arduino Komunikace přes sériovou linku

Aktuálně jsou na stránce zobrazeny 2 příspěvky - 1. až 2. (celkem z 2)
  • Autor
    Příspěvky
  • #10462
    mitgan
    Účastník

    Zdravím,

    posílám z Arduina přes sériovou linku číselná data do PC, kde se je snažím číst. Nejdříve jsem použil Serial.println a v PC je přečtu až do konce řádky a potom je převedu na string a string na číslo. Občas se objeví nějáká chyba, nicméně něják to funguje. Poté jsem zkoušel to posílat binárně jako 2B uint16. Problém je, že na „začátku“ přenosu, popř. při chybě i „uprostřed“ se posunou byte a v tu chvíli přečtu v PC ty 2B v opačném pořadí. Kontroluji velikost čísla a pokud je příliš velké (>1023) přečtu jeden byte a zahodím jej a dále pokračuji opět načítáním 2B. Nemáte někdo nějáké jiné elegantnější řešení na kontrolu a nápravu téhle chyby na straně PC ?

    Děkuji za nápady

    M.

    #10463
    Zbyšek Voda
    Správce

    Dobrý den, asi úplně nejjednodušší cesta je použít nějaký oddělovač, který vložíte vždy mezi dvě čísla – třeba byte s hodnotou 255 (0b11111111), popřípadě možná vhodnější 0. Vždycky čekáte, dokud nepřečtete znak s hodnotou 0 a potom přečtete dva byty.

    Tato metoda má své mouchy – třeba si musíte ošetřit situaci, kdy i datový být má hodnotu oddělovače (0, popř. 255). Napadá mě třeba k byte před odesláním vždy přičíst 1 – potom se byte s hodnotou 0 v datových bytech nemůže vyskytnout. Po přijetí 1 zase odečtete. Tam je ale zase problém s přetečením.

    Dalším způsobem by mohlo být použít redundanci – prostě byte dat pošlete vždycky dvakrát za sebou (například).

    Nebo zkusit použít nějaký standardizovaný formát dat – JSON, CSV apod… To už je ale trochu „s kanonem na vrabce“ (viz http://www.zive.cz/clanky/pojdme-programovat-elektroniku-jak-to-ze-je-prumerna-webova-stranka-stejne-velka-jako-doom/sc-3-a-185860/default.aspx).

    Výběr vhodného protokolu řeší například zde: http://forum.arduino.cc/index.php?topic=195224.0.

Aktuálně jsou na stránce zobrazeny 2 příspěvky - 1. až 2. (celkem z 2)
  • Pro reakci na toto téma se musíte přihlásit.