ako naprogramovat
Pavel Kořenský
pavel.korensky na dator3.cz
Pátek Duben 12 18:40:14 CEST 2024
Ehm, chtěl jsem napsat "Pak načteš z dalších dvou bytů délku...."
Zdraví
PavelK
Dne 12.04.2024 v 18:36 Pavel Kořenský napsal(a):
> Ahoj,
>
> no to by mělo být skoro podobné. Jen uděláš takový malý stavový automat.
>
> Packet = 0
> 1 Je znak ?
> 2. Pokud ano, přečti ho
> 3. Je to B5 ?
> 4. Pokud ano, tak Packet = Packet + 1 jinak Packet = 0 a jdi zpět na 1.
> 5. Je znak ?
> 6. Pokud ano, přečti ho
> 7. Packet = 1 ?
> 8. Pokud ano, je poslední přečtený znak 62 ?
> 9. Pokud ano, tak Packet = 3 jinak Packet = 0
>
> A tak dále.
>
> Prostě čekáš na to, až se objeví sekvence tech dvou bytů značících
> začátek packetu. Pak načteš z dalších dvou packetů délku a buď si
> alokuješ tu délku jako nějaké pole nebo ve smyčce čteš znaky a dáváš
> je do řetězce. Já nevím, jestli Arduino umí dynamické alokace paměti.
> Pokud ano, je lepší to ukládat do pole bytů.
> Až načteš znaky celé délky, tak načteš dva další (ten checksum),
> spočítáš si checksum uložených dat a pokud to souhlasí, máš celý
> packet správně. Pokud to nesouhlasí, tak to zahodíš a skok na začátek
> celého toho podprogramu.
>
> Zdraví PavelK
>
>
> Dne 12.04.2024 v 18:19 Daniel Valuch napsal(a):
>>
>> zdravim osadenstvo,
>>
>> programovat viem len velmi zakladne, preto by som mal na piatok
>> algoritmicku... Dokoncujem ziskavanie presneho casu z GNSS modulu o
>> ktorych sme tu uz nejaky cas rozpravali.
>>
>> Ten generuje dva typy vystupu po seriovej linke. Klasicky ascii,
>> ktory je ukonceny \n znakom a parsovanie tohoto stringu je trivialne
>> (robim v arduino ide). Prijimaju sa data, tie sa pridavaju do stringu
>> a ked pride \n tak sa to rozobere a urobi co treba
>>
>> void serialEvent() {
>> while (Serial.available()) {
>> // get the new byte:
>> char inChar = (char)Serial.read();
>> if (inChar == '\n') {
>> // sprava/retazec je hotovy, rozparsuj a urob co treba
>> tempString = "";
>> }
>> // keep receiving until \n arrives
>> else {
>> // add it to the inputString and keep receiving:
>> tempString += inChar;
>> }
>>
>> Druhy vystup je ale binarny, prichadzaju pakety, ktore maju strukturu
>> definovanu, ale paket zacina opacne.
>>
>> 0000 B5 62 06 8A 18 00 00 05 00 00 01 00 76 10 01 05
>> 0010 00 53 10 01 7E 01 91 20 00 7F 01 91 20 01 00 B6
>>
>> Prve dva bajty na zaciatku B5 62 vzdy oznacuju zaciatok paketu
>>
>> dalsie dva 06 8A oznacuju o aky paket ide
>>
>> nasledujuce dva 18 00 dlzku kolko byteov spravy nasleduje (v tomto
>> pripade 24)
>>
>> potom je samotna sprava
>>
>> a na konci 00 B6 su dva bajty checksum
>>
>> a s tymto si neviem poradit, ako to zapisat aby to pocuvalo kedy
>> pride B5 62, pockalo ako dlha bude sprava a potom zapisalo do
>> nejakeho stringu data.
>>
>> Ako na to?
>>
>> dakujem,
>>
>> b.
>>
>>
>>
>> _______________________________________________
>> HW-list mailing list - sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20240412/d259a7f2/attachment.htm>
Další informace o konferenci Hw-list