首页 > 解决方案 > 将大型阵列从 Arduino 发送到 PC

问题描述

由于 C# windows 窗体应用程序,我正在尝试从 arduino 发送一个字节数组。问题是没有完整的阵列到达。前 100-200 个字节是正确的,但其他的都是零。多少是正确的完全随机。这是我的 arduino abd C# 代码。

if (commandString.equals("IMPOR")) {
  digitalWrite(led2Pin, HIGH);
  digitalWrite(led3Pin, LOW);
  byte buf[2048];
  for (int i = 0; i < 1024; i++) {
    if (Serial.availableForWrite() > 2) {
      byte lb = SRAM.readByte(2 * i);
      byte hb = SRAM.readByte(2 * i + 1);
      int16_t raw2 = word(hb, lb);
      buf[2 * i] = raw2 & 255;
      buf[2 * i + 1] = (raw2 >> 8)  & 255;
    }
  }
  Serial.write(buf,sizeof(buf));
  digitalWrite(led2Pin, LOW);
  digitalWrite(led3Pin, HIGH);
}

和 c#:

int[] bdata = new int[1024];
private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        int bytes = 2048; // ComPort.BytesToRead;
        byte[] buffer = new byte[bytes]; //Párosak a low bytok. Páratlanok a hugh byteok
        ComPort.Read(buffer, 0, bytes);
        int[] intbuffer = Array.ConvertAll(buffer, x => (int)x);
        //int[] bdata = new int[bytes / 2];
        for(int i = 0; i < 1024; i++)
        {
            bdata[i] = intbuffer[2 * i + 1] * 256 + intbuffer[2 * i];
        }
    }

DatarecievedTreshlod 设置为 2048。这是来自调试的图片: 调试

有谁知道可能是什么问题?SRAM是23LCV512。

标签: c#arduinoserial-port

解决方案


推荐阅读