通过处理从串行发送长数组到arduino

时间:2014-03-09 22:25:15

标签: arrays matrix arduino processing led

所以我建立一个24x16(16的长度,24的长度)LED矩阵,并使用Arduino Uno来控制它。它只是一个颜色矩阵,我使用一个数组来存储所有数据位。

这是我如何在arduino上存储数据的一个例子:

long frame [16] = {11184810, 5592405, 11184810, 5592405, 11184810, 5592405, 11184810, 5592405, 11184810, 5592405, 11184810, 5592405, 11184810, 5592405, 11184810, 5592405};

我存储这些数据的方式是按行。例如:长帧[16] = {行1位,行2位,......等等}

如果您将11184810转换为二进制文件;你会得到10101010101010101010101010,代表一排LED的数据。

我在使用arduino时遇到的一个限制是存储这些数组的空间有限,所以我想找到一种通过串口发送它的方法。

我想问一下,我是否可以获得一些帮助,为Processing和arduino编写一些代码,以便我可以将这个数组数据从Processing发送到arduino live over serial上的数组。我从来没有使用过Processing而且不知道如何使用它,但是读取这是将数据发送到arduino并且还有一个GUI来输入数据的好方法。

1 个答案:

答案 0 :(得分:4)

我能想到的最简单的方法是使用逗号分隔的值发送数组。

GUI

首先,根据我的个人经验,在Processing中为用户输入制作GUI很困难,因为你没有预定义的类(据我所知)来制作文本字段,复选框等等,所以您必须绘制矩形并编程鼠标和键事件以更改字段之间的焦点。但是,您可以创建JFrame和文本字段以及所有内容,并且仍然使用Processing的串行通信,最终会得到一个运行草图的窗口和一个带GUI的外部窗口。以下是how to create frames and other elements的一些信息。请记住,Processing实际上是在Java上运行的(抱歉,如果这不是正确的术语)。

但如果你打算这样做,你也可以转而使用" pure" Java

通过串行

发送数据

处理

首先你需要用你的GUI构建数组,我有两个想法,16个字段,每行一个,你写一个数字,然后把它转换成二进制,或者,制作一组复选框,24x16,每个代表一个LED,因此勾选要打开的LED。

要将Processing / Java中的数据发送到Arduino,这里有一个示例代码:

for(int i = 0; i < 16; i++){
  if(i > 0){
    str += ",";//We add a comma before each value, except the first value
  }
  str += frame[i];//We concatenate each number in the string.
  }
  serial.write(str);
}

frame[]是您要发送给Arduino的数据。

您必须导入特殊库才能使用串行通信。并创建一个类对象(不确定我是否使用正确的术语)。

import processing.serial.*
void setup(){
    /* Some setup code here */

    /* Opening first port, 9600 baud rate */
    Serial serial = new Serial(this,Serial.list()[0],9600)
}

Arduino的

然后,在Arduinoloop()内,您可以使用以下内容:

String content = "";
if (Serial.available()) {
  while (Serial.available()) {
    content += Serial.read();
  }
}
long data[16]; //The results will be stored here
for(int i = 0; i < 16; i++){
  int index = content.indexOf(","); //We find the next comma
  data[i] = atol(content.substring(0,index).c_str()); //Extract the number
  content = content.substring(index+1); //Remove the number from the string
}

现在data[]包含您从Processing发送的数据。