The first
think, just kept in your mind dnt forget to include the namespace.
using System.IO.Ports;
using System.Data;
using System.Threading;
then next step ,go to your mainwindow.xaml.cs
page
add the corresponding code to the related
controls.
Sample code:
public partial class MainWindow : Window
{
#region variables
//Richtextbox
FlowDocument mcFlowDoc = new FlowDocument();
Paragraph para = new Paragraph();
//Serial
SerialPort serial = new SerialPort();
string recieved_data;
#endregion
public MainWindow()
{
InitializeComponent();
InitializeComponent();
Connect_btn.Content = "Connect";
}
private void Connect_Comms(object sender, RoutedEventArgs e)
{
if (Connect_btn.Content == "Connect")
{
serial.PortName =
Comm_Port_Names.Text;
serial.BaudRate =
Convert.ToInt32(Baud_Rates.Text);
serial.Handshake =
System.IO.Ports.Handshake.None;
serial.Parity = Parity.None;
serial.DataBits = 8;
serial.StopBits = StopBits.Two;
serial.ReadTimeout = 200;
serial.WriteTimeout = 50;
serial.Open();
Connect_btn.Content =
"Disconnect";
serial.DataReceived += new
System.IO.Ports.SerialDataReceivedEventHandler(Recieve);
}
else
{
try // just in case serial port
is not open could also be acheved using if(serial.IsOpen)
{
serial.Close();
Connect_btn.Content =
"Connect";
}
catch
{
}
}
}
#region Recieving
private delegate void UpdateUiTextDelegate(string text);
private void Recieve(object sender,
System.IO.Ports.SerialDataReceivedEventArgs e)
{
// Collecting the characters received to our 'buffer' (string).
recieved_data = serial.ReadExisting();
Dispatcher.Invoke(DispatcherPriority.Send, new
UpdateUiTextDelegate(WriteData), recieved_data);
}
private void WriteData(string text)
{
// Assign the value of the recieved_data to the RichTextBox.
para.Inlines.Add(text);
mcFlowDoc.Blocks.Add(para);
Commdata.Document = mcFlowDoc;
}
#endregion
#region Sending
private void Send_Data(object sender, RoutedEventArgs e)
{
SerialCmdSend(SerialData.Text);
SerialData.Text = "";
}
public void SerialCmdSend(string data)
{
if (serial.IsOpen)
{
try
{
// Send the binary data out
the port
byte[] hexstring =
Encoding.ASCII.GetBytes(data);
//There is a intermitant
problem that I came across
//If I write more than one
byte in succesion without a
//delay the PIC i'm
communicating with will Crash
//I expect this id due to
PC timing issues ad they are
//not directley connected to
the COM port the solution
//Is a ver small 1
millisecound delay between chracters
foreach (byte hexval in
hexstring)
{
byte[] _hexval = new
byte[] { hexval }; // need to convert byte to byte[] to write
serial.Write(_hexval,
0, 1);
Thread.Sleep(1);
}
}
catch (Exception ex)
{
para.Inlines.Add("Failed to SEND" + data + "\n" + ex
+ "\n");
mcFlowDoc.Blocks.Add(para);
Commdata.Document =
mcFlowDoc;
}
}
else
{
}
}
#endregion
#region Form Controls
private void Close_Form(object sender, RoutedEventArgs e)
{
if (serial.IsOpen) serial.Close();
this.Close();
}
private void Max_size(object sender, RoutedEventArgs e)
{
if (this.WindowState != WindowState.Maximized) this.WindowState =
WindowState.Maximized;
else this.WindowState = WindowState.Normal;
}
private void Min_size(object sender, RoutedEventArgs e)
{
if (this.WindowState != WindowState.Minimized) this.WindowState =
WindowState.Minimized;
else this.WindowState = WindowState.Normal;
}
private void Move_Window(object sender, MouseButtonEventArgs e)
{
this.DragMove();
}
#endregion
}
Here you can see some objects of each controls, you simply
just understand what the controls I put here. If you want to change the name of
object means you can do it, it’s ur wish.
Just try it
its 100% working....
No comments:
Post a Comment