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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-12-12T00:33:47+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=63&amp;t=17046&amp;mode</id>
<entry>
<author><name><![CDATA[resonator]]></name></author>
<updated>2016-12-12T00:33:47+01:00</updated>
<published>2016-12-12T00:33:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=17046&amp;p=177190#p177190</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=17046&amp;p=177190#p177190"/>
<title type="html"><![CDATA[Problem z odbiorem danych przez BT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=17046&amp;p=177190#p177190"><![CDATA[
Mam problem z odbieraniem danych wysyłanych przez avr poprzez moduł HC-05. Wysyłam sobie ramki danych z prędkością 9600bps w takim formacie:<br />KOMENDA : ILOŚĆ_ZNAKÓW : ZNAK1,2...<br /><br />Na androidzie mam skonfigurowany AsyncStream ze zdarzeniem NewData<br /><br />Zauważyłem, że nie mogę wysyłać bajtów jeden zaraz po drugim bo android, omija wtedy niektóre transfery. Pomiędzy nimi musi być opóźnienie rzędu kilku ms żeby działało bez przeszkód. Dziwne jest też to że na jednym telefonie wystarczy 7ms a na innym musi być aż 50ms.<br /><br />Kod wysyłający z opóźnieniem wygląda tak, wysyłam nim sformatowaną ramkę zapisaną w tablicy.<br />[syntax=c]void USART_transmitC( unsigned char data )<br />{<br />while ( !( UCSRA &amp; (1 &lt;&lt; UDRE)) );    //oczekiwanie na opróżnienie bufora nadawania<br />UDR = data;                         //wpisanie danej do bufora<br />}<br /><br />void USART_transmitT( unsigned char *data )<br />{<br />while(*data)<br />{<br />USART_transmitC(*data++);<br />_delay_ms(10);<br />}<br />}[/syntax]<br /><br />A android odbiera tak:<br />[syntax=basic4gl]Private Sub astreams_NewData (Buffer() As Byte)<br /><br />' komenda ilość_znaków znak1,2,3...<br /><br />' komenda jest powiększona o 11<br />' każdy znak jest powiększony o 1<br />' znaki wysyłane są w odwrotnej kolejności niż zapisane są w liczbie<br /><br />Dim temp As Byte<br />temp = Buffer(0)<br /><br />If temp &lt;= 10 Then                                     'jeśli bajt nie jest komendą<br />If commandReceived Then                                    'jeśli komenda została już wcześniej odebrana<br />If stp = 0 Then                                               'jeśli jest to 1 krok<br />length = temp                                                   'odbierz ilość znaków<br />stp = 1                                                         'następny krok<br />Else If stp &lt;= length Then                                    'w innym wypadku jeśli nr kroku jest mniejszy lub równy ilości znaków<br />value = value + (temp-1) * Power(10, stp-1)                     'dopisz do wartości odebrany znak<br />stp = stp + 1                                                   'następny krok<br />If stp = length + 1 Then                                        'jeśli nr kroku jest równy ilości znaków<br />commandReceived = False                                           'wyczyść flagę odebranej komendy<br />stp = 0                                                           'wróć do 1 kroku<br />CallSubDelayed3(mTarget, mEventName &amp; &quot;_NewFrame&quot;, command, value)'wywołaj funkcję odbioru ramki<br />End If<br />End If<br />End If<br />Else                          'jeśli bajt jest komendą<br />command = temp-11                 'zapisz prawdziwą komendę<br />commandReceived = True            'flaga odebranej komendy<br />stp = 0                           'krok 1<br />value = 0                         'zresetuj wartość<br />End If<br /><br />End Sub[/syntax]<br /><br />Starłem się to jak najczytelniej zakomentować. Nie podałem funkcji formatującej dane w avr ale myślę że nie ma sensu mieszać bardziej.<br /><br />I tutaj przykład co się dzieje gdy zmniejsze opóźnienie poniżej 10ms i będe wysyłał coś co 300ms<br /><!-- m --><a class="postlink" href="https://drive.google.com/open?id=0B0GMIRRogS7aUTRLLTlUMnVOZ1E" >https://drive.google.com/open?id=0B0GMI ... TlUMnVOZ1E</a><!-- m --><br /><br />A tutaj z opóźnieniem 10ms i większym<br /><!-- m --><a class="postlink" href="https://drive.google.com/open?id=0B0GMIRRogS7aYzdMOTd0MFNaTk0" >https://drive.google.com/open?id=0B0GMI ... Td0MFNaTk0</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8721">resonator</a> — 12 gru 2016, o 00:33</p><hr />
]]></content>
</entry>
</feed>