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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2017-07-09T22:08:50+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=66&amp;t=18687&amp;mode</id>
<entry>
<author><name><![CDATA[acid255]]></name></author>
<updated>2017-07-09T22:08:50+01:00</updated>
<published>2017-07-09T22:08:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191878#p191878</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191878#p191878"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191878#p191878"><![CDATA[
Podepnę si e pod temat, bo zdaje się, że kolega <strong>Makowka</strong> ma ten sam problem co ja. <br />Zacznę od kodu:<br /><br />[syntax=delphi]procedure TForm1.ComDataPacket1Packet(Sender: TObject; const Str: string);<br /><br />begin<br /><br />    if str = 'OK' then begin<br />        FlagaCom1 := True;<br />    end else begin<br />       FlagaCom1 := False;<br />    end;<br />end;[/syntax]<br /><br />Problem jest taki: podczas pierwszego wywołania procedury ComDataPacket1Packet zmienna ( globalna ) FlagaCom1 przyjmuje wartość True, a po drugim wywołaniu ( pomimo, iż nadaję str = 'OK' ) zmienna FlagaCom1 przyjmuje już zawsze wartość False. Dlaczego ?<br /><br />Sprawdzam w Memo1 i str powinna mieć wartość 'OK' czyli FlagaCom1 powinna być równa True.<br /><br />Procedurę tą chcę wykorzystać w taki sposób, że co 3 sekundy wywołuje zdarzenie Timer1 z zapytaniem &quot;AT&quot;, w odpowiedzi dostaje &quot;OK&quot; lub jeśli urządzenie nie odpowiada to nic i dlatego chce aby FlagaCom1 odpowiednio się ustawiała.<br /><br />--------<br />Problem rozwiązałem - błąd w kodzie i to banalny, bo nie zerowałem flagi.<br />...<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3673">acid255</a> — 9 lip 2017, o 22:08</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Makowka]]></name></author>
<updated>2017-06-26T14:15:12+01:00</updated>
<published>2017-06-26T14:15:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191269#p191269</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191269#p191269"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191269#p191269"><![CDATA[
Testowałem wszystkie funkcjonalności manualnie z terminala. Za każdym razem polecenie jest wykonywane prawidłowo i dostaję odpowiedź od ATmegi w puttym. Problem musi leżeć w aplikacji.<br /><br />Sprawdzę jeszcze wieczorem ustawienia datapacket i comportu. Bo najprawdopodobniej tam musi leżeć problem.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10748">Makowka</a> — 26 cze 2017, o 14:15</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Adam12]]></name></author>
<updated>2017-06-26T12:44:11+01:00</updated>
<published>2017-06-26T12:44:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191263#p191263</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191263#p191263"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191263#p191263"><![CDATA[
Ale skąd wiesz, że po wysłaniu czegoś na LCD, dane są prawidłowo odbierane? Musiałbyś może podpiąć się bezpośrednio pod ComPort i podglądać to co do niego dochodzi z pominięciem DataPacket. Spróbuj podzielić aplikację na mniejsze części, wykastruj do testów z obsługi grafiki itp., zostaw tylko samą komunikację i wtedy szukaj przyczyny. Posprawdzaj dokładnie ustawienia ComPort'a, może następuje np. przepełnienie bufora. Przede wszystkim musisz się upewnić czy ATmega po odbiorze danych do LCD odpowiada prawidłowo, a jeśli tak to czy to może w aplikacji coś się blokuje po wysłaniu tych danych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16417">Adam12</a> — 26 cze 2017, o 12:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Makowka]]></name></author>
<updated>2017-06-25T20:59:26+01:00</updated>
<published>2017-06-25T20:59:26+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191232#p191232</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191232#p191232"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191232#p191232"><![CDATA[
Dziękuję Panowie za cenne wskazówki. <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Udało mi się dojść do bardzo dziwnej rzeczy.<br /><br />Oczyściłem główną pętlę while(1) w ATmedze (jest tam teraz tylko event rs232) i teraz sytuacja wygląda tak:<br />1. Po zmianie podświetlenia LCD (on/off) działa poprawnie (w polu memo aplikacji ładnie widać odpowiedzi AT)<br />2. TRUE/FALSE już również działa prawidłowo (dowolną ilość razy - w memo również mamy podgląd)<br />3. Wysyłanie tekstu do LCD działa, ale po wysłaniu czegokolwiek na wyświetlacz blokuje mi się na amen odbiór danych (tzn. wysyłanie z apki chodzi bez zarzutu, ale nie mogę już nic odebrać - memo milczy chociaż dane są odbierane...)<br /><br />Wrzucam poniżej kod z ATmegi z funkcjami do obsługi wszystkich komend:<br />[syntax=c]int8_t at_service(uint8_t inout, char * params){<br />uart_puts(&quot;OK&quot;);<br />return 0;<br />}<br /><br />int8_t at_rst_service(uint8_t inout, char * params){<br />return 0;<br />}<br /><br />int8_t at_led_service(uint8_t inout, char * params){<br />if (1 == inout){<br />// Zapis danych<br />if( params&#91;0&#93; &gt; '1' ) return -1;<br /><br />if( '1' == params&#91;0&#93; ) LED_ON;<br />else LED_OFF;<br />uart_puts(&quot;+LED: &quot;);<br />if ( LED_PIN &amp; LED ) uart_putint(1,10);<br />else uart_putint(0,10);<br />uart_puts(&quot;\r\n&quot;);<br /><br />} else if (!inout){<br />// Odczyt danych<br />uart_puts(&quot;+LED: &quot;);<br />if ( LED_PIN &amp; LED ) uart_putint(1,10);<br />else uart_putint(0,10);<br />uart_puts(&quot;\r\n&quot;);<br />} else if (2 == inout){<br />// Zwrot argumentow<br />uart_puts(&quot;AT+LED = (0/1)\r\n&quot;);<br />}<br />return 0;<br />}<br /><br />int8_t at_lcd_service(uint8_t inout, char * params){<br />uint8_t y,x;<br />char * wsk;<br /><br />if( 1 == inout ) {<br />// sprawdzamy czy s¹ parametry, jeli nie to b³¹d<br />if(!strlen(params)) return -1;<br />// wy³uskujemy pierwszy parametr do przecinka<br />wsk = strtok(params, &quot;,&quot;);<br />// sprawdzamy czy s¹ parametry, jeli nie to b³¹d<br />if(!strlen(wsk)) return -1;<br />// zamieniamy liczbê ASCII na wartoœæ dziesiêtn¹<br />y=atoi(wsk);<br />// jeœli Y  nie mieœci siê w zakresie od 0 do 3 to b³¹d<br />if( !(y&gt;=0 &amp;&amp; y&lt;4) ) return -1;<br />// wy³uskujemy drugi parametr do przecinka<br />wsk = strtok(0, &quot;,&quot;);<br />// sprawdzamy czy s¹ parametry, jeli nie to b³¹d<br />if(!strlen(wsk)) return -1;<br />// zamieniamy liczbê ASCII na wartoœæ dziesiêtn¹<br />x=atoi(wsk);<br />// jeœli X  nie mieœci siê w zakresie od 0 do 39 to b³¹d<br />if( !(x&gt;=0 &amp;&amp; y&lt;40) ) return -1;<br />// wy³uskujemy trzeci parametr do przecinka lub do koñca ³añcucha<br />wsk = strtok(0, &quot;,&quot;);<br />// sprawdzamy czy s¹ parametry, jeli nie to b³¹d<br />if(!strlen(wsk)) return -1;<br />// ustawiamy kursor w zadanym miejscu y,x<br />lcd_locate(y,x);<br />// wyœwietlamy tekst<br />lcd_str( wsk );<br />uart_puts(&quot;OK\r\n&quot;);<br /><br /><br />} else if( 2 == inout ) {<br />uart_puts(&quot;AT+LCD = (0-3), (0-39),(TEXT)\r\n&quot;);<br />} else {<br />if( !inout ) return -1;<br />}<br /><br />return 0;<br />}<br /><br />int8_t at_cls_service(uint8_t inout, char * params){<br />lcd_cls();<br />return 0;<br />}<br /><br />int8_t at_qtf_service(uint8_t inout, char * params){<br />TF_flag = 1;<br />//uart_puts(&quot;QTF service in progress...\r\n&quot;);<br />while (1){<br />if (!(PIND &amp; (1&lt;&lt;PD2))) {<br />uart_puts(&quot;ans_tf+TRUE&quot;);<br />//key_flag.True = 0;<br />TF_flag = 0;<br />break;<br />} if (!(PIND &amp; (1&lt;&lt;PD3))) {<br />uart_puts(&quot;ans_tf+FALSE&quot;);<br />//key_flag.False = 0;<br />TF_flag = 0;<br />break;<br />}<br />}<br /><br />return 0;<br />}[/syntax]<br /><br />Wstawiam filmik z działania aplikacji. W momencie wysyłania do LCD i zmiany tekstu na ATB wszystko działa (oczywiście poza T/F). Tak jak pisałem nie przychodzą powiadomienia.<br />Jest dobrze dopiero po &quot;resecie&quot; comportu.<br /><br /><a href="https://youtu.be/TlCtnwmxrjc"  class="postlink">https://youtu.be/TlCtnwmxrjc</a><br /><br />Pozdrawiam,<br />Michał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10748">Makowka</a> — 25 cze 2017, o 20:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-06-25T17:14:11+01:00</updated>
<published>2017-06-25T17:14:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191223#p191223</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191223#p191223"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191223#p191223"><![CDATA[
<div class="quotetitle">Adam12 napisał(a):</div><div class="quotecontent"><br />Przecież to jest tablica stringów - tab: TArray&lt;String&gt;;<br /></div><br />Ach to przepraszam - mi się coś pomieszało .... sorki<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 cze 2017, o 17:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Adam12]]></name></author>
<updated>2017-06-25T17:06:47+01:00</updated>
<published>2017-06-25T17:06:47+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191222#p191222</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191222#p191222"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191222#p191222"><![CDATA[
Przecież to jest tablica stringów - tab: TArray&lt;String&gt;;  Ja tu błędu nie widzę. Ta procedura działa poprawnie jeśli się jej podstawia pod Str stringi takie jakie są wysyłane z ATmegi. W linii 8 buf.Split dzieli wg &quot;+&quot; i w tab[0] jest np. &quot;ans_tf&quot;, nie może być inaczej. Pytanie co Ci się wyświetla w Memo2, bo widzę, że masz podgląd zawartości buf? Jeśli już tu jest błąd to znaczy, że DataPacket złego stringa podstawia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=16417">Adam12</a> — 25 cze 2017, o 17:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-06-25T13:06:56+01:00</updated>
<published>2017-06-25T13:06:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191213#p191213</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191213#p191213"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191213#p191213"><![CDATA[
<div class="quotetitle">Makowka napisał(a):</div><div class="quotecontent"><br />Chciałem sprawdzić, czy pierwszy element tablicy (czyli pierwsza część stringu do znaku &quot;+&quot;) jest równa &quot;ans_tf&quot;.<br /></div><br />Powiedz mi jak pierwszy (JEDEN ELEMENT) tablicy może być równy jakiemuś całemu stringowi hmmm?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 cze 2017, o 13:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Makowka]]></name></author>
<updated>2017-06-25T07:59:21+01:00</updated>
<published>2017-06-25T07:59:21+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191203#p191203</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191203#p191203"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191203#p191203"><![CDATA[
Dziękuję za szybką odpowiedź.  <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br /><br /><div class="quotetitle">mirekk36 napisał(a):</div><div class="quotecontent"><br />Makowka napisał(a):<br />if tab[0] = 'ans_tf' then begin<br /><br />Zastanów się i spróbuj sam wyjaśnić sobie i nam - np co to oznacza wg ciebie ?<br /></div><br /><br />Chciałem sprawdzić, czy pierwszy element tablicy (czyli pierwsza część stringu do znaku &quot;+&quot;) jest równa &quot;ans_tf&quot;. Chodziło o prosty sposób analizowania jaki rodzaj odpowiedzi przysłało urządzenie.<br /><br />[syntax=c]uart_puts(&quot;ans_tf+TRUE\r\n&quot;); // Odpowiedź wysyłana przez uC[/syntax]<br /><br />Jak rozumiem tab[0] powinien się równać &quot;ans_tf&quot;, natomiast tab[1] - &quot;TRUE&quot;.<br />Chociaż z tego co widzę to chyba nie jest najlepszy sposób.<br /><br />Pozdrawiam,<br />Michał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10748">Makowka</a> — 25 cze 2017, o 07:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2017-06-25T00:36:15+01:00</updated>
<published>2017-06-25T00:36:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191200#p191200</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191200#p191200"/>
<title type="html"><![CDATA[Re: Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191200#p191200"><![CDATA[
<div class="quotetitle">Makowka napisał(a):</div><div class="quotecontent"><br />if tab[0] = 'ans_tf' then begin<br /></div><br />Zastanów się i spróbuj sam wyjaśnić sobie i nam - np co to oznacza wg ciebie ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 25 cze 2017, o 00:36</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Makowka]]></name></author>
<updated>2017-06-24T21:54:29+01:00</updated>
<published>2017-06-24T21:54:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191192#p191192</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191192#p191192"/>
<title type="html"><![CDATA[Delphi - komendy AT]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=18687&amp;p=191192#p191192"><![CDATA[
Witam szanownych użytkowników forum, <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <br />Po wielu godzinach pracy poddałem się i postanowiłem zasięgnąć pomocy osób bardziej doświadczonych w Delphi ode mnie. Jestem praktycznie początkujący jeżeli chodzi o aplikacje na Windowsa.<br />Wszystko na PC zrobione jest na podstawie poradników Mirka natomiast po stronie uC zastosowałem komunikację AT z Greenbooka.<br /><br />Za pomocą aplikacji na PC wysłam prostą komendę do uC, następnie urządzenie przechodzi w stan badania 2 przycisków i zależnie od wciśnięcia wysyłana jest odpowiedź jako string &quot;TRUE&quot; lub &quot;FALSE&quot; z powrotem do aplikacji. Do tej pory wszystko jest ok. Nastepnie string jest parsowany w programie i label obok przycisku zmienia się na TRUE lub FALSE (zdjęcie poniżej).<br /><br /><a href="https://obrazkiforum.atnel.pl/10748/0bcf84f7d8daba86342308d89b8b1eb9.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/10748/0bcf84f7d8daba86342308d89b8b1eb9.png" alt="Obrazek" /></a><br /><br />Niestety działa to tylko raz po nawiązaniu połączenia. Aby jeszcze raz sprawdzić stan przycisków, muszę zamknąć i otworzyć comport. Dane na 100% są wysyłane poprawnie. Potwierdzają to diody na ATB i terminal. Po prostu DataPacket analizuje je tylko za pierwszym razem.<br /><br />[syntax=delphi]procedure TForm1.dPacketPacket(Sender: TObject; const Str: string);<br />var<br />  buf: String;<br />  tab: TArray&lt;String&gt;;<br />begin<br />  buf := Trim( Str );<br />  Memo2.Lines.Add(buf);<br />  tab := buf.Split( &#91;'+'&#93; );<br /><br />  if tab&#91;0&#93; = 'ans_date' then begin<br />    DateAnswer := tab&#91;1&#93;;<br />    Label5.Caption := DateAnswer;<br />  end;<br /><br />  if tab&#91;0&#93; = 'ans_multi' then begin<br />  MultipleAnswer := tab&#91;1&#93;;<br />  Label6.Caption := MultipleAnswer;<br />  end;<br /><br />  if tab&#91;0&#93; = 'ans_tf' then begin<br />    TFAnswer := tab&#91;1&#93;;<br />    Label7.Caption := TFAnswer;<br />  end;<br /><br /><br />end;[/syntax]<br /><br />Obsługa komendy AT ze strony ATmegi:<br />[syntax=c]int8_t at_qtf_service(uint8_t inout, char * params){<br />TF_flag = 1;<br />//uart_puts(&quot;QTF service in progress...\r\n&quot;);<br />while (1){<br />if (!(PIND &amp; (1&lt;&lt;PD2))) {<br />uart_puts(&quot;ans_tf+TRUE\r\n&quot;);<br />//key_flag.True = 0;<br />TF_flag = 0;<br />break;<br />} if (!(PIND &amp; (1&lt;&lt;PD3))) {<br />uart_puts(&quot;ans_tf+FALSE\r\n&quot;);<br />//key_flag.False = 0;<br />TF_flag = 0;<br />break;<br />}<br />}<br /><br />return 0;<br />}[/syntax]<br /><br />Z góry dziękuję za odpowiedź. <br /><br />Pozdrawiam,  <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> <br />Michał<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10748">Makowka</a> — 24 cze 2017, o 21:54</p><hr />
]]></content>
</entry>
</feed>