hello, I've designed a simple interface in C# to communicate with my FPGA (send data and receive a value), the problem is my FPGA algorithm output (ex: 3) is shown in some strange symbol (which crossbones to 0x03 in ASCII ), so it there any way to show it as 3 in textbox? thx
please ignore the commented lines since I'm a beginner and was trying all sort of things, thx.
Code:
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; namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } string RXstring = ""; private void pictureBox2_Click(object sender, EventArgs e) { serialPort1.Close(); Form1 myForm = new Form1(); this.Close(); } private void groupBox1_Enter(object sender, EventArgs e) { } private void button3_Click(object sender, EventArgs e) { try { if (!serialPort1.IsOpen) { serialPort1.Open(); button3.Enabled = false; } else { MessageBox.Show("Port is Open by other party!"); } } catch (UnauthorizedAccessException ex) { MessageBox.Show(ex.Message); } } private void Form2_FormClosed(object sender, FormClosedEventArgs e) { serialPort1.Close(); } private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e) { try { RXstring = serialPort1.ReadExisting(); this.Invoke(new EventHandler(displaytext)); } catch (System.TimeoutException) { } } private void displaytext(object s, EventArgs e) { //var a = RXstring[0]; //var b = RXstring[1]; //string h = String.Format("{0:X2}", RXstring); textBox4.AppendText(RXstring); } void button1_Click(object sender, EventArgs e) { //Get the strings (text) string textM = textBox1.Text; string textE = textBox2.Text; string textG = textBox3.Text; //Assuming you want unsigned numbers, convert to numeric types //You might want to put in exception handling for invalid inputs, watch for overflows etc. UInt16 bitsX = Convert.ToUInt16(0x1F01); UInt16 bitsM = Convert.ToUInt16(textM); UInt16 bitsE = Convert.ToUInt16(textE); UInt16 bitsG = Convert.ToUInt16(textG); /* * BitConverter puts the LSB at index 0, so depending on how you need to send the data, * you might want to reverse the bytes BitConverter.GetBytes(bitsM).Reverse(); * or reverse the order you add them to the list */ var byteList = new List<byte>(); byteList.AddRange(BitConverter.GetBytes(bitsX)); byteList.AddRange(BitConverter.GetBytes(bitsM)); byteList.AddRange(BitConverter.GetBytes(bitsE)); byteList.AddRange(BitConverter.GetBytes(bitsG)); //Debugging message, uses LINQ string bits = String.Join(" ",byteList.Select(b => b.ToString("X2"))); MessageBox.Show(bits); //write the bytes var bitArray = byteList.ToArray(); serialPort1.Write(bitArray, 0, 8); //var x = bitArray[1] + (bitArray[2] << 0) + (bitArray[3] << 0) + (bitArray[4] << 0) + (bitArray[5] << 0) + (bitArray[6] << 0) + (bitArray[7] << 0); //string y = String.Format("{0:X2}", x); //string y = System.Text.Encoding.UTF8.GetString(bitArray); //textBox5.AppendText(y); } private void button2_Click(object sender, EventArgs e) { textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = ""; } //private void textBox5_TextChanged(object sender, EventArgs e) //{ // var value = Convert.ToDecimal(textBox4); // string ss = value.ToString(); // textBox5.AppendText(ss); // MessageBox.Show(ss.ToString()); //} } }