代码之家  ›  专栏  ›  技术社区  ›  Zgrkpnr

从Arduino发送Long整数值并从C#应用程序接收它们?

  •  0
  • Zgrkpnr  · 技术社区  · 10 年前

    随着标题的泄露,我正试图发送 Long integer 来自arduino的值,并从我的C#应用程序接收它。

    我的Arduino代码是

    void setup()
    {
      Serial.begin(9600);
    }
    
    long n;
    byte b[4];
    
    void loop()
    {
      n=500;
       for (int i=0; i<10; i++)
       {
         n = n+20;
      IntegerToBytes(n, b);
      for (int i=0; i<4; ++i)
      {
      Serial.write((int)b[i]);
      }
      delay(1000);
       }  
    }
    
    void IntegerToBytes(long val, byte b[4])
    {
      b[3] = (byte )((val >> 24) & 0xff);
      b[2] = (byte )((val >> 16) & 0xff);
      b[1] = (byte )((val >> 8) & 0xff);
      b[0] = (byte )((val) & 0xff);
    }
    

    相关的C#代码是

    private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
            {
                if (mySerial.IsOpen)
                {
                    int bytes = mySerial.BytesToRead;
    
                    byte[] byte_buffer = new byte[4];
                    mySerial.Read(byte_buffer, 0, 4);
                    if (bytes == 4)
                    {
                        SerialConverted_LONGValue = BitConverter.ToInt32(byte_buffer, 0);
                    }
                }
            }
    

    在我调试代码之后,它只将接收到的值写入文本框。我只能看到一个值,如果有机会,它也会改变几次。

    我有什么问题 long to byte[] byte[] to long 转变

    1 回复  |  直到 10 年前
        1
  •  1
  •   cup    10 年前

    BitConverter执行直线映射。它不知道endianes。将赋值顺序从3、2、1、0更改为0、1、2、3。