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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2016-05-02T19:13:36+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=59&amp;t=15271&amp;mode</id>
<entry>
<author><name><![CDATA[SunRiver]]></name></author>
<updated>2016-05-02T19:13:36+01:00</updated>
<published>2016-05-02T19:13:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159765#p159765</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159765#p159765"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159765#p159765"><![CDATA[
oczywiście że mozna i jest na to kilkka sposobów , można najprościej użyć progressbar'a , ale może być to dowolna animacja nawet podstawiona<br />z pliku animowanego jak GIF czy krótki AVI , mozna też stworzyć własną kontrolkę , nie mniej przy tak małych ilościach danych jakie będziesz przesyłał <br />niema to chyba sensu większego <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=58">SunRiver</a> — 2 maja 2016, o 19:13</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-02T15:32:04+01:00</updated>
<published>2016-05-02T15:32:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159740#p159740</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159740#p159740"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159740#p159740"><![CDATA[
Możesz do tego wykorzystać komponent progress bar, ale jak chcesz mieć wykres kołowy, to pewnie są jakieś dodatkowe biblioteki czy coś podobnego, bo jak sam piszesz, tworzyć tyle osobnych grafik mija się z celem.<br /><br />Polecam utworzyć nowy wątek w tej sprawie, pewnie znajdzie się ktoś kto będzie potrafił odpowiedzieć na to pytanie, też jestem ciekaw rozwiązania tego zagadnienia;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 2 maja 2016, o 15:32</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-02T11:59:36+01:00</updated>
<published>2016-05-02T11:59:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159725#p159725</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159725#p159725"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159725#p159725"><![CDATA[
Jeszcze raz dzięki za pomoc. Terminal już działa w porządku, odbiera dane, otwiera się i zamyka tak jak chce. Dodatkowo stworzyłem sobie wyskakujące okienko do inicjalizacji parametrów portu szeregowego. Teraz mam kolejne pytania. Czy jest możliwość w jakiś sposób zrobić takiej &quot;animacji&quot; w programie. Tzn odbieram dane z uart np 3000. W programie chciałbym mieć wykres kołowy, którego wskazówka odchyla się w zależności od wartości odebranej z uart? Wpadłem na pomysł, żeby wykorzystać obiekt picturebox i w zależności od wartości ładować do niego grafikę, ale jeżeli mam rozdzielczość 12bitową to nie widzi mi się tworzyć 4096 grafik...<br />Mam nadzieję, że wyraziłem się jasno o co mi chodzi. Jest na to jakiś prostszy sposób ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 2 maja 2016, o 11:59</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-01T21:45:22+01:00</updated>
<published>2016-05-01T21:45:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159703#p159703</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159703#p159703"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159703#p159703"><![CDATA[
Ciesze się, że mogłem pomóc. Pewnie można byłoby ten problem inaczej rozwiązać, ale nic innego mi nie przychodzi do głowy. Spróbuj zmniejszyć bądź zwiększyć rozmiar bufora i sprawdzić jak się program zachowa (oczywiście wcześniej zakomentować usuwanie i dodawanie metody w zdarzeniu)<br /><br />A co do kolejnego pytania to ja bym zrobił to w ten sposób, że w warunku if sprawdzałbym te dane i później wywoływał odpowiednią metodę, np:<br />[syntax=csharp]if(received == &quot;1=1122&quot;)<br />{<br />        metoda_1();<br />}else if(received == &quot;2=123&quot;)<br />{<br />        metoda_2();<br />}[/syntax]<br /><br />Albo zastosował do porównania gotowe metody które dostarcza klasa string. W zależności co byłoby lepsze i lepiej działało.<br />Te sprawdzanie tego warunku wykonywałbym najlepiej w osobnym wątku co jakiś czas, tak aby nie zakłócić działania reszty programu. Ale na początek lepiej jednak zacząć od wykonywania czynności po naciśnięciu w przycisk, bądź od razu po odebraniu danych, niż zagłębiać się w wątki. Do wątków zawsze można później przejść;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 1 maja 2016, o 21:45</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-01T21:33:34+01:00</updated>
<published>2016-05-01T21:33:34+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159702#p159702</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159702#p159702"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159702#p159702"><![CDATA[
Teraz jest w porządku. Po kliknięciu w przycisk wszystko działa tak jak należy, port rozłącza się normalnie.<br />[syntax=csharp]ReadBufferSize = 4096[/syntax]<br /><br />W jaki sposób mogę wywoływać poszczególną metodę w zależności od rodzaju odebranych danych z rs ? Przykładowo odbieram stringa &quot;1=1122\n&quot; i potem kolejny np &quot;2=123\n&quot; i w zależności od tego wywołać odpowiednią metodę, w której dokonuję obliczeń na tej liczbie i wyświetlam ją w wybranych labelach ?<br /><br />Kolego &quot;danielos&quot;, zasłużyłeś tutaj na wodospad pochwał <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=8379">drewpol</a> — 1 maja 2016, o 21:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-01T21:17:15+01:00</updated>
<published>2016-05-01T21:17:15+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159700#p159700</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159700#p159700"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159700#p159700"><![CDATA[
To teraz spróbujemy przed wyłączeniem portu usunąć metodę ze zdarzenia:<br />[syntax=csharp]serialPort1.DataReceived_1 -= serialPort1_DataReceived_1;<br />                //zamknięciu portu - odłączenie<br />                serialPort1.Close();<br />                serialPort1.DataReceived_1 += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived_1);[/syntax]<br /><br />Po odłączeniu metoda jest znowu jest przypisywana do zdarzenia.<br /><br />A jaki masz ustawiony bufor ilości odebranych danych dla portu szeregowego?<br /><br />---------------<br />Spróbujemy jeszcze inaczej<br />Tutaj masz mój terminal i sprawdź czy na nim wszystko działa:<br />Cs_01_Terminal.zip<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 1 maja 2016, o 21:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-01T20:49:03+01:00</updated>
<published>2016-05-01T20:49:03+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159696#p159696</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159696#p159696"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159696#p159696"><![CDATA[
Wykorzystałem Twój sposób na odczyt do końca linii :<br />[syntax=csharp]receive.Text = serialPort1.ReadLine();[/syntax]<br />Równie dobrze działa to samo w ten sposób:<br />[syntax=csharp]receive.Text = serialPort1.ReadTo(&quot;/n&quot;);[/syntax]<br /><br />Co do przycisku dodałem drugi i przypisałem mu takie zdarzenie jak proponowałeś, ale nadal to samo. Raz uda mi się rozłączyć port, a raz program się zawiesza. Ten sposób z jego zamykaniem przy wyłączaniu aplikacji krzyżykiem jest dobry, bo nigdy mi jej nie zawiesił, ale nie wiem jak ją przenieść na przycisk.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 1 maja 2016, o 20:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-01T20:33:55+01:00</updated>
<published>2016-05-01T20:33:55+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159695#p159695</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159695#p159695"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159695#p159695"><![CDATA[
Więc tak:<br />widzę że zastosowałeś ten mój kod do odbioru danych. Aby zastosować wyczyszczenie wartości poprzez empty musisz dwa razy wywołać delegata. Zrób tak:<br />[syntax=csharp]Action act = () =&gt; receive.Text = string.Empty;<br />                Invoke(act);            //wywołanie delegata<br />                act = () =&gt; receive.Text = serialPort1.ReadExisting();<br />                //wykonanie delegata dla komponentu<br />                Invoke(act);            //wywołanie delegata[/syntax]<br /><br />Jeżeli natomiast wysyłasz dane z AVR gdzie na końcu jest znak nowej linii możesz zastosować ReadLine, czyli taki kod:<br />[syntax=csharp]Action act = () =&gt; richTextBox1.Text = serialPort1.ReadLine();<br />                //wykonanie delegata dla komponentu<br />                Invoke(act);            //wywołanie delegata[/syntax]<br /><br />Kod ten powinien za każdym razem na nowo uzupełniać dane w labelu.<br /><br />A co do rozłączania, spróbuj zrobić drugi przycisk który będzie służył do zamykania programu i umieść w nim kod:<br />[syntax=csharp]//zabezpieczenie przed wystąpieniem wyjątku/problemu z zamknięciem portu<br />            try<br />            {<br />                //zamknięciu portu - odłączenie<br />                serialPort1.Close();<br /><br />            }<br />            catch(Exception ex)<br />            {<br />               MessageBox.Show(ex.Message); //wyświetlenie ewentualnego błędu<br />            }[/syntax]<br /><br />Jeżeli ten program zadziała będziemy zmierzać w stronę dobra;)<br />Najpierw mały krokami robić program, a potem będziemy zajmować się jego optymalizacją;)<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 1 maja 2016, o 20:33</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-01T20:16:18+01:00</updated>
<published>2016-05-01T20:16:18+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159694#p159694</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159694#p159694"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159694#p159694"><![CDATA[
Tu jest program:<br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br />using System.Windows.Forms;<br />using System.IO.Ports;<br />using System.Threading;<br /><br />namespace programAVR<br />{<br />    public partial class Form1 : Form<br />    {<br />        private string txt;<br />        public Form1()<br />        {<br />            InitializeComponent();<br />            serialPort1.BaudRate = 9600;<br />        }<br /><br />      <br /><br />        private void button1_Click(object sender, EventArgs e)<br />        {<br />            if (!serialPort1.IsOpen)<br />            {<br />                serialPort1.PortName = this.comboBox1.SelectedItem.ToString();<br />                serialPort1.Open();<br />                <br />                this.przycisk1.Text = &quot;Rozłącz&quot;;<br />            }<br />            else<br />            {<br />                Thread Close = new Thread(new ThreadStart(CloseSerial)); //close port in new thread to avoid hang<br />                przycisk1.Text = &quot;Połącz&quot;;<br /><br />            }<br /><br /><br />        }<br /><br />        private void CloseSerial()<br /><br />        {<br /><br />            try<br />            {<br />                serialPort1.Close(); //close the serial port<br />            }<br />            catch (Exception ex)<br />            {<br />                MessageBox.Show(ex.Message); //catch any serial port closing error messages<br />            }<br />            this.Invoke(new EventHandler(button1_Click));<br />        }<br /><br />        #region START<br />        private void Form1_Load(object sender, EventArgs e)<br />        {<br />            comboBox1.Items.AddRange(SerialPort.GetPortNames());<br />        }<br />        #endregion<br /><br />        <br /><br />        #region WYŚWIETL ODEBRANE DANE<br />        // wyświetlanie danych w innym wątku<br />        delegate void SetTextCallback(string text);<br />        private void SetText(string text)<br />        {<br />            // łądny opis o wątkach po angielsku, nie chce mi się tłumaczyć<br />            //<br />            // InvokeRequired required compares the thread ID of the<br />            // calling thread to the thread ID of the creating thread.<br />            // If these threads are different, it returns true.<br />            if (this.receive.InvokeRequired)<br />            {<br />                SetTextCallback d = new SetTextCallback(SetText);<br />                this.Invoke(d, new object&#91;&#93; { text });<br />            }<br />            else if (serialPort1.IsOpen)<br />            {<br />                receive.Text = text;<br />               // text = string.Empty;                <br />            }<br />        }<br />        #endregion<br /><br /><br />        private void serialPort1_DataReceived_1(object sender, SerialDataReceivedEventArgs e)<br />        {<br />            //sprawdzenie czy komponent gdzie wypisywane są odebrane jest w tym samym wątku co odbiór danych<br />            if (receive.InvokeRequired)<br />            {<br />                //utworzenie delegata (takiej mikro funkcji) do wpisywania danych w komponencie z bufora odbioru danych<br />                // () =&gt; oznacza lambdę<br />                Action act = () =&gt; receive.Text = string.Empty;<br />                act = () =&gt; receive.Text += serialPort1.ReadExisting();<br />                //wykonanie delegata dla komponentu<br />                Invoke(act);            //wywołanie delegata<br />            }<br />            else<br />            {//jeżeli jest w tym samym wątku przepisz normalnie dane z bufora do komponentu<br />                receive.Text = string.Empty;<br />                receive.Text += serialPort1.ReadExisting();<br />                <br />            }<br />            <br />        }<br /><br /><br />      <br />        private void CloseSerialOnExit()<br /><br />        {<br /><br />            try<br /><br />            {<br /><br />                serialPort1.Close(); //close the serial port<br /><br />            }<br /><br />            catch (Exception ex)<br /><br />            {<br /><br />                MessageBox.Show(ex.Message); //catch any serial port closing error messages<br /><br />            }<br /><br />            this.Invoke(new EventHandler(NowClose)); //now close back in the main thread<br /><br />        }<br /><br />        private void NowClose(object sender, EventArgs e)<br /><br />        {<br /><br />            this.Close(); //now close the form<br /><br />        }<br /><br />        private void Form1_FormClosing(object sender, FormClosingEventArgs e)<br />        {<br />            if (serialPort1.IsOpen)<br />            {<br /><br />                e.Cancel = true; //cancel the fom closing<br /><br />                Thread CloseDown = new Thread(new ThreadStart(CloseSerialOnExit)); //close port in new thread to avoid hang<br /><br />                CloseDown.Start(); //close port in new thread to avoid hang<br />            }<br />        }<br />    }<br />}[/syntax]<br /><br />Tu przed naciśnięciem przycisku:<br /><a href="https://obrazkiforum.atnel.pl/8379/5365855e6eaf5ba154f7a92710202711.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/8379/5365855e6eaf5ba154f7a92710202711.png" alt="Obrazek" /></a><br /><br />Tak po naciśnięciu: chcę aby ta liczba wyswietlała się w miejscu napisu &quot;label&quot;<br /><a href="https://obrazkiforum.atnel.pl/8379/45b5042afdb5b9079f17d0a69f940f46.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/8379/45b5042afdb5b9079f17d0a69f940f46.png" alt="Obrazek" /></a><br /><br />A tak po kolejnym nacisnięciu przycisku. Zmienia się stan na połącz, ale program dalej odbiera dane i wpisuje je po kolei tak jak widać:<br /><a href="https://obrazkiforum.atnel.pl/8379/878b70ce79183dac20094eba6547d6f9.png"  class="postlink"><img src="https://obrazkiforum.atnel.pl/thumb/8379/878b70ce79183dac20094eba6547d6f9.png" alt="Obrazek" /></a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 1 maja 2016, o 20:16</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-01T19:58:32+01:00</updated>
<published>2016-05-01T19:58:32+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159691#p159691</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159691#p159691"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159691#p159691"><![CDATA[
Pokaż jak formatka wygląda, wklej jeszcze raz kod programu, bo może zostało coś z poprzednich prób i to powoduje złe działanie. <br />Pokaż zrzut programu jak jest połączenie i zrzut po naciśnięciu przycisku zamknij port.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 1 maja 2016, o 19:58</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-01T19:54:02+01:00</updated>
<published>2016-05-01T19:54:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159690#p159690</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159690#p159690"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159690#p159690"><![CDATA[
Zrobiłem tak jak mówisz, ale po kliknięciu przycisku wygląda na to, że nie obsługuje mi tego zdarzenia, ponieważ napis zmienia się na &quot;rozłączono&quot;, a odbiór danych nadal następuje. <br />W jaki sposób mogę wyświetlać odebraną informację ciągle w jednym miejscu na labelu, tak aby stara się kasowała i była ona nadpisywana nową ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 1 maja 2016, o 19:54</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-01T19:43:04+01:00</updated>
<published>2016-05-01T19:43:04+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159689#p159689</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159689#p159689"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159689#p159689"><![CDATA[
Ja też jestem początkującym, ale najwięcej człowiek uczy się pomagając innym.<br /><br />Spróbuj do przycisku dać ten fragment kodu:<br />[syntax=csharp]if (serialPort1.IsOpen)<br />{<br /><br />     Thread CloseDown = new Thread(new ThreadStart(CloseSerialOnExit)); //close port in new thread to avoid hang<br /> <br />     CloseDown.Start(); //close port in new thread to avoid hang<br /> <br />}[/syntax]<br /><br />Następnie dodaj tą metodę za przyciskiem:<br />[syntax=csharp]private void CloseSerialOnExit()<br />{<br /><br />     try<br />     {<br /><br />          serialPort1.Close(); //close the serial port<br />     }<br />     catch (Exception ex)<br />     {<br /><br />          MessageBox.Show(ex.Message); //catch any serial port closing error messages<br /><br />     } <br />}[/syntax]<br /><br />Po wykonaniu metody CloseSerialOnExit wątek powinien zakończyć swój żywot.<br /><br />Pamiętaj o dodaniu odpowiedniej przestrzeni nazw.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 1 maja 2016, o 19:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-01T19:17:56+01:00</updated>
<published>2016-05-01T19:17:56+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159687#p159687</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159687#p159687"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159687#p159687"><![CDATA[
Tak jak mówię, pierwszy raz próbuję coś stworzyć w C#. Dziękuję bardzo za pomoc. Co do zamykania portu podczas trwania zdarzenia znalazłem taki kod. Trzeba wywołać zdarzenia zamykania w osobnym wątku. Sprawdza się to doskonale podczas zamykania krzyżykiem programu, ale jak przerobić to na zamykanie też przyciskiem button? Wstawiam tutaj kod:<br />[syntax=csharp]private void Form1_FormClosing(object sender, FormClosingEventArgs e)<br /><br />{<br /><br />if (serialPort1.IsOpen)<br /><br />{<br /><br />e.Cancel = true; //cancel the fom closing<br /><br />Thread CloseDown = new Thread(new ThreadStart(CloseSerialOnExit)); //close port in new thread to avoid hang<br /><br />CloseDown.Start(); //close port in new thread to avoid hang<br /><br />}<br /><br />}<br /><br />private void CloseSerialOnExit()<br /><br />{<br /><br />try<br /><br />{<br /><br />serialPort1.Close(); //close the serial port<br /><br />}<br /><br />catch (Exception ex)<br /><br />{<br /><br />MessageBox.Show(ex.Message); //catch any serial port closing error messages<br /><br />}<br /><br />this.Invoke(new EventHandler(NowClose)); //now close back in the main thread<br /><br />}<br /><br />private void NowClose(object sender, EventArgs e)<br /><br />{<br /><br />this.Close(); //now close the form<br /><br />}[/syntax]<br /><br />A co do sposobu z dodawaniem bufora to nie mogę go zastosować ponieważ dane wyświetlane w labelu pojawiają się tak jakby &quot;w jednym ciągu&quot; i wychodzą poza obszar Formy.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 1 maja 2016, o 19:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-01T18:48:36+01:00</updated>
<published>2016-05-01T18:48:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159686#p159686</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159686#p159686"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159686#p159686"><![CDATA[
Zmień<br />[syntax=csharp]receive.Text = text;[/syntax]<br />na:<br />[syntax=csharp]receive.Text += text;[/syntax]<br /><br />Albo w odbiorze danych spróbuj ten kod:<br /><br />[syntax=csharp]//sprawdzenie czy komponent gdzie wypisywane są odebrane jest w tym samym wątku co odbiór danych<br />            if (receive.InvokeRequired)<br />            {<br />                //utworzenie delegata (takiej mikro funkcji) do wpisywania danych w komponencie z bufora odbioru danych<br />                // () =&gt; oznacza lambdę<br />                Action act = () =&gt; receive.Text += serialPort1.ReadExisting();<br />                //wykonanie delegata dla komponentu<br />                Invoke(act);            //wywołanie delegata<br />            }<br />            else<br />            {//jeżeli jest w tym samym wątku przepisz normalnie dane z bufora do komponentu<br />                receive.Text += serialPort1.ReadExisting();<br />            }[/syntax]<br /><br />Tamten kod co masz mi się troszeczkę nie podoba bo stosuje on rekurencję i może się trochę zapętlić. Jednak jeżeli chcesz to stosować to nie zmuszam - prawo wyboru.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 1 maja 2016, o 18:48</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-01T18:38:23+01:00</updated>
<published>2016-05-01T18:38:23+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159685#p159685</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159685#p159685"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159685#p159685"><![CDATA[
Użyłem tej metody, ale nic nie pomogło. Tak samo z przechwytywaniem błędu. W jaki sposób mogę zamknąć port tylko w momencie kiedy zdarzenie odbioru nie będzie obsługiwane ?<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br />Jeszcze mam w sumie pytanie. Odbieram dane przez rs232, powiedzmy jakąś liczbę np 1122. Teraz pojawia się problem, ponieważ w miejscu labela raz wyświetla poprawną liczbę np 1122, a czasem np 22, albo samą 1. I tak na zmianę:poprawna wartość potem niekompletna. Co może być przyczyną takiego zachowania? Używam ATmega32 z taktowaniem 16MHz i bibliotekę UART Mirka. W terminalu Putty wartość wyświetlana jest poprawnie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 1 maja 2016, o 18:38</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-01T18:25:53+01:00</updated>
<published>2016-05-01T18:25:53+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159680#p159680</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159680#p159680"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159680#p159680"><![CDATA[
Spróbuj użyć metodę DiscardInBuffer().<br /><br />Nigdy jej nie używałem, ale wg msdn usuwa ona dane z bufora odbioru.<br /><br />A dałeś ten fragment kody do try catch. Czasami wystarczy użyć przechwycenia błędu i problem znika.<br /><br />A zawieszać się może, dlatego że obsługiwany jest inny wątek - w tym przypadku odbioru danych.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 1 maja 2016, o 18:25</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-01T17:53:36+01:00</updated>
<published>2016-05-01T17:53:36+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159677#p159677</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159677#p159677"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159677#p159677"><![CDATA[
Zawiesza się w momencie zamykania portu:<br />[syntax=csharp]serialPort1.Close();[/syntax]<br />ale dlaczego to nie mam zielonego pojęcia ;(<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 4 minutach ]</span></strong><br /><br />Jeżeli zmniejszę częstotliwość wysyłanych danych z AVR np co 1s to dziala bez problemu, ale kiedy zwiększam na np co 0,2s to zawiesza się. Być może jest jakieś polecenie, które zamyka port dopiero po odebraniu całej ramki danych ?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 1 maja 2016, o 17:53</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[danielos]]></name></author>
<updated>2016-05-01T17:43:02+01:00</updated>
<published>2016-05-01T17:43:02+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159676#p159676</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159676#p159676"/>
<title type="html"><![CDATA[Re: Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159676#p159676"><![CDATA[
Zamykanie i otwieranie portu daj do formuły<br />[syntax=csharp]try<br />{}<br />catch<br />{}[/syntax]<br /><br />Umożliwi to ewentualne przechwycenie błędu.<br /><br />A daj w komentarz zmiany tekstu które są wykonywane przy zamykaniu. Sprawdź czy w tedy działa.<br />Bo możliwe że metoda empty dla string powoduje te zawieszanie.<br /><br />Próbowałeś z daniem breakpointa w momencie gdy port ma zostać zamknięty? Jak nie to daj tam punkt przerwania, puść program i krokowo sprawdź w którym momencie się program zawiesza.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=898">danielos</a> — 1 maja 2016, o 17:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[drewpol]]></name></author>
<updated>2016-05-01T16:58:50+01:00</updated>
<published>2016-05-01T16:58:50+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159674#p159674</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159674#p159674"/>
<title type="html"><![CDATA[Terminal w C#]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=15271&amp;p=159674#p159674"><![CDATA[
Witam.<br />Tworzę pierwszy program w C#, który ma za zadanie odbierać dane pochodzące z RS232 z AVR i wyświetlać je w labelu. Port wybierany jest przez comboxa i przycisk, który służy do otwierania portu, a gdy jest otwarty to ponowne jego kliknięcie powinno go zamknąć. Jednak po otworzeniu odbierane dane pojawiają się w labelu, ale przy próbie zamknięcia portu, czyli ponownego kliknięcia przycisku program zawiesza się. Nie pojawia się żaden komunikat błędu, po prostu &quot;zamarza&quot;. Wrzucam tutaj prosty kod. Czy któś mógłby mi pomóc gdzie robię błąd w tym programie ? Używam Visual Studio 2015 i .NET 4.5.2.<br />[syntax=csharp]using System;<br />using System.Collections.Generic;<br />using System.ComponentModel;<br />using System.Data;<br />using System.Drawing;<br />using System.Linq;<br />using System.Text;<br />using System.Threading.Tasks;<br />using System.Windows.Forms;<br />using System.IO.Ports;<br /><br />namespace programAVR<br />{<br />    public partial class Form1 : Form<br />    {<br />        private string txt;<br />        public Form1()<br />        {<br />            InitializeComponent();<br />            serialPort1.BaudRate = 9600;<br />        }<br /><br />        private void button1_Click(object sender, EventArgs e)<br />        {<br />            if (!serialPort1.IsOpen)<br />            {<br />                serialPort1.PortName = this.comboBox1.SelectedItem.ToString();<br />                serialPort1.Open();<br />                this.przycisk1.Text = &quot;Rozłącz&quot;;<br />                <br />            }<br />            else<br />            {<br />                serialPort1.Close();<br />                przycisk1.Text = &quot;Połącz&quot;;<br />                receive.Text = string.Empty;<br />            }<br />        }<br /><br />        #region START<br />        private void Form1_Load(object sender, EventArgs e)<br />        {<br />            comboBox1.Items.AddRange(SerialPort.GetPortNames());<br />        }<br />        #endregion<br /><br />        <br /><br />        #region WYŚWIETL ODEBRANE DANE<br />        // wyświetlanie danych w innym wątku<br />        delegate void SetTextCallback(string text);<br />        private void SetText(string text)<br />        {<br />            // łądny opis o wątkach po angielsku, nie chce mi się tłumaczyć<br />            //<br />            // InvokeRequired required compares the thread ID of the<br />            // calling thread to the thread ID of the creating thread.<br />            // If these threads are different, it returns true.<br />            if (this.receive.InvokeRequired)<br />            {<br />                SetTextCallback d = new SetTextCallback(SetText);<br />                this.Invoke(d, new object&#91;&#93; { text });<br />            }<br />            else<br />            {<br />                receive.Text = text;<br />                text = string.Empty;                <br />            }<br />        }<br />        #endregion<br /><br /><br />        private void serialPort1_DataReceived_1(object sender, SerialDataReceivedEventArgs e)<br />        {<br />            txt = serialPort1.ReadExisting().ToString();<br />            SetText(txt.ToString());<br />        }<br /><br />        int tick = 0;<br />        private void timer1_Tick(object sender, EventArgs e)<br />        {<br />            if(tick == 1)<br />            {<br />                <br />                tick = 0;<br />            }<br />            tick++;<br />        }<br />    }<br />}[/syntax]<br /><br />Pozdrawiam,<br />drewpol<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8379">drewpol</a> — 1 maja 2016, o 16:58</p><hr />
]]></content>
</entry>
</feed>