Difference between revisions of "C sharp сериен порт"

From Ilianko
Line 7: Line 7:
  
 
==Стартиране на програмата==
 
==Стартиране на програмата==
Първо записваме, а след това стартираме с [[startForm|'''F5''' или бутона '''play''']]. Така ще се премине в дебъг режим. За да се редактира отново приложенито, първо трябва да се затвори прозореца на приложенито в дебъг режим.
+
Първо записваме проекта с ново име (File -> Save WindowsFormApplication1 As ..), а след това стартираме с [[startForm|'''F5''' или бутона '''play''']]. Така ще се премине в дебъг режим. За да се редактира отново приложенито, първо трябва да се затвори прозореца на приложенито в дебъг режим.
  
 
==Добавяне на бутон и настройки(properties)==
 
==Добавяне на бутон и настройки(properties)==

Revision as of 07:18, 3 February 2014

Стартиране на Microsoft Visual C# Express

Start -> Microsoft Visual C# Express

Създаване на Windows форма

От главното меню изберете File->New Project->Windows Forms Application.

Стартиране на програмата

Първо записваме проекта с ново име (File -> Save WindowsFormApplication1 As ..), а след това стартираме с F5 или бутона play. Така ще се премине в дебъг режим. За да се редактира отново приложенито, първо трябва да се затвори прозореца на приложенито в дебъг режим.

Добавяне на бутон и настройки(properties)

От прозореца с инструменти (ToolBox - в дясно горе), в частта средства за управление (Common Controls) изберете Button и кликнете върху модела на формата.

Кликнете с десен бутон на мишката върху появилия се бутон, изберете properties и сменете текста на бутона от button1 на Connect.

Добавяне на многоредово текстово поле

От прозореца с инструменти (ToolBox - в дясно горе), в частта средства за управление (Common Controls) изберете TextBox и кликнете върху модела на формата и разположете текстовото поле. От настройки (properties) променете опцията Multiline от false на true.

Добавяне на програмен код

Кликнете два пъти върху формата, за да се отвори прозореца с програмния код.

Деклариране на използваните класове

Към автоматично генерираните клсова

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

добавете класовете за управление на серийния порт

using System.IO;
using System.IO.Ports;

Създаване на инстанция на серийния порт

В класа Form1 добавете:

private SerialPort comport = new SerialPort();

Може да изглежда така:

public partial class Form1 : Form
   {
       private SerialPort comport = new SerialPort();

       public Form1()
       {

Събитие при натискане на бутона

Върнете се в прозореца за проектиране и кликнете два пъти върху бутона connect. Това автоматично ще създададе метод, който ще се изпълнява при натискане на бутона. За отваряне на серийния порт и изпращане на начално съобщение може, трябва да се добави следния код:

    private void button1_Click(object sender, EventArgs e)
        {
            if (!comport.IsOpen)
            {
                comport.Open();
                if (comport.IsOpen)
                {
                    comport.Write("\n\rHello Serial Port!\n\r");
                    button1.Text = "Disconnect";
                }
            }
            else
            {
                comport.Close();
                if (!comport.IsOpen)
                {
                    button1.Text = "Connect";
                }
            }
        }
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox1.Invoke(new EventHandler(delegate
            {

                if (comport.IsOpen)
                {
                    string t = textBox1.Text;
                    char b = (char)t[t.Length - 1];


                    comport.Write(b.ToString());
                    if (b == '\n')
                        comport.Write("\r".ToString());
                }
            }
        ));
        }


 public Form1()
        {
            InitializeComponent();
            comport.RtsEnable = true;
            comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);

            
        }

        private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            // If the com port has been closed, do nothing
            if (!comport.IsOpen) return;

            string data = comport.ReadExisting();

            textBox1.Invoke(new EventHandler(delegate
            {
                textBox1.AppendText(data);
            }
           ));

        }