我可以在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);
}
}
}
答案 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);
这将从缓冲区写出单字节