Processing 如何从arduino处理图形

Processing 如何从arduino处理图形,processing,Processing,我正在尝试做一件非常简单的事情,就是将连接到arduino上的光电管的值输出到处理图上。我已经成功地将值以浮点形式输出到处理控制台,并弹出一个草图窗口,但没有图形-我确信这很简单,但我不知道是什么。我感觉这与我正在绘制的比例有关(println给我的值介于0.2和1.1之间)但我认为我在图形的缩放中迷失了方向,因此没有输出。这是我的处理代码: import processing.serial.*; 串行myPort;//串口 int xPos=1;//图形的水平位置 //变量来绘制一条连续线。

我正在尝试做一件非常简单的事情,就是将连接到arduino上的光电管的值输出到处理图上。我已经成功地将值以浮点形式输出到处理控制台,并弹出一个草图窗口,但没有图形-我确信这很简单,但我不知道是什么。我感觉这与我正在绘制的比例有关(println给我的值介于0.2和1.1之间)但我认为我在图形的缩放中迷失了方向,因此没有输出。这是我的处理代码:

import processing.serial.*;
串行myPort;//串口
int xPos=1;//图形的水平位置
//变量来绘制一条连续线。
int lastxPos=1;
int lastheight=0;
无效设置(){
//设置窗口大小:
大小(600400);
//列出所有可用的串行端口
//检查机器中列出的串行端口
//并在Serial.list()中使用正确的索引号。
myPort=new Serial(这是“/dev/tty.usbmodem1421”,9600)//
//当接收到换行符时,将生成serialEvent():
myPort.bufferUntil('\n');
背景(0);//设置初始背景:
}
无效提款(){
//serialEvent()中发生的一切
}
void serialEvent(串行端口){
//获取ASCII字符串:
String inString=myPort.readStringUntil('\n');
inString=trim(inString);//修剪空白。
//println(inString);
如果(指令!=null){
float inByte=float(inString);//转换为数字。
inByte=映射(inByte,0,1023,0,高度);//映射到屏幕高度。
println(以字节为单位);
//从最后一个inByte到新的inByte绘制一条线。
笔划(127,34255);//笔划颜色
冲程重量(4);//冲程更宽
行(lastxPos,lastheight,xPos,height-inByte);
lastxPos=xPos;
lastheight=int(高度以字节为单位);
//在窗口边缘,返回到开头:
如果(xPos>=宽度){
xPos=0;
lastxPos=0;
背景(0);//清除屏幕。
} 
否则{
//增加水平位置:
xPos++;
}
}
}

虽然我没有arduino输入,但通过移除这些部件,我能够画出一条紫色的线。然而,它只是在窗口的底部绘制,因为我使用了一个静态的
“0.5”
字符串值进行inString,以保持与输入值相同的数量级。转换为浮点值时,只需乘以该值,即:

float inByte=浮点(inString)*500,

把队伍拉近一点。您可以尝试将浮点输入乘以
高度
,甚至可能是
1023
,它应该保持在限制范围内。在我使用的0.5值上乘以
height
,仍然会使线更靠近底部而不是中间(即
height/2

下面是我用来在画布上画一条紫色线的完整代码。如您所见,我只是将所有内容移动到
draw()
,并删除了串行输入部分:

int xPos=1;//图形的水平位置
//变量来绘制一条连续线。
int lastxPos=1;
int lastheight=0;
无效设置(){
//设置窗口大小:
大小(600400);
//列出所有可用的串行端口
//检查机器中列出的串行端口
//并在Serial.list()中使用正确的索引号。
背景(0);//设置初始背景:
}
无效提款(){
//获取ASCII字符串:
字符串inString=“0.5”;
inString=trim(inString);//修剪空白。
//println(inString);
如果(指令!=null){
float inByte=float(inString)*1023;//转换为数字。
inByte=映射(inByte,0,1023,0,高度);//映射到屏幕高度。
println(以字节为单位);
//从最后一个inByte到新的inByte绘制一条线。
笔划(127,34255);//笔划颜色
冲程重量(4);//冲程更宽
行(lastxPos,lastheight,xPos,height-inByte);
lastxPos=xPos;
lastheight=int(高度以字节为单位);
//在窗口边缘,返回到开头:
如果(xPos>=宽度){
xPos=0;
lastxPos=0;
背景(0);//清除屏幕。
} 
否则{
//增加水平位置:
xPos++;
}
}
}