我可以在C#中通过serialPort发送一个int吗?

时间:2011-11-27 23:01:42

标签: c# serial-port arduino

我可以在C#中通过serialPort发送一个int吗?

在C#中开发了一个应用程序,它通过串口为arduino发送数据。这个数据是一个可以成为int的命令!不是字符串! 我怎样才能做到这一点 ?我读了一些字节,但是没有遗忘。

using System;
using System.Windows.Forms;
//
using System.Threading;
using System.IO;
using System.IO.Ports;

pulic class senddata(){

private void Form1_Load(object sender, System.EventArgs e)
{
//Define a Porta Serial
    serialPort1.PortName = textBox2.Text;
    serialPort1.BaudRate = 9600;
    serialPort1.Open();
}
private void button1_Click(object sender, System.EventArgs e)
{
     serialPort1.Write("1");  // "1" is a string, but i put 1 (int) give me a error.       
}

}

arduino代码:

#include <Servo.h>

void setup()
{
    servo.attach(9);
    Serial.begin(9600);
    pinMode(13, OUTPUT);
}

void loop()
{
    if(Serial.available())
    {

      int cmd = (unsigned char)Serial.read();

      if(cmd == 91){
        digitalWrite(13,HIGH);
      }
    }
}

2 个答案:

答案 0 :(得分:4)

要写入值为1的4字节整数,需要先将其转换为字节数组。
我用BitConverter执行此操作。您也可以使用Convert.ToByte执行此操作,如@sll所示。

请注意,指定要发送到串行端口的字节数非常重要。
一个4字节的int? 2个字节?一个字节?
你似乎没有在你的问题中指明这一点。

int MyInt = 1;

byte[] b = BitConverter.GetBytes(MyInt);
serialPort1.Write(b,0,4);

答案 1 :(得分:2)

您可以使用其他重载方法:(MSDN

public void Write(
    byte[] buffer,
    int offset,
    int count
)
// number should be positive value less than 256
int number = 20;
byte[] buffer = new byte[] { Convert.ToByte(number) };
serialPort.Write(buffer, 0, 1);

这将从缓冲区写出单字节