<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=4&amp;t=21149&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-08-19T05:24:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=21149&amp;mode</id>
<entry>
<author><name><![CDATA[JarekB]]></name></author>
<updated>2018-08-19T05:24:24+01:00</updated>
<published>2018-08-19T05:24:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21149&amp;p=210833#p210833</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21149&amp;p=210833#p210833"/>
<title type="html"><![CDATA[Re: Funkcja parsująca dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21149&amp;p=210833#p210833"><![CDATA[
W moich archiwach mam funkcje napisaną przez &quot;zamierzchłe cywilizacje&quot; która analizuje ramkę przychodzącą z GPS.<br />Podejście jest nieco inne niż Twoje. Zobacz może to Ci nasunie jakieś inne rozwiązanie. Czy lepsze? Nie wiem.<br />Autor &quot;przesuwa się&quot; po buforze za pomocą dwóch wskaźników. Ocenisz sam czy to Ci się przyda[syntax=c]// z. jeśli wystąpi string &quot;$GPRMC&quot; wtedy str1 będzie wskaźnikiem do pierwszego znaku<br />// z. A w NMEA oznacza że GPS jest OK<br /><br /><br />    if (( str1 = strstr( gps_buffer, &quot;$GPRMC&quot; ) ) &amp;&amp; ( strstr( gps_buffer, &quot;,A,&quot; ) ) ) {<br />        str2 = strstr( str1, &quot;,&quot; );               // z. str2 wskaźnik do pierwszego przecinka za &quot;$GPRMC&quot;<br />        data_czas&#91;4&#93; = str2&#91;1&#93;; //hour decimals<br />        data_czas&#91;5&#93; = str2&#91;2&#93;; //hour ones<br />        data_czas&#91;6&#93; = str2&#91;3&#93;; //minutes decimals<br />        data_czas&#91;7&#93; = str2&#91;4&#93;; //minutes ones<br /><br />        str2++;                                // z. tu sprytnie przesuną adres wskaźnika o 1 żeby móc znaleźć drugi przecinek<br />        str1 = strstr( str2, &quot;,&quot; );            // z. Ha! musimy opuścić dwa przecinki bo<br />        str1++;                                // z. między nimi jest znacznik GPS<br />        str2 = strstr( str1, &quot;,&quot; );            // z. czyli 'A' lub 'V'<br /><br />        //latitude<br />        pozycja_ns&#91;1&#93; = str2&#91;1&#93;; //degrees<br />        pozycja_ns&#91;2&#93; = str2&#91;2&#93;; //degrees<br />        pozycja_ns&#91;3&#93; = str2&#91;3&#93;; //minutes<br />        pozycja_ns&#91;4&#93; = str2&#91;4&#93;; //minutes[/syntax]<br /><br />Ten fragment kodu powinien wystarczyć ocenić mechanizm jaki tu zadziałał. Komentarze są moje z czasów gdy analizowałem jak to działa. Tak sobie myślę że gdyby w ramce wstawiać określone pułapki to nie trzeba by było analizować czy coś jest czy nie ma tylko wskaźniki ustawiać na kolejne paczki danych.<br />Tak wygląda ramka z GPS-a która jest analizowana w przykładzie powyżej.<br />[syntax=c]//&quot;$GPRMC,131905.00,A,5222.9818,N,01658.8867,E,0.2,222.2,010803,,*30&quot;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=18188">JarekB</a> — 19 sie 2018, o 05:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mczarny]]></name></author>
<updated>2018-08-18T07:09:13+01:00</updated>
<published>2018-08-18T07:09:13+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=21149&amp;p=210821#p210821</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=21149&amp;p=210821#p210821"/>
<title type="html"><![CDATA[Funkcja parsująca dane]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=21149&amp;p=210821#p210821"><![CDATA[
witam Kolegów<br />W programie stacji pogodowej mam funkcję której zadaniem jest odbiór danych przesyłanych z czujników przez moduł radiowy.<br />Funkcja działa mi prawidłowo, ale zastanawiam się czy można to napisać inaczej? może będzie wykonywało się szybciej?<br />Dlaczego rozbijam na poszczególne wartości - ano dlatego, że jeżeli np. temperatura nie uległa zmianie to nie zostanie przesłana informacja. Cyklicznie są przesyłane tylko dane o prędkości i kierunku wiatru(co 3sek.)<br />Popatrzcie proszę bardziej doświadczonym okiem może szukam dziury w całym bo działa poprawnie a może można ją jeszcze jakoś zoptymalizować? <br />[syntax=c]void DANE_answer(char *bufor){<br /><br /><br />       char *wsk;<br /><br />       if(!strncasecmp(uart1_buf,&quot;AT+temp&quot;,7)){<br /><br />       wsk = strtok(uart1_buf,&quot; &quot;);<br />       wsk = strtok(NULL,&quot;,&quot;);<br />       subzero1 = atoi(wsk);<br /><br />       wsk = strtok(NULL,&quot;,&quot;);<br />       cel1 = atoi(wsk);<br /><br />       wsk= strtok(NULL,&quot;,&quot;);<br />       cel_fract_bits1 = atoi(wsk);<br />       }<br /><br />       if(!strncasecmp(uart1_buf,&quot;AT+wind&quot;,7)){<br /><br />       wsk = strtok(uart1_buf,&quot; &quot;);<br />       wsk = strtok(NULL,&quot;,&quot;);<br />       windspeed_dz = atoi(wsk);<br /><br />       wsk = strtok(NULL,&quot;,&quot;);<br />       windspeed_u = atoi(wsk);<br /><br />       wsk = strtok(NULL,&quot;,&quot;);<br />       wind_dir = atoi(wsk);<br />       }<br /><br />       if(!strncasecmp(uart1_buf,&quot;AT+rain&quot;,7)){<br /><br />       wsk = strtok(uart1_buf,&quot; &quot;);<br />       wsk = strtok(NULL,&quot;,&quot;);<br />       rain_dz = atoi(wsk);<br /><br />       wsk = strtok(NULL,&quot;,&quot;);<br />       rain_u = atoi(wsk);<br />       }<br /><br />       if(!strncasecmp(uart1_buf,&quot;AT+data&quot;,7)){<br /><br />       wsk = strtok(uart1_buf,&quot; &quot;);<br />       wsk = strtok(NULL,&quot;,&quot;);<br />       press = atoi(wsk);<br /><br />       wsk = strtok(NULL,&quot;,&quot;);<br />       humi = atoi(wsk);<br /><br />       }<br /><br />}[/syntax]<br />pozdrawiam Marek<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=4651">mczarny</a> — 18 sie 2018, o 07:09</p><hr />
]]></content>
</entry>
</feed>