【问题标题】:Can I send a int by serialPort in C#?我可以在 C# 中通过 serialPort 发送一个 int 吗?
【发布时间】:2011-11-27 23:01:41
【问题描述】:

我可以在 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);
      }
    }
}

【问题讨论】:

    标签: c# serial-port arduino


    【解决方案1】:

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

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

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

    【讨论】:

    • 这将写入一个 32 位整数,但代码需要一个 8 位整数(C 中的字符)。
    • @FredVaz:你应该开始接受你的问题的答案。请检查您最喜欢的答案旁边的“复选标记”。
    • @Guffa:正如我所提到的,我没有在问题中看到任何指定他想要一个字节还是一个 4 字节整数。但改变是微不足道的。
    • @abelenky:如果它实际上是一个多字节值,那么你还需要知道它是little-endian还是big-endian格式。
    • 8位整数=一个字节??那么为什么不直接创建一个单字节数组并写入呢???
    【解决方案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);
    

    这将从缓冲区中写出单个字节

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 2012-11-02
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多