我要做的是以ASCII值发送1
,我的mk等待该字符。
但是当我按下按钮时没有任何反应。但是当我发送一个字节来切换PORT时,一切正常。所以我想知道如何发送ASCII 1
值。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) // Here i send a byte to MK
{
// serialPort1.RtsEnable = true; serialPort1.DtrEnable = true;
// var content = new List<byte>();
// content.AddRange(Encoding.ASCII.GetBytes("1"));
// content.Add(3); // ASCII ETX
//byte[] buffer = content.ToArray();
// serialPort1.Write(buffer, 0, buffer.Length);
serialPort1.Write("1");
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e) // choosing a right com port
{
serialPort1.PortName = textBox1.Text;
serialPort1.BaudRate = Convert.ToInt32(textBox2.Text);
}
string rs;
byte re;
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e) // Da
{
try
{
//rs = serialPort1.ReadByte();
//re = Convert.ToByte(serialPort1.ReadByte());
rs = serialPort1.ReadExisting();
// System.Text.Encoding.ASCII.GetString(new[] { re });
this.Invoke(new EventHandler(type));
}
catch (System.TimeoutException) { }
}
void type(object s,EventArgs e) // receive data
{
textBox4.Text += rs;
}
private void button3_Click(object sender, EventArgs e) // OPen port
{
serialPort1.Open();
}
private void button4_Click(object sender, EventArgs e) // Close port
{
serialPort1.Close();
}
}
答案 0 :(得分:0)
您可以通过这种方式将字符串写入串行端口:字符串必须仅包含0x00到0x7F范围内的ASCII字符,因为默认使用ASCII编码(您可以通过设置SerialPort.Encoding属性来更改编码) )。
正如其他人在评论中所说,您需要附加ETX字符以匹配注释掉的代码,您可以按照以下方式执行此操作:
serialPort1.Write("1\x03");
或者,更一般地说,如果要构建包含控制字符的字符串,可以执行以下操作:
const char STX = '\x02';
const char ETX = '\x03';
... etc, other control characters you want to use
...
var s = String.Format("1{0}", ETX);
serialPort1.Write(s);