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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2014-07-26T19:24:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=23&amp;t=7922&amp;mode</id>
<entry>
<author><name><![CDATA[spajder16]]></name></author>
<updated>2014-07-26T19:24:24+01:00</updated>
<published>2014-07-26T19:24:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=7922&amp;p=89000#p89000</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=7922&amp;p=89000#p89000"/>
<title type="html"><![CDATA[Program Pilot]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=7922&amp;p=89000#p89000"><![CDATA[
Witam, <br />ostatnimi czasy zainteresowałem się tematem programowania w c# i nadszedł ten czas, kiedy pragnę podzielić się z wami swoim pierwszym programem w tym właśnie języku napisanym. Z góry proszę o opinie, porady i wytykanie błędów, które popełniłem. Program pilot to program obsługujący kody przychodzące z atmegi połączonej z odbiornikiem podczerwieni przez port szeregowy. Program z mikrokontrolera jest banalny i nie warty uwagi <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /> <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 /><br />#include &quot;MKUART/mkuart.h&quot;<br />#include &quot;IR_DECODE/ir_decode.h&quot;<br /><br /><br />int main(){<br /><br />USART_Init( __UBRR );<br />ir_init();<br /><br />sei();<br /><br /><br />while(1) {<br /><br />if(Ir_key_press_flag) {<br /><br />if( !address ) {<br /><br /><br />uart_putint(command, 10);<br />uart_puts(&quot;a&quot;);<br /><br />}<br /><br /><br /><br />/* wyzerowanie flagi odbioru oraz wartości odebranych kodów */<br />Ir_key_press_flag=0;<br />command=0xff;<br />address=0xff;<br />}<br /><br />}<br /><br /><br /><br />}[/syntax]<br />W zasadzie to kod jest ściągnięty z któregoś przykładu z bluebooka.<br />Przechodząc w końcu do właściwego programu w c# powstał on w zasadzie z lenistwa <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" />. Jako, że lubię wieczorami do poduszki obejrzeć jakiś film to zdarzają się sytuacje, że chciałbym film ściszyć albo pogłośnić, no ale z łóżka wstawać się nie chce <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />. Z tego powodu powstał &quot;Pilot&quot;. Program umożliwia za pomocą pilota z kodowaniem RC5:<br />- pogłaśniać, ściszać głośność komputera<br />- wyciszać komputer<br />- wyświetlić aktualną półprzezroczystą godzinę <br />- wyłączyć komputer<br />- wyłączyć komputer po określonym czasie np. po 5 min. <br />Kod programu:<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.Windows.Forms;<br />using System.IO;<br />using System.Runtime.InteropServices;<br />using System.Diagnostics;<br />using Microsoft.Win32;<br /><br /><br /><br />namespace WindowsFormsApplication1<br />{<br />    public partial class Form1 : Form<br />    {<br />        Form2 F2 = new Form2();<br />        Form3 F3 = new Form3();<br />        public Form1()<br />        {<br />            InitializeComponent();<br />        }<br /><br /><br />        int licznik;<br />        string rx_str;<br />        public int flag, flag_wyl,flag_stop = 0;<br />        public int zap_hour = 0;<br />        public int zap_min = 0;<br />        public int zapst_hour;<br />        public int zapst_min;<br /><br />        private void Bstart_Click(object sender, EventArgs e)<br />        {<br />            if (serialPort1.IsOpen == false)<br />            {<br /><br />                try<br />                {<br /><br />                    serialPort1.BaudRate = Convert.ToInt16(comboBox2.Text);<br />                    serialPort1.PortName = comboBox1.Text;<br />                    serialPort1.Open();<br />                    notifyIcon1.ShowBalloonTip(1000, &quot;KOMUNIKAT&quot;, &quot;Połączono z portem COM&quot;, ToolTipIcon.Info);<br />                }<br />                catch (UnauthorizedAccessException)<br />                {<br /><br />                    notifyIcon1.ShowBalloonTip(1000, &quot;KOMUNIKAT&quot;, &quot;Nie masz uprawnień na otwarcie portu COM, być może jeden z twoich programów go wykorzystuje&quot;, ToolTipIcon.Error);<br />                    MessageBox.Show(&quot;NIE MA DOSTĘPU DO PORTU COM!&quot;, &quot;UWAGA&quot;, MessageBoxButtons.OK, MessageBoxIcon.Warning);<br /><br /><br /><br />                }<br /><br />                Stan.BackColor = Color.LawnGreen;<br />                <br />                <br />            }<br />        }<br /><br />        private void Bstop_Click(object sender, EventArgs e)<br />        {<br />            if (serialPort1.IsOpen == true)<br />            {<br />                serialPort1.Close();<br />                notifyIcon1.ShowBalloonTip(1000, &quot;KOMUNIKAT&quot;, &quot;Rozłączono z portem COM&quot;, ToolTipIcon.Info);<br />                Stan.BackColor = Color.Red;<br />            }<br />        }<br /><br />        private void Form1_Load(object sender, EventArgs e)<br />        {<br />            this.WindowState = FormWindowState.Minimized;<br />            this.Hide();<br />            this.ShowInTaskbar = false;<br /><br />           // this.WindowState = FormWindowState.Normal;<br />            comboBox2.Items.Add(19200);<br />            comboBox2.Items.Add(9600);<br /><br />            //wpis w rejestrze<br />            RegistryKey mykey = Registry.CurrentUser;<br />            RegistryKey subkey = mykey.OpenSubKey(&quot;Software\\Microsoft\\Windows\\CurrentVersion\\Run&quot;, true);<br />            subkey.SetValue(&quot;Pilot&quot;, Application.ExecutablePath);<br />            subkey.Close();<br />            string&#91;&#93; port = System.IO.Ports.SerialPort.GetPortNames();<br />            foreach (string item in port)<br />            {<br />                comboBox1.Items.Add(item);<br />            }<br />            comboBox1.Text = port&#91;0&#93;;<br /><br />            Bstart_Click(this, e);<br />            <br />        }<br /><br />        private void zamknijToolStripMenuItem_Click(object sender, EventArgs e)<br />        {<br />            this.Close();<br />        }<br /><br />   <br /><br />        private void showToolStripMenuItem_Click(object sender, EventArgs e)<br />        {<br />            this.Show();<br />            this.WindowState = FormWindowState.Normal;<br />            this.ShowInTaskbar = true;<br />        }<br /><br /><br /><br />        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)<br />        {<br />            this.Show();<br />            this.WindowState = FormWindowState.Normal;<br />            this.ShowInTaskbar = true;<br /><br />        }<br /><br />        private void Form1_FormClosing(object sender, FormClosingEventArgs e)<br />        {<br />           // jesli zamykamy forme1 przez X to program jedynie się chowa <br />            if ((e.CloseReason == CloseReason.UserClosing) &amp;&amp; (this.WindowState == FormWindowState.Normal))<br />            {<br /><br />                e.Cancel = true;<br />                this.WindowState = FormWindowState.Minimized;<br />                this.Hide();<br />                this.ShowInTaskbar = false;<br /><br />            }<br />            else<br />            {<br />                if (serialPort1.IsOpen == true)<br />                {<br />                    serialPort1.Close();<br />                    notifyIcon1.ShowBalloonTip(1000, &quot;KOMUNIKAT&quot;, &quot;Rozłączono z portem COM&quot;, ToolTipIcon.Info);<br />                    Stan.BackColor = Color.Red;<br />                }<br />            }<br />            <br />        }<br /><br />        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)<br />        {<br />            licznik++;<br />            if (licznik == 1) //jeśli pierwszy raz uruchomiona aplikacja wyczyść odebrany łańcuch<br />            {<br />                rx_str = serialPort1.ReadTo(&quot;a&quot;);<br />                rx_str = &quot; &quot;;<br /><br /><br />            }<br />            else<br />            {<br />                rx_str = serialPort1.ReadTo(&quot;a&quot;); // przekazanie odebranego łańcucha do zmiennej rx_str<br />                this.Invoke(new EventHandler(rx_parse)); // instalacja zdarzenia parsującego odebrany łańcuch<br />            }<br />        }<br /><br />        private void rx_parse(object sender, EventArgs e)<br />        {<br />            //obsługa klawiszy<br />            string&#91;&#93; dane = new string&#91;2&#93;;<br />            dane = rx_str.Split('a');<br />            if (flag == 0 &amp;&amp; (flag_wyl == 0 || flag_wyl == 2) &amp;&amp; flag_stop == 0)<br />            {<br />                if (dane&#91;0&#93; == &quot;16&quot;)<br />                {<br />                    for (int i = 0; i &lt; 5; i++)<br />                        keybd_event((byte)Keys.VolumeUp, 0, 0, 0);<br /><br />                }<br />                if (dane&#91;0&#93; == &quot;17&quot;)<br />                {<br />                    for (int i = 0; i &lt; 5; i++)<br />                        keybd_event((byte)Keys.VolumeDown, 0, 0, 0);<br /><br />                }<br />                if (dane&#91;0&#93; == &quot;13&quot;)<br />                {<br />                    keybd_event((byte)Keys.VolumeMute, 0, 0, 0);<br />                }<br />                if (dane&#91;0&#93; == &quot;18&quot;)<br />                {<br />                    flag = 1;<br /><br />                    this.WindowState = FormWindowState.Minimized;<br />                    this.Hide();<br />                    this.ShowInTaskbar = false;<br />                    F2.Show();<br />                    F2.BringToFront();<br />                    F2.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;<br />                    <br />                }<br />                if (dane&#91;0&#93; == &quot;8&quot;)<br />                {<br />                    wypiszczas();<br />                    F3.Opacity = 0.5;<br />                    F3.Show();<br />                    //int opacity = 125;<br />                    //Graphics g = F3.CreateGraphics();<br />                    //g.Clear(Color.Lime);<br />                    //g.DrawString(&quot;This is a watermark&quot;, new Font(&quot;Arial&quot;, 50), new SolidBrush(Color.FromArgb(opacity, Color.Red)), 100, 0);<br />           <br />                    <br />                    timer1.Start();<br />                }<br />                if (dane&#91;0&#93; == &quot;60&quot; &amp;&amp; flag_wyl == 0)<br />                {<br />                    flag_wyl = 1;<br />                    F3.label1.Text = &quot; 0:00&quot;;<br />                    F3.Opacity = 0.5;<br />                    F3.Show();<br /><br />                }<br />                if (dane&#91;0&#93; == &quot;60&quot; &amp;&amp; flag_wyl == 2)<br />                {<br />                    tzap_wyl.Stop();<br />                    flag_wyl = 0;<br />                    F3.label1.Text = &quot;STOP&quot;;<br />                    F3.Opacity = 0.5;<br />                    F3.Show();<br />                    timer1.Start();<br />                    flag_stop = 1;<br /><br />                }<br />                if (dane&#91;0&#93; == &quot;41&quot; &amp;&amp; flag_wyl == 2)<br />                {<br />                    DateTime czas = DateTime.Now;<br />                    F3.label1.Text = (zap_hour -(czas.Hour - zapst_hour)).ToString();<br />                    if ((zap_min -(czas.Minute - zapst_min))&lt;10) F3.label1.Text += &quot;:0&quot;+(zap_min -(czas.Minute - zapst_min)).ToString();<br />                    else F3.label1.Text += &quot;:0&quot; + (zap_min - (czas.Minute - zapst_min)).ToString();<br />                        F3.Show();<br />                    timer1.Start();<br /><br /><br />                }<br />                label1.Text = dane&#91;0&#93;;<br />            }<br />            else if (flag == 1)<br />            {<br />               //Czy wyłączyć komputer tak &quot;+&quot; nie &quot;-&quot;<br />                if (dane&#91;0&#93; == &quot;32&quot;)<br />                {<br />                    F2.Hide();<br />                    Process.Start(&quot;shutdown&quot;, &quot;/s /t 0&quot;);<br />                    flag = 0;<br />                    <br />                }<br /><br />                if (dane&#91;0&#93; == &quot;33&quot;)<br />                {<br />                    F2.Hide();<br />                    label1.Text = &quot;Cancel&quot;;<br />                    flag = 0;<br />                   <br />                }<br />            <br />            }<br />            else if (flag_wyl == 1)<br />            {<br />                //obsługa czasu wyłączania komputera<br />                if (dane&#91;0&#93; == &quot;32&quot;)<br />                {<br />                    zap_min++;<br />                    if (zap_min &gt; 59)<br />                    {<br />                        zap_hour++;<br />                        zap_min = 0;<br />                    }<br />                    if (zap_hour &lt; 10) F3.label1.Text = &quot; &quot; + zap_hour.ToString();<br />                    else F3.label1.Text = zap_hour.ToString();<br />                    if (zap_min &lt; 10) F3.label1.Text += &quot;:0&quot; + zap_min.ToString();<br />                    else F3.label1.Text += &quot;:&quot; + zap_min.ToString();<br /><br />                }<br /><br />                if (dane&#91;0&#93; == &quot;33&quot;)<br />                {<br />                    zap_min--;<br />                    if (zap_min &lt; 0)<br />                    {<br /><br />                        if (zap_hour &gt; 0)<br />                        {<br />                            zap_hour--;<br />                            zap_min = 59;<br />                        }<br />                        else zap_min = 0;<br />                       <br />                    }<br />                    if (zap_hour &lt; 10) F3.label1.Text = &quot; &quot; + zap_hour.ToString();<br />                    else F3.label1.Text = zap_hour.ToString();<br />                    if (zap_min &lt; 10) F3.label1.Text += &quot;:0&quot; + zap_min.ToString();<br />                    else F3.label1.Text += &quot;:&quot; + zap_min.ToString();<br /><br />                }<br />                if (dane&#91;0&#93; == &quot;41&quot;)<br />                {<br />                    if (zap_min == 0 &amp;&amp; zap_hour == 0)<br />                    {<br />                        flag_wyl = 0;<br />                        F3.Hide();<br />                    }<br />                    else<br />                    {<br />                        tzap_wyl.Start();<br />                        flag_wyl = 2;<br />                        DateTime czas = DateTime.Now;<br />                        zapst_hour = czas.Hour;<br />                        zapst_min = czas.Minute;<br />                        F3.Hide();<br /><br />                    }<br />                }<br />            }<br /><br /><br />            <br />        }<br />        // import funkcji<br />        &#91;DllImport(&quot;user32.dll&quot;)&#93;<br />        static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);<br /><br />        private void timer1_Tick(object sender, EventArgs e)<br />        {<br />            F3.Hide();<br />            flag_stop = 0;<br />            timer1.Stop();<br />        }<br /><br />        public void wypiszczas()<br />        {<br />            DateTime czas = DateTime.Now;<br />            if (czas.Hour &lt; 10) F3.label1.Text = &quot; &quot; + czas.Hour.ToString();<br />            else F3.label1.Text = czas.Hour.ToString();<br />            if (czas.Minute &lt; 10) F3.label1.Text += &quot;:0&quot; + czas.Minute.ToString();<br />            else F3.label1.Text += &quot;:&quot; + czas.Minute.ToString();<br /><br />        }<br /><br />        private void tzap_wyl_Tick(object sender, EventArgs e)<br />        {<br />            DateTime czas = DateTime.Now;<br />            if (czas.Hour - zapst_hour == zap_hour &amp;&amp; czas.Minute - zapst_min == zap_min)<br />            {<br />                Process.Start(&quot;shutdown&quot;, &quot;/s /t 0&quot;);<br />                <br />                <br />            }<br />            <br />        }<br /><br />        <br /><br />       <br /><br />    }<br />}[/syntax]<br />Jak możecie zobaczyć program automatycznie zapisuje się w rejestrze i przy ponownym uruchomieniu komputera włącza się automatycznie. Program graficznie jest bardzo prosty, ma kilka przycisków i list wyboru. No cóż to chyba już wszystko co mogę o nim powiedzieć, na koniec dodam kilka zdjęć żebyście mogli się z nim lepiej zapoznać. <br /><a href="http://forum.atnel.pl/_obrazki/o/1474/886e3d3e745df4772ad673a8079c19d9.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1474/886e3d3e745df4772ad673a8079c19d9.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1474/8c057bcf9a425083a7518c97e5a973f5.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1474/8c057bcf9a425083a7518c97e5a973f5.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1474/bb6d6054a1466c3cb5b7221169f2bdd1.png"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1474/bb6d6054a1466c3cb5b7221169f2bdd1.png" alt="Obrazek" /></a><br /><a href="http://forum.atnel.pl/_obrazki/o/1474/fdd026dc306b382a9c7fcf6a0bfdf8c3.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/1474/fdd026dc306b382a9c7fcf6a0bfdf8c3.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1474/b5933a4f09d16d166aba6a00420bb25d.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1474/b5933a4f09d16d166aba6a00420bb25d.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1474/6be55182955b1d6acb5530d5412f2204.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1474/6be55182955b1d6acb5530d5412f2204.jpg" alt="Obrazek" /></a><br /><a href="http://forum.atnel.pl/_obrazki/o/1474/2d3983b45f6a8b0c387994646dfa036a.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1474/2d3983b45f6a8b0c387994646dfa036a.jpg" alt="Obrazek" /></a><a href="http://forum.atnel.pl/_obrazki/o/1474/462c4d12f79410ff6b14b523c11ea6ba.jpg"  class="postlink"><img src="http://forum.atnel.pl/_obrazki/o/thumb/1474/462c4d12f79410ff6b14b523c11ea6ba.jpg" alt="Obrazek" /></a><br />Jak już wspomniałem liczę na opinie i porady <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" />.<br />Pozdrawiam <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=1474">spajder16</a> — 26 lip 2014, o 19:24</p><hr />
]]></content>
</entry>
</feed>