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