Auduino与Processing互动之电位计与螺旋线
0赞
发表于 12/21/2011 11:23:08 AM
阅读(17771)
这个Auduino与Processing互动作品说明:Arduino控制器相连的电位计手把向一个方向拧动,Processing花布上的螺旋线不断放大,电位计手把向反方向拧动,螺旋线不断缩小。
看优酷视频:
点击视频地址,看全屏效果。
http://player.youku.com/player.php/sid/XMzM0NDUxODE2/v.swf
直接看Arduino与Processing两边的程序吧,我用蓝色字体标注了两者串口通讯的程序段。
Arduino程序:
int sensorPin =0;//声明传感器连在端口0
int data;//定义向Processing发送数据的变量
void setup()
{
Serial.begin(9600);//RS232串口通讯波特率为9600
}
void loop()
{
//由于类比型传感器产生数字量范围为0~1023
//而串行通讯以字节单位发送,字节数字范围为0~255
//把类比型传感器产生数字量除以4赋值给data
data= analogRead(sensorPin)/4;
Serial.print(data,BYTE);//定义向Processing发送数据
delay(100);//延时100ms
}
Processing程序:
/*Arduino控制器相连的电位计手把向一个方向拧动
Processing花布上的螺旋线不断放大,
电位计手把向反方向拧动,螺旋线不断缩小。*/
import processing.serial.*;//导入serial通信库
Serial duankou;//创建对象duankou
float data;//变量存储Arduino传来数据
float a;//螺旋线半径增量
void setup()
{
//设定通讯端口为COM3,波特率为9600
duankou = new Serial(this,"COM3",9600);
size(600,600);//定义花布大小
noStroke();
smooth();
fill(0,255,0);//定义螺旋线的填充色为绿色
}
void draw()
{
background(0);
//当processing接受到Arduino传来的字节
if(duankou.available()>0)
{
//把Arduino传来的字节存入变量data
data=duankou.read();
//把Arduino传来的字节显示在控制台中
println(data);
//把电位计的类比值大小,正比转换成螺旋线半径增量大小
a=map(data,0,255,0.04,0.2);
}
float radius = 1.0;//螺旋线初始点半径
//螺旋线转动角度范围0到360*8
//螺旋线每转动2度,半径就增加一个增量
//通过for结构,产生螺旋线效果
for (int deg = 0; deg < 360*8; deg += 2) {
float angle = radians(deg);
float x = 300 + (cos(angle) * radius);
float y = 300 + (sin(angle) * radius);
//螺旋线上每个点都是一个绿色实心圆
ellipse(x, y, 6, 6);
//螺旋半径每转动2度增加一次
radius = radius + a;
}
}