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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-09-04T13:06:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=18949&amp;mode</id>
<entry>
<author><name><![CDATA[Aidan]]></name></author>
<updated>2017-09-04T13:06:38+01:00</updated>
<published>2017-09-04T13:06:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=194456#p194456</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=194456#p194456"/>
<title type="html"><![CDATA[Re: Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=194456#p194456"><![CDATA[
Rozwiązanie sprawdziłem i działa wyśmienicie, dokładnie to czego potrzebowałem, dziękuje andrews za poświęcony czas i trafne rozwiązanie problemu <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=17102">Aidan</a> — 4 wrz 2017, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Aidan]]></name></author>
<updated>2017-08-15T09:07:55+01:00</updated>
<published>2017-08-15T09:07:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193409#p193409</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193409#p193409"/>
<title type="html"><![CDATA[Re: Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193409#p193409"><![CDATA[
Dziekuje kolego, ze interesujesz sie tematem, bo juz powoli stracilem nadzieje. Obecnie jestem na wakacjach i nie mam jak tego przetestowac, ale jak tylko wroce bede walczyl dalej<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17102">Aidan</a> — 15 sie 2017, o 09:07</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2017-08-10T17:31:39+01:00</updated>
<published>2017-08-10T17:31:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193283#p193283</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193283#p193283"/>
<title type="html"><![CDATA[Re: Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193283#p193283"><![CDATA[
OK. Wątek na razie przetrwał <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" />, więc spróbujmy może tak.<br />Zakładając, że Twój pierwszy kod obsługi przerwania z odbieraniem pojedynczych znaków wysłanych przez funkcję <strong><em>uart.write()</em></strong>działał prawidłowo, można przyjąć, że żaden znak nie jest dołączany na końcu.<br /><div class="quotetitle">Aidan napisał(a):</div><div class="quotecontent"><br />Przedstawione porównywanie stringów to tylko sposób żeby jakaś zmiana była widoczna po wprowadzeniu danych do robota. To co tak naprawdę chcę zrobić to przesłać string np. w postaci: &quot;-600,-600&quot;. String byłby odbierany przez uart w robocie, następnie poprzez kod w języku C dzielony na 2 substringi, które z kolei byłyby konwertowane do postaci int. Mając zmienne całkowite mógłbym je wstawić jako parametry funkcji odpowiedzialnej za poruszanie się robota np. motor_set_speed(substring1, substring2). Także to całe porównywanie nie jest konieczne, natomiast kluczem do całej sprawy jest odebranie jakoś stringa w wyżej wymienionej postaci, oczywiście o ile jest to możliwe.<br /></div><br />Zmodyfikowałem nieco Twoje założenia:<br /><ul><li>funkcja <strong><em>motor_set_speed()</em></strong> przyjmuje argumenty typu <strong><em>int16_t</em></strong>, zresztą tak chyba miałeś wcześniej, nie wiem dlaczego poźniej piszesz <strong><em>motor_set_speed(substring1, substring2)</em></strong></li><li>format komend to ciąg znaków:<ul><li>znak '-' [opcjonalnie]</li><li>jedna lub więcej (do czterech) cyfr</li><li>przecinek</li><li>znak '-' [opcjonalnie]</li><li>jedna lub więcej (do czterech) cyfr</li><li>znak końca transmisji '\n' obligatoryjnie</li></ul></li></ul>Stworzyłem następującą procedurę obsługi przerwania:[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br />// .. inne wymagane pliki nagłówkowe<br /><br />#define BUFFER_SIZE 16<br />#define DELIMITER &quot;,&quot;<br /><br />// --------------------------------------------<br />// inne deklaracje/definicje funkcji/zmiennych<br /><br />ISR(USART_RXC_vect) {<br /><br />    static char bufor&#91;BUFFER_SIZE&#93;; // bufor odbiorczy<br />    static uint8_t i;               // licznik odebranych znaków<br />    char * ptr;<br />    int16_t param1, param2;<br />    <br />    // odczytanie odebranego znaku<br />    char tmp = UDR;<br />    <br />    if (i&lt;BUFFER_SIZE)  // jeśli ilość odebranych znaków nie przekroczyła<br />                        // rozmiaru bufora<br />    {<br />        if (tmp=='\n')  // jeśli odebrany znak jest znakiem końca linii<br />                        // (u nas znakiem końca transmisji komendy)<br />                        // rozpoczynamy interpretację odebranego ciągu<br />        {<br />            // wstawienie znaku terminującego do bufora<br />            bufor&#91;i&#93; = '\0';<br /><br />            // odczyt pierwszego tokena<br />            ptr = strtok(bufor, DELIMITER);<br />            if (ptr != NULL)<br />            {<br />                param1 = atoi(ptr);     // zamiana ciągu na typ całkowity<br />                                        // 16-bitowy<br />                ptr = strtok(NULL, DELIMITER);<br />                if (ptr != NULL)<br />                {<br />                    param2 = atoi(ptr); // zamiana ciągu na typ całkowity<br />                                        // 16-bitowy<br />                }<br />                else<br />                {<br />                    param2 = 0;<br />                }<br />            }<br />            else<br />            {<br />                param1 = param2 = 0;<br />            }<br />            motor_set_speed(param1,param2);<br />            // ciąg został zinterpretowany i polecenie wykonane<br />            // startujemy licznik od nowa<br />            i = 0;<br />        } //if (tmp=='\n')<br />        else    // jeśli odebrany znak nie jest znakiem końca linii<br />        {<br />            switch(tmp)<br />            {<br />                case '-': case '0': case '1': case '2': case '3':<br />                case '4': case '5': case '6': case '7': case '8':<br />                case '9': case ',':<br />                    bufor&#91;i&#93; = tmp;     // wpisanie do bufora tylko znaków<br />                                        // z zakresu akceptowalnych<br />                    i++;                // zwiększenie licznika<br />                    break;<br />                default: // pominięcie znaków spoza zakresu<br />                    break;<br />            } // switch(tmp)<br />        } //if (tmp=='\n') else<br />    } // if (i&lt;BUFFER_SIZE)<br />    else i=0;   // jeśli rozmiar bufora został przekroczony<br />                // przed odebraniem znaku '\n', zerujemy licznik<br />}[/syntax]<br />Nie mam oczywiście możliwości przetestowania, więc wypróbować musisz osobiście, ale myślę, że powinno zadziałać, jeśli pierwszy kod działał (i nadal działa) prawidłowo.<br />Sposób reakcji na sytuacje awaryjne, kiedy format odebranego ciągu nie jest zgodny z założeniem, należy ewentualnie zmienić/dopracować w zależności od potrzeb.<br />Docelowo napisałbym to inaczej. Głównie chodzi mi o wyniesienie interpretacji odebranego ciągu znaków do pętli głównej. Dla testów jednak taki kod powinien być wystarczająco dobry, o ile nie masz w programie oprócz niego obsługi jeszcze kilku przerwań, ewentualnie jakichś fragmentów kodu krytycznych czasowo.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 10 sie 2017, o 17:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2017-08-07T16:53:50+01:00</updated>
<published>2017-08-07T16:53:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193177#p193177</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193177#p193177"/>
<title type="html"><![CDATA[Re: Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193177#p193177"><![CDATA[
<div class="quotetitle">Aidan napisał(a):</div><div class="quotecontent"><br />Tu też pojawia się problem, bo nie mogę doszukać się co jest u mnie znakiem końca linii<br /></div><br />Niekoniecznie jakiś musi być. Niemniej wiedza na temat tego, co jest dokładnie do robota wysyłane, jest dość kluczowa dla napisania poprawnego, działającego kodu.<br /><br />Można by spróbować dowiedzieć się tego jakoś eksperymentalnie, ale sądząc po wpisie <em>cenzora</em> w pierwszym poście, można się spodziewać, że ten wątek skończy w nicości...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 7 sie 2017, o 16:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Aidan]]></name></author>
<updated>2017-08-08T13:34:08+01:00</updated>
<published>2017-08-07T10:28:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193147#p193147</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193147#p193147"/>
<title type="html"><![CDATA[Re: Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193147#p193147"><![CDATA[
Tu też pojawia się problem, bo nie mogę doszukać się co jest u mnie znakiem końca linii, przesyłanie do robota wykonuje poprzez linijkę kodu uart.write(1,&quot;5&quot;), która jest fragmentem oprogramowania modułu WiFi, z tego co wiem można także przesyłać stringi np. w postaci uart.write(1,&quot;Hello world\n&quot;) i tutaj znak końca linii jest widoczny, natomiast w przypadku przesyłania pojedynczego znaku nie znalazłem żadnej informacji o tym...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17102">Aidan</a> — 7 sie 2017, o 10:28</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2017-08-05T13:10:00+01:00</updated>
<published>2017-08-05T13:10:00+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193084#p193084</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193084#p193084"/>
<title type="html"><![CDATA[Re: Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193084#p193084"><![CDATA[
<div class="quotetitle">Aidan napisał(a):</div><div class="quotecontent"><br />No niestety nie działa u mnie ta metoda.<br /></div><br />No ja przecież napisałem, że to tylko przykład (zarys metody), a nie kod gotowy do użycia, ale mniej więcej tak to należy zrobić. Musisz tylko sobie dostosować kod do tego, co jest wysyłane do robota. Zwykle np. terminale na końcu ciągu dołączają znak CR (Carriage Return) lub LF (Line Feed), lub obydwa te znaki, lub nie wysyłają żadnego, mogą wysyłać znak końca ciągu '\0' lub nie, wszystko zależy od tego, jakiego oprogramowania używasz do wysyłania komend i jak jest skonfigurowane. Ja nie posiadam tych informacji, więc nawet trudno coś konkretnego doradzić.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 5 sie 2017, o 13:10</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Aidan]]></name></author>
<updated>2017-08-05T12:44:10+01:00</updated>
<published>2017-08-05T12:44:10+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193082#p193082</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193082#p193082"/>
<title type="html"><![CDATA[Re: Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193082#p193082"><![CDATA[
No niestety nie działa u mnie ta metoda. Przedstawione porównywanie stringów to tylko sposób żeby jakaś zmiana była widoczna po wprowadzeniu danych do robota. To co tak naprawdę chcę zrobić to przesłać string np. w postaci: &quot;-600,-600&quot;. String byłby odbierany przez uart w robocie, następnie poprzez kod w języku C dzielony na 2 substringi, które z kolei byłyby konwertowane do postaci int. Mając zmienne całkowite mógłbym je wstawić jako parametry funkcji odpowiedzialnej za poruszanie się robota np. motor_set_speed(substring1, substring2). Także to całe porównywanie nie jest konieczne, natomiast kluczem do całej sprawy jest odebranie jakoś stringa w wyżej wymienionej postaci, oczywiście o ile jest to możliwe.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17102">Aidan</a> — 5 sie 2017, o 12:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[andrews]]></name></author>
<updated>2017-08-05T09:24:03+01:00</updated>
<published>2017-08-05T09:24:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193072#p193072</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193072#p193072"/>
<title type="html"><![CDATA[Re: Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193072#p193072"><![CDATA[
<div class="quotetitle">Aidan napisał(a):</div><div class="quotecontent"><br /> [syntax=c]//<br />         char odebrany_bajt&#91;4&#93;;<br /> <br />         odebrany_bajt&#91;3&#93; = UDR;<br />         UDR=odebrany_bajt&#91;3&#93;;[/syntax]<br /></div><br />Tym sposobem:<br /><ul><li>tablica jest tworzona przy każdym wywołaniu procedury obsługi przerwania i (jako zmienna lokalna) będzie zawierać losowe wartości,</li><li>każdy odebrany znak wpisujesz tylko do ostatniego elementu tablicy <strong><em>odebrany_bajt[]</em></strong> (o indeksie 3), pozostałe zawierają losowe wartości,</li><li>porównujesz ciąg w tablicy z wzorcem, a tablica zawiera losowe wartości i odebrany znak na końcu.</li></ul>Powinieneś wpisywać odebrane znaki po kolei do tablicy, która notabene powinna być zadeklarowana jako <strong><em>static</em></strong>.<br />Mogłoby to wyglądać mniej więcej tak:<br />[syntax=c]//<br />    static char odebrany_bajt&#91;4&#93;;<br />    static uint8_t i = 0;<br /> <br />    odebrany_bajt&#91;i&#93; = UDR;<br />    UDR=odebrany_bajt&#91;i&#93;;<br />    i++;<br />    // porównanie wykonujesz dopiero po odebraniu odpowiedniej ilości znaków<br />    if(i==4)<br />    {<br />        // tutaj porównywanie odebranego ciągu z wzorcami<br />        i = 0;<br />    }[/syntax]<br />jednak dokładna implementacja zależy od tego, w jaki dokładnie sposób terminal/program (którym wysyłasz dane do robota)  kończy transmisję ciągu znaków.<br /><br />Poza tym używanie większej ilości porównań <strong><em>strcmp()</em></strong> w procedurze obsługi przerwania to nie najlepszy pomysł, ze względu na dość długi czas wykonania, a obsługa przerwania powinna być jak najkrótsza. Lepiej odebrać dane do jakiegoś bufora zadeklarowanego globalnie, w procedurze ustawić tyko flagę po odebraniu całego ciągu, a dekodowanie wykonywać w pętli głównej programu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=14165">andrews</a> — 5 sie 2017, o 09:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Aidan]]></name></author>
<updated>2017-08-04T15:07:19+01:00</updated>
<published>2017-08-04T15:07:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193048#p193048</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193048#p193048"/>
<title type="html"><![CDATA[Maor12 - przesyłanie stringów do robota]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18949&amp;p=193048#p193048"><![CDATA[
Cześć<br /><br />Mam zrobioną komunikację robota z modułem &lt;<strong><span style="color: #FF0000">WIFI</span></strong>&gt;, która bazuje na wywołaniu przerwania i przesyłaniu pojedynczych bajtów, a mianowicie przesyłam bajt za pomocą uart.write(1,&quot;5&quot;) co skutkuje tym, że jedzie on do przodu, itp.<br /> <br />[syntax=c]unsigned char odebrany_bajt;<br /><br />    odebrany_bajt = UDR;    <br />UDR=odebrany_bajt;<br /><br />    switch(odebrany_bajt)<br />    {<br />        case '1':                                                                <br />              motor_set_speed(-1023,1023);    <br />              break;<br />        case '2':                                                                 <br />              motor_set_speed(1023,1023);     <br />              break;<br />        case '3':                                                                 <br />              motor_set_speed(1023,-1023);<br />              break;<br />        case '4':                                                                <br />              motor_set_speed(-500,500);     <br />              break;<br />        case '5':                                                                <br />              motor_set_speed(500,500);     <br />              break;<br />       <br />}[/syntax]<br /><br />To na czym mi obecnie zależy to zrobienie czegoś podobnego, ale nie na bajtach, a na stringach. W programowaniu urządzeń typu AVR jestem zielony i mam problem ze zrealizowaniem tego.<br /><br />Moje próby ograniczyły się do realizacji mojego zamysłu na sposób, a mianowicie poprzez porównywanie stringów w języku C. Opracowany fragment kodu:<br /><br />[syntax=c]char odebrany_bajt&#91;4&#93;;<br /><br /> odebrany_bajt&#91;3&#93; = UDR;<br /> UDR=odebrany_bajt&#91;3&#93;;<br /><br />if (strcmp(odebrany_bajt, &quot;111&quot;)==0) {<br />motor_set_speed(500,500);<br />}<br />else if (strcmp(odebrany_bajt, &quot;112&quot;)==0) {<br />motor_set_speed(-100,100);<br />}<br />else if (strcmp(odebrany_bajt, &quot;113&quot;)==0) {<br />motor_set_speed(-900,-900);<br />}<br />else if (strcmp(odebrany_bajt, &quot;114&quot;)==0) {<br />motor_set_speed(0,0);<br />}<br />else  {<br />motor_set_speed(200,200); <br />};[/syntax]<br /><br />Opcja else posłużyła mi do debugowania, po przesłaniu stringa za pomocą uart.write(1,&quot;111&quot;) robot nie reaguje prawidłowo, czyli zakładam, ze to nie jest tak proste jak przypuszczałem. Natomiast coś zostaje przesłane, bo robot kręci kołami z prędkością 200, tak jak jest to uwzględnione w zwykłym else. Bardzo prosiłbym o jakieś wskazówki. Caly kod źródłowy robota dostępny jest na stronie:<br /><!-- m --><a class="postlink" href="http://www.wobit.com.pl/produkt/7997/roboty-mobilne/maor-12v2-robot-mobilny-klasy-minisumo/" >http://www.wobit.com.pl/produkt/7997/ro ... -minisumo/</a><!-- m --><br /><br />Podsyłam cały kod pliku Uart_komunikacja.c dla lepszego przedstawienia problemu<br /><br />[syntax=c]#include &lt;avr/io.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;stdlib.h&gt;<br />#include &lt;string.h&gt;<br /><br />#include &quot;Uart_komunikacja.h&quot;<br />#include &quot;main.h&quot;<br />#include &quot;Funkcje.h&quot;<br />#include &quot;Adc.h&quot;<br />#include &quot;robot_soft_config.h&quot;<br /><br />////////////////////////////////////////////////////////////////////////////////<br />static unsigned char UART_TxBuf&#91;UART_TX_BUFFER_SIZE&#93;;<br /><br />////////////////////////////////////////////////////////////////////////////////<br /><br />void UART_init(void)//inicjalizacja komunikacji<br />{   <br />   UBRRL=16;                                                        //dla 57600@16MHz<br />   //UBRRL=8;                                                        //dla 57600@8MHz<br />   UCSRB=0x98;                                                                  //10011000<br />   UCSRC=0x86;<br />   <br />   UART_TxTail = 0;<br />   UART_TxHead = 0;<br />   <br />}<br />////////////////////////////////////////////////////////////////////////////////<br />// Funkcja przerwania od odebranego znaku przez UART oraz dekodowanie znaku<br />////////////////////////////////////////////////////////////////////////////////<br /><br /><br />ISR(USART_RXC_vect)<br />{  <br /><br />/*<br />    unsigned char odebrany_bajt;<br /><br />    odebrany_bajt = UDR;    <br />UDR=odebrany_bajt;<br /><br />    switch(odebrany_bajt)<br />    {<br />        case '1':                                                                 // lewo 100%<br />              motor_set_speed(-1023,1023);    <br />              break;<br />        case '2':                                                                 // przod 100%<br />              motor_set_speed(1023,1023);     <br />              break;<br />        case '3':                                                                 // prawo 100%<br />              motor_set_speed(1023,-1023);<br />              break;<br />        case '4':                                                                 // lewo 50%<br />              motor_set_speed(-500,500);     <br />              break;<br />        case '5':                                                                 // przod 50%<br />              motor_set_speed(500,500);     <br />              break;<br />       <br />    }<br /><br />*/<br /><br />   char odebrany_bajt&#91;4&#93;;<br /><br /> odebrany_bajt&#91;3&#93; = UDR;<br /> UDR=odebrany_bajt&#91;3&#93;;<br /><br />if (strcmp(odebrany_bajt, &quot;111&quot;)==0) {<br />motor_set_speed(500,500);<br />}<br />else if (strcmp(odebrany_bajt, &quot;112&quot;)==0) {<br />motor_set_speed(-100,100);<br />}<br />else if (strcmp(odebrany_bajt, &quot;113&quot;)==0) {<br />motor_set_speed(-900,-900);<br />}<br />else if (strcmp(odebrany_bajt, &quot;114&quot;)==0) {<br />motor_set_speed(0,0);<br />}<br />else  {<br />motor_set_speed(200,200); <br />};<br /> <br /> <br /><br />}<br /><br />////////////////////////////////////////////////////////////////////////////////<br />//Wysylanie bajtu poprzez wpisanie do bufora nadawczeo i uruchomienie przerwania<br />//od pustego rejestru danej do wyslania<br />////////////////////////////////////////////////////////////////////////////////<br /><br />inline void UART_transmit_byte( unsigned char data )<br />{<br />unsigned char tmphead;<br /><br />   tmphead = ( UART_TxHead + 1 ) &amp; UART_TX_BUFFER_MASK; <br />   <br />   while ( tmphead == UART_TxTail );<br />                                               //czekaj na wolne miejsce w buforze<br />   <br />   UART_TxBuf&#91;tmphead&#93; = data;                                            //zapisz dane w buforze<br />   UART_TxHead = tmphead;<br /><br />   UCSRB|=(1&lt;&lt;UDRIE);                                            //uruchom przerwania<br />}<br /><br /><br /><br />void UART_print(char *tekst)                                                    //wypisywanie na terminal<br />{<br />    unsigned char i=0;<br />    <br />    do{<br />    UART_transmit_byte(*(tekst+i));<br />    i++;<br />    }while(*(tekst+i));<br /><br />}[/syntax]<br /><br /><span style="color: #FF0000">&lt;ocenzurowano nazwę modułu wifi &gt;   -- zły mod cenzor</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=17102">Aidan</a> — 4 sie 2017, o 15:07</p><hr />
]]></content>
</entry>
</feed>