快速串口从处理写入Arduino

我需要一些帮助来加速写入串口。 我发现了一些类似的问题,但没有涉及处理语言或Java,所以我希望有人可以帮我解决这个问题。

编辑

正如John在下面指出的那样,看起来串行的速度还不够快,无法以我想要的速度发送这么多数据。 有谁知道其他可用的arduino接口?

结束编辑

我正在使用arduino来控制我连接的400个RGB LED的网格。 为了向arduino发送命令,我在Processing中编写了一个小程序来操作代表LED的大型数组。 然后我尝试通过串行发送800字节的数据,每隔20分钟以115200波特率向arduino发送更新网格。 每20ms调用的处理代码是:

noStroke(); int dataPos = 0; // position in LED data array byte[] dataLedGrid = new byte[400*2]; // array for bytes to send for(int j=0; j<LEDS_TALL; j++) { for(int i=0; i<LEDS_WIDE; i++) { int pos = j*20+i; int r = ledGrid[LEDS_WIDE-i-1][LEDS_TALL-j-1][0], g = ledGrid[LEDS_WIDE-i-1][LEDS_TALL-j-1][1] ,b = ledGrid[LEDS_WIDE-i-1][LEDS_TALL-j-1][2]; int colorData = ((g & 0x1F) << 10) | ((b & 0x1F) << 5) | (r & 0x1F); dataLedGrid[dataPos] = byte(colorData & 0x00FF); dataLedGrid[dataPos+1] = byte(colorData & 0xFF00); dataPos+=2; // draw LED squares on gui fill(ledGrid[i][j][0], ledGrid[i][j][1], ledGrid[i][j][2]); rect(SIDE_PANEL_WIDTH+(LED_SQUARE_SIDE+LED_SQUARE_SPACING)*i+HORIZONTAL_MARGIN, (LED_SQUARE_SIDE+LED_SQUARE_SPACING)*j+VERTICAL_MARGIN, LED_SQUARE_SIDE, LED_SQUARE_SIDE); } } myPort.write(dataLedGrid); // write to serial 

在arduino上我有一个数组(显示)代表arduino一侧的网格。 循环代码是:

 void loop() { unsigned int pos, c1, c2; if (Serial.available() > 0) { for(byte j=0; j<20; ++j) { for(byte i=0; i<20; ++i) { c1 = Serial.read(); c2 = Serial.read(); pos = i+20*j; if(j % 2 != 0) // it's a square of leds created by a zigzaging line pos = 20*(j+1)-i-1; // so I have to reverse every other line Display[pos] = (unsigned int)(c1<<8 | c2); } } show(); } } 

现在代码本身工作正常但是当串行写入减慢一切时。 当我在没有串行写入的情况下运行Processing代码时,一切都很好,以预期的速度运行。 但是,当我添加连续写入时,一切都变得有些不稳定。 CPU没有最大化或任何其他所以我假设它是我调用的serial.write方法。 我该怎么做才能加速这段代码或消除串行写入的延迟?

谢谢你的帮助!

算一算。

115200波特是8-N-1,每秒11,520字节,或86.8 usec /字节。

在20毫秒内,您可以发送230.4字节。 发送800个字节大约需要70毫秒。

尝试每20毫秒以115200波特率发送800个字节是行不通的。

尝试将Serial.setTimeout(0)添加到arduino sketch的setup()