bobmarley12345

serialthingbehindcode

Apr 14th, 2019
464
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Windows;
  3. using System.IO.Ports;
  4.  
  5. public partial class MainWindow : Window
  6.     {
  7.         int MaxNumberOfItemsAllowed = 1000;
  8.  
  9.         SerialPort mainport = new SerialPort();
  10.  
  11.         public MainWindow()
  12.         {
  13.             InitializeComponent();
  14.             GetSerialDevices(); //gets the ports and adds them when the program is loaded.
  15.             mainport.DataReceived += Mainport_DataReceived;
  16.         }
  17.  
  18.         private void Mainport_DataReceived(object sender, SerialDataReceivedEventArgs e)
  19.         {
  20.             if (mainport.IsOpen)
  21.             {
  22.                 try
  23.                 {
  24.                     Task.Factory.StartNew(() =>
  25.                     {
  26.                         //ReadLine() i think only returns the port's buffer if there's a '\n' on the very end. if it's in
  27.                         //the middle... i dont think it gives one and ignores it, returning null.
  28.                         //This whole method might fire 2 or 3 times, and only the last time will it actually add a message... i think.
  29.                         WriteReceived($"[RX]> {mainport.ReadLine()}");
  30.                     });
  31.                 }
  32.                 catch(Exception g) { MessageBox.Show(g.Message, "Error receiving data on serial port"); }
  33.             }
  34.         }
  35.  
  36.         //this method will get all the serial devices on the computer (your computer, probably...)
  37.         private void GetSerialDevices()
  38.         {
  39.             foreach(string deviceport in SerialPort.GetPortNames())
  40.             {
  41.                 serialports.Items.Add(deviceport);
  42.             }
  43.         }
  44.  
  45.         private void WriteReceived(string text)
  46.         {
  47.             //this makes writing to the received listbox easier and will clear if it has too many items
  48.             //to decrease lag.
  49.             Dispatcher.BeginInvoke(new Action(() =>
  50.             {
  51.                 received.Items.Add(text);
  52.                 if (received.Items.Count >= MaxNumberOfItemsAllowed)
  53.                 {
  54.                     received.Items.Clear();
  55.                 }
  56.             }));
  57.         }
  58.  
  59.         private void WriteSent(string text)
  60.         {
  61.             //this makes writing to the received listbox easier and will clear if it has too many items
  62.             //to decrease lag.
  63.             Dispatcher.BeginInvoke(new Action(() =>
  64.             {
  65.                 sent.Items.Add(text);
  66.                 if (sent.Items.Count >= MaxNumberOfItemsAllowed)
  67.                 {
  68.                     sent.Items.Clear();
  69.                 }
  70.             }));
  71.         }
  72.  
  73.         private void Connectbutton_Click(object sender, RoutedEventArgs e)
  74.         {
  75.             if (!mainport.IsOpen)
  76.             {
  77.                 try
  78.                 {
  79.                     mainport.BaudRate = 115200;
  80.                     mainport.DataBits = 8;
  81.                     mainport.Handshake = Handshake.None; //dont need to define this, but whatever :)
  82.                     mainport.Parity = Parity.None;
  83.                     mainport.StopBits = StopBits.One;
  84.                 }
  85.                 catch (Exception ggg)
  86.                 {
  87.                     MessageBox.Show(ggg.Message, "Error defining variables for serial port");
  88.                     return;
  89.                 }
  90.                 try
  91.                 {
  92.                     if (serialports.SelectedItem != null)
  93.                     {
  94.                         mainport.PortName = serialports.SelectedItem.ToString();
  95.                     }
  96.                 }
  97.                 catch (Exception ggg)
  98.                 {
  99.                     MessageBox.Show(ggg.Message, "Error defining the portname for serial port");
  100.                     return;
  101.                 }
  102.                 ///quite alot of try/catches but whatever ;)
  103.                 try
  104.                 {
  105.                     if (!mainport.IsOpen) //double precaution ;)
  106.                     {
  107.                         try
  108.                         {
  109.                             mainport.Open();
  110.                             connectbutton.Content = "Disconnect";
  111.                         }
  112.                         catch (Exception dfjfd)
  113.                         {
  114.                             MessageBox.Show(dfjfd.Message); return;
  115.                         }
  116.                     }
  117.                     else
  118.                     {
  119.                         try
  120.                         {
  121.                             mainport.Close();
  122.                             connectbutton.Content = "Connect";
  123.                         }
  124.                         catch (Exception dfjfd)
  125.                         {
  126.                             MessageBox.Show(dfjfd.Message);
  127.                         }
  128.                     }
  129.                 }
  130.                 catch (Exception gg)
  131.                 {
  132.                     MessageBox.Show(gg.Message);
  133.                 }
  134.             }
  135.             else
  136.             {
  137.                 try
  138.                 {
  139.                     mainport.Close();
  140.                     connectbutton.Content = "Connect";
  141.                 }
  142.                 catch (Exception dfjfd)
  143.                 {
  144.                     MessageBox.Show(dfjfd.Message);
  145.                 }
  146.             }
  147.         }
  148.  
  149.         private void Sendmessage_Click(object sender, RoutedEventArgs e)
  150.         {
  151.             if (mainport.IsOpen)
  152.             {
  153.                 if (!string.IsNullOrEmpty(sendtextbox.Text))
  154.                 {
  155.                     try
  156.                     {
  157.                         string towrite = sendtextbox.Text;
  158.                         mainport.Write(towrite);
  159.                         WriteSent($"[TX]> {towrite}");
  160.                     }
  161.                     catch(Exception gg) { MessageBox.Show(gg.Message); }
  162.                 }
  163.             }
  164.         }
  165.     }
RAW Paste Data