-1
私がしようとしているのはASCII値で1
を送信することです。私のmkはそのcharを待っています。 ボタンを押しても何も起こりません。しかし、PORTを切り替えるためにバイトを送信すると、すべてが動作します。だから私はどのようにASCIIで、1
値を送信するのだろうか。C#、マイクロコントローラでASCIIデータを送信
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();
}
}
コメントしたコードが正しい場合は、ETX charで送信を終了する必要があります。 – Gusman
ASCII '1'は '0x31'ですので、' serialPort1.Write(0x31); 'を実行するだけで、@Gusmanはあなたに" "タイプのコマンドを送る必要があるかもしれないと言っていますが、' serialPort1.Write (0x03); 'デフォルトのウィンドウ文字列エンコーディングは' CP1252'ですので、文字列入力として '' 1 "'を送ると '0x31'の代わりに' 0x0031'が送られると思います。 –
@ m.rogalski - SerialPortのデフォルトのエンコーディングはASCIIです。 ASCIIとCP1252の両方が "1"を0x31としてエンコードします。彼の問題はおそらく彼がETXのキャラクターを送っていないことでしょう。 – Joe