通过Serialport从C#发送数字到Java

时间:2015-05-21 11:35:47

标签: java c# serial-port arduino

我正在使用Arduino制作蓝牙四轴飞行器。我没有问题发信,但我似乎无法写或读数字。

我不太擅长编程所以请耐心等待。

C#代码:

    private void button1_Click(object sender, EventArgs e)
        {
            int testInt = 35;
            byte[] testByte = BitConverter.GetBytes(testInt);
            serialPort1.Write(testByte, 0, 0);

            int i = BitConverter.ToInt32(testByte,0);
            label5.Text = i.ToString();
        }

这里我试图转换为发送一个字节,起初我只是直接将其作为字符串发送。我从两个方面得到了相同的结果。

Arduino代码:

 <code>void loop() 
{
  // put your main code here, to run repeatedly:
  if(Serial.available())
  {
    int data = Serial.read();
    if(data=='35')
     {
        digitalWrite(13, HIGH);
     }
  }
}

为什么LED不亮?如何从串口读取数字?

1 个答案:

答案 0 :(得分:0)

这会发送一个字节(0到255):

private void button1_Click(object sender, EventArgs e) {
    // set up to send only one byte
    byte[] testByte = {35};
    // send one byte
    serialPort1.Write(testByte, 0, 1);
}

这会在Arduino上接收并解释它:

void loop() {
    if (Serial.available()) {
        byte data = Serial.read();
        if (data == 35) {
            digitalWrite(13, HIGH);
        }
    }
}

如果您认为可能发送大于255的数字,则发送字符串可能同样容易。在字符串末尾添加一个新行字符:

String testString = "35\n";

并使用新行让Arduino知道你已完成发送代码,如下所示:

#define MAX_SIZE 5;
char button[MAX_SIZE+1];

if (Serial.available()) {
    int bytesRead = Serial.readBytesUntil ('\n', button, MAX_SIZE);
    if (bytesRead > 0) {
        button[bytesRead] = '\0';
        int result = atoi(button);
        if (result == 35) {
            digitalWrite(13, HIGH);
        } else {
            digitalWrite(13, LOW);
        }
    }
}