1 usingSystem;2 usingSystem.Collections.Generic;3 usingSystem.Linq;4 usingSystem.Text;5 usingSystem.Threading.Tasks;6 usingSystem.Windows;7 usingSystem.Windows.Controls;8 usingSystem.Windows.Data;9 usingSystem.Windows.Documents;10 usingSystem.Windows.Input;11 usingSystem.Windows.Media;12 usingSystem.Windows.Media.Imaging;13 usingSystem.Windows.Navigation;14 usingSystem.Windows.Shapes;15 using System.IO.Ports;//supported serial port
16 using System.Security.Cryptography;//supported security crypto
17 usingSystem.Threading;18 usingSystem.Windows.Threading;19
20 namespaceServoApp21 {22 ///
23 ///Interaction logic for MainWindow.xaml24 ///
25 public partial classMainWindow : Window26 {27 System.Timers.Timer myTimer = new System.Timers.Timer(50);28 SerialPort myPort = newSerialPort();29 boolmyPortCurrentStateOpen;30 stringstr_tmp;31 publicMainWindow()32 {33 InitializeComponent();34 //comboxs init
35 myComboxs();36 //receive routine
37 myPort.DataReceived +=DataReceived;38 myTimer.Elapsed += newSystem.Timers.ElapsedEventHandler(timer_Elapsed);39 myTimer.Enabled = true;40 }41 private void DataReceived(objectsender,SerialDataReceivedEventArgs e)42 {43 byte[] inbuf = new byte[4];44 try
45 {46 myPort.Read(inbuf, 0, inbuf.Length);47 string str =System.Text.Encoding.Default.GetString(inbuf);48 this.Dispatcher.Invoke(new Action(() =>
49 {50 myRX.Text =str;51 }));52 }53 catch(Exception ex)54 {55 MessageBox.Show(ex.Message);56 }57 }58 private void timer_Elapsed(objectsender, System.Timers.ElapsedEventArgs e)59 {60 try
61 {62 this.Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() =>
63 {64 if (myPortCurrentStateOpen == true)65 {66 if (mySlider.IsEnabled == false)67 {68 myRX.IsReadOnly = true;69 myRX.IsEnabled = true;70 mySlider.IsEnabled = true;71 }72 if (str_tmp !=tblock.Text)73 {74 str_tmp =tblock.Text;75 myPort.Write(str_tmp);76 }77 }78 else
79 {80 myRX.IsEnabled = false;81 mySlider.IsEnabled = false;82 }83 }));84 }85 catch(Exception ex)86 {87 MessageBox.Show(ex.Message);88 }89 }90 private voidmyComboxs()91 {92 //Set COM items
93 myCOM.Items.Add("COM0");94 myCOM.Items.Add("COM1");95 myCOM.Items.Add("COM2");96 myCOM.Items.Add("COM3");97 myCOM.Items.Add("COM4");98 //default value
99 myCOM.SelectedIndex = myCOM.Items.IndexOf("COM1");100 //Set BRT items
101 myBaudRate.Items.Add("2400");102 myBaudRate.Items.Add("4800");103 myBaudRate.Items.Add("9600");104 myBaudRate.Items.Add("38400");105 myBaudRate.Items.Add("115200");106 //default value
107 myBaudRate.SelectedIndex = myBaudRate.Items.IndexOf("9600");108 myPortCurrentStateOpen = false;109 }110
111 private void open_Clk(objectsender, RoutedEventArgs e)112 {113 try
114 {115 if (myPortCurrentStateOpen == false)116 {117 if(myPort.IsOpen)118 {119 myPort.Close();120 }121 myPort.BaudRate = int.Parse(myBaudRate.Text);122 myPort.DataBits = 8;123 myPort.PortName =myCOM.Text;124 myPort.Open();125 myPortCurrentStateOpen = true;126 myBtn.Content = "Close";127 }128 else
129 {130 myPort.Close();131 myBtn.Content = "Open";132 mySlider.Value = 1500;133 myPortCurrentStateOpen = false;134 }135 }136 catch(Exception ex)137 {138 MessageBox.Show(ex.Message);139 }140 }141 }142 }