<?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=58&amp;t=8330&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-08-30T21:30:41+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=58&amp;t=8330&amp;mode</id>
<entry>
<author><name><![CDATA[siddawid]]></name></author>
<updated>2014-08-30T21:29:17+01:00</updated>
<published>2014-08-30T21:29:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93538#p93538</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93538#p93538"/>
<title type="html"><![CDATA[Re: Odbiór ciągu znaków UART i podział ich.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93538#p93538"><![CDATA[
Dzięki koledze jacekk232 jestem już prawie w domu i mogę lecieć z moim projektem dalej <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> Dla niego leci &quot;<span style="color: #00FF00">Pomógł</span>&quot;<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2604">siddawid</a> — 30 sie 2014, o 21:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[jacekk232]]></name></author>
<updated>2014-08-30T21:30:41+01:00</updated>
<published>2014-08-30T20:45:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93530#p93530</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93530#p93530"/>
<title type="html"><![CDATA[Re: Odbiór ciągu znaków UART i podział ich.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93530#p93530"><![CDATA[
Poniżej dwa przykładowe rozwiązania, pisane na szybko.<br /><br />Pierwsze<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;MKUART/mkuart.h&quot;<br /><br />#define BUFOR_SIZE16<br />#define MOTOR_NAME_SIZE7<br />#define MOTOR_VAL_SIZE3<br /><br /><br />char bufor&#91;BUFOR_SIZE&#93;;<br />char motor_name_str&#91;MOTOR_NAME_SIZE+1&#93;;//np. silnik1 + NULL<br />char motor_value_str&#91;MOTOR_VAL_SIZE+1&#93;;//wartość np.255 + NULL<br /><br />uint8_t motor1, motor2;<br /><br />uint8_t get_string(char * buf);<br /><br /><br />int main(void)<br />{<br />USART_Init(__UBRR);<br />sei();<br /><br />DDRD |= (1&lt;&lt;PD4) | (1&lt;&lt;PD5);//OC1A i OC1B jako - wyjscia<br /><br />//timer1 - Fast Pwm 8bit<br />TCCR1A |= (1&lt;&lt;WGM10);<br />TCCR1B |= (1&lt;&lt;WGM12);<br />TCCR1B |= (1&lt;&lt;CS11);<br />TCCR1A |= (1&lt;&lt;COM1A1) | (1&lt;&lt;COM1A0);<br />TCCR1A |= (1&lt;&lt;COM1B1) | (1&lt;&lt;COM1B0);<br /><br />OCR1A = 0;<br />OCR1B = 0;<br /><br />while(!0)<br />{<br />if( get_string( bufor ))<br />{<br />//zerujemy bufory<br />memset(motor_name_str, 0, sizeof(motor_name_str));<br />memset(motor_value_str, 0, sizeof(motor_value_str));<br /><br />//kopiujemy nazwę silnika z bufor do motor_number_str<br />memcpy(motor_name_str, bufor, MOTOR_NAME_SIZE);<br /><br />//kopiujemy wartość pwm z bufor do motor_value_str<br />//odczytywanie rozpoczynamy od znaku za nazwą silnika<br />memcpy(motor_value_str, &amp;bufor&#91;MOTOR_NAME_SIZE&#93;, MOTOR_VAL_SIZE);<br /><br /><br />if( 0 == strcasecmp(&quot;silnik1&quot;, motor_name_str) )<br />{<br />motor1 = atoi(motor_value_str);<br />}<br /><br />if( 0 == strcasecmp(&quot;silnik2&quot;, motor_name_str) )<br />{<br />motor2 = atoi(motor_value_str);<br />}<br />}<br /><br />OCR1A = motor1;<br />OCR1B = motor2;<br />}<br />}<br /><br /><br />uint8_t get_string(char * buf)<br />{<br />uint8_t znak;<br />static uint8_t i;<br /><br />//pobierz bajt z bufora odbiorczego<br />//funkcja uart_getc zwraca zero jeśli nie odczytała żadnego<br />//znaku z bufora odbiorczego<br />znak = uart_getc();<br /><br />//'\0' - funkcja nie odczytała żadnego znaku<br />//'\n' - ignorujemy kod znaku &quot;nowej linii&quot; LF<br />if( (znak == '\0') || (znak == '\n') ) return 0;<br /><br />if(znak != '\r' )//jeśli odebrany znak jest różny od kodu znaku CR<br />{<br />buf&#91;i&#93; = znak;//zapisz znak do bufora<br />i++;<br />}<br />else//jeśli odebrano kod znaku CR<br />{<br />buf&#91;i&#93; = '\0';//zapisz do bufora znak NULL<br />i=0;//aby w buforze utworzyć C-string zakończony zerem<br />return 1;<br />}<br /><br />return 0;<br />}[/syntax]<br /><br /><br />Drugie rozwiązanie opiera się na funkcji strtok(). Przesyłany ciągu znaków powinien mieć postać np. silnik1-123, silnik2-030, gdzie &quot;-&quot; to separator zdefiniowany na początku programu.<br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;avr/pgmspace.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;MKUART/mkuart.h&quot;<br /><br />#define BUFOR_SIZE16<br /><br />char bufor&#91;BUFOR_SIZE&#93;;<br /><br />char separator&#91;&#93; = &quot;-&quot;;<br /><br />char *motor_name_wsk;<br />char *motor_value_wsk;<br /><br />uint8_t motor1, motor2;<br /><br />uint8_t get_string(char * buf);<br /><br />int main(void)<br />{<br />USART_Init(__UBRR);<br />sei();<br /><br />DDRD |= (1&lt;&lt;PD4) | (1&lt;&lt;PD5);<br /><br />TCCR1A |= (1&lt;&lt;WGM10);<br />TCCR1B |= (1&lt;&lt;WGM12);<br />TCCR1B |= (1&lt;&lt;CS11);<br />TCCR1A |= (1&lt;&lt;COM1A1) | (1&lt;&lt;COM1A0);<br />TCCR1A |= (1&lt;&lt;COM1B1) | (1&lt;&lt;COM1B0);<br /><br />OCR1A = 0;<br />OCR1B = 0;<br /><br />while(!0)<br />{<br />if( get_string( bufor ))<br />{<br />motor_name_wsk = strtok(bufor, separator);<br />motor_value_wsk = strtok(NULL, separator);<br /><br />if( 0 == strcasecmp(&quot;silnik1&quot;, motor_name_wsk) )<br />{<br />motor1 = atoi(motor_value_wsk);<br />}<br /><br />if( 0 == strcasecmp(&quot;silnik2&quot;, motor_name_wsk) )<br />{<br />motor2 = atoi(motor_value_wsk);<br />}<br />}<br /><br />OCR1A = motor1;<br />OCR1B = motor2;<br />}<br />}<br /><br /><br /><br />uint8_t get_string(char * buf)<br />{<br />uint8_t znak;<br />static uint8_t i;<br /><br />//pobierz bajt z bufora odbiorczego<br />//funkcja uart_getc zwraca zero jeśli nie odczytała żadnego<br />//znaku z bufora odbiorczego<br />znak = uart_getc();<br /><br />//'\0' - funkcja nie odczytała żadnego znaku<br />//'\n' - ignorujemy kod znaku &quot;nowej linii&quot; LF<br />if( (znak == '\0') || (znak == '\n') ) return 0;<br /><br />if(znak != '\r' )//jeśli odebrany znak jest różny od kodu znaku CR<br />{<br />buf&#91;i&#93; = znak;//zapisz znak do bufora<br />i++;<br />}<br />else//jeśli odebrano kod znaku CR<br />{<br />buf&#91;i&#93; = '\0';//zapisz do bufora znak NULL<br />i=0;//aby w buforze utworzyć C-string zakończony zerem<br />return 1;<br />}<br /><br />return 0;<br />}[/syntax]<br /><br />Miłej analizy <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":-)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=204">jacekk232</a> — 30 sie 2014, o 20:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[siddawid]]></name></author>
<updated>2014-08-29T18:54:02+01:00</updated>
<published>2014-08-29T18:54:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93390#p93390</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93390#p93390"/>
<title type="html"><![CDATA[Re: Odbiór ciągu znaków UART i podział ich.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93390#p93390"><![CDATA[
Aj moja wiedza o C jest mała jeszcze podobnie bym to rozwiązał w Javie zapewne <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2604">siddawid</a> — 29 sie 2014, o 18:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[WoodPaker]]></name></author>
<updated>2014-08-29T15:07:46+01:00</updated>
<published>2014-08-29T15:07:46+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93360#p93360</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93360#p93360"/>
<title type="html"><![CDATA[Re: Odbiór ciągu znaków UART i podział ich.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93360#p93360"><![CDATA[
Znalazłem w necie taki przykład.<br />[syntax=c]#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt;<br /><br /><br />int main()<br />{<br />   const char haystack&#91;20&#93; = &quot;TutorialsPoint&quot;;<br />   const char needle&#91;10&#93; = &quot;Point&quot;;<br />   char *ret;<br /><br />   ret = strstr(haystack, needle);<br /><br />   printf(&quot;The substring is: %s\n&quot;, ret);<br />   <br />   return(0);<br />}[/syntax]<br /><br />Program w wyniku zwraca słowo Point.<br /><br />Mam nadzieje, że Ci pomoże.<br /><br /><br />No i mnie <strong>mokrowski</strong> wyprzedził...ech <img src="https://forum.atnel.pl/images/smilies/icon_razz.gif" alt=":P" title="Pokazuje język" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1425">WoodPaker</a> — 29 sie 2014, o 15:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[siddawid]]></name></author>
<updated>2014-08-29T14:23:42+01:00</updated>
<published>2014-08-29T14:23:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93358#p93358</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93358#p93358"/>
<title type="html"><![CDATA[Odbiór ciągu znaków UART i podział ich.]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=8330&amp;p=93358#p93358"><![CDATA[
Witam panów i panie. Przyszła mi potrzeba wysyłania z PC do Atmegi16 ciągu znaków . Program do wysyłania ciągów znaków jest pisany prze zemnie w moim kochanym języku programowania Java.<br />Ciąg znaków wygląda np tak:<br />Silnik1123<br />Silnik2032<br />Silnik1255<br />Silnik2001<br />Silnik2110<br />itd<br /> <br />I teraz mi się pojawia troszeczkę zaskakujące pytanie jak w C to podzielić żeby mieć 3 ostatnie liczby z końca osobno czyli np jeżeli mamy &quot;Silnik1200&quot; to ja muszę mieć &quot;Silnik1&quot; i &quot;200&quot;.  W bibliotece z BB mamy tylko odebranie w postaci char i teraz należało by to podzielić . Tylko ja już w tym temacie jestem ciemny jeżeli idzie o C. Jeżeli był by ktoś w stanie pomóc to niech pokaże lub naprowadzi mój tok myślenia na dobrą drogę <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><br /><br />Pozdrawiam Dawid.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2604">siddawid</a> — 29 sie 2014, o 14:23</p><hr />
]]></content>
</entry>
</feed>