[教程] arduino和processing通讯详解之一(基本通讯)-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8857|回复: 0

[教程] arduino和processing通讯详解之一(基本通讯)

[复制链接]
发表于 2013-7-18 11:31 | 显示全部楼层 |阅读模式
   arduino和processing可以通过串行端口进行通讯,也就是我们常见的COM1、COM2什么的。在安装arduino驱动的时候我们已经设置了arduino的端口,我自己设置的是COM4,可以参考这里进行设置。
在arduino程序中也需要设置相同的端口:
a2008128153023.gif
processing接受和发送数据也是在这个端口进行的,在编写的代码中定义,不需要设置程序。
二. arduino通过串行端口发布数据
下面是arduino最简单的数据发布代码,将data的值“1”,通过串行端口发布出去
int data=1; //创建变量,储存需要发送的数据
void setup()
{
Serial.begin(9600);//定义数据传输率为9600比特
}
void loop()
{
Serial.print(data); //通过串行端口发送data的值
}

将代码上传到arduino后,可以先通过串行端口******检查,当然,需要将******的数据传输率设置成代码中的一样。这样,我们可以在程序下方看到不断出现的“1”。
t200812815504.jpg
三. processing从串行端口获取数据
下面是最简单的processing从串行端口获取数据的代码,注意端口和传输率的值:
import processing.serial.*;//引入serial库
int p_data;//创建变量用于储存接收到的数据
Serial myPort;//创建一个名为“myPort”的Serial对象
void setup() {
myPort = new Serial(this,"COM4", 9600);
//定义myPort的端口和数据传输率
//应和Arduino保持一致
}

void draw() {
p_data = myPort.read();//读取从串行端口获得的值,并储存在变量p_data中
println(p_data);//打印p_data的值
}

运行代码后,可以看到processing程序下方开始有数据涌现了,这说明它已经取得了来自COM4,以9600比特发布的值。这里有两个需要注意的地方,其一是Arduino必须连接到电脑,其二是不能同时开启Arduino的串行端口监控器。
但是,数据虽然已经取得,但并不是Arduino发布的“1”,而是“49”,这个问题我们后面章节再谈。
四. Arduino获取来自串行端口的值
创建一个简单的Arduino程序用于接收来自串行端口的值,并通过一个LED来判断。我们选择13号插口是因为arduino电路板中本身就在这个插口集成了个小型LED,在这个范例中我们就不用自己连线了:)
int a_data = 0; // 创建变量用于储存在串行端口收到的值
int ledPin = 13;//设定一个LED插口,用于检测收到的值
void setup() {
Serial.begin(9600);//定义数据传输率为9600比特
pinMode(ledPin, OUTPUT);//定义13号插口为输出模式
}
void loop() {
if (Serial.available() > 0) {// 在收到数据后再做出处理:
a_data = Serial.read(); // 将收到的值储存在变量中
if(a_data){//如果收到“1”(a_data为真),点亮LED,否则熄灭
digitalWrite(ledPin, HIGH);
}
else{
digitalWrite(ledPin, LOW);
}
}
}

五. processing通过串行端口发布数据
processing没有像arduino一样的串行端口******,所以最好先创建上一步所述的arduino接收端。下面的代码根据鼠标点击状态发布“0”和“1”:
import processing.serial.*;//引入serial
Serial myPort;
//创建一个名为“myPort”的Serial对象
void setup()
{
myPort = new Serial(this, "COM4", 9600);
//定义myPort的端口和数据传输率
//应和Arduino保持一致
}
void draw(){
}
void mousePressed(){
myPort.write(1);
//当鼠标按下时通过COM4,以9600传输率发布数值“1”
}
void mouseReleased(){
myPort.write(0);
//当鼠标松开时通过COM4,以9600传输率发布数值“0”
}


转自:锐梵互动 http://www.burncg.cn/burnblog/article.asp?id=108看到比较好的文章分享下



您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-12-29 06:41 , Processed in 0.082696 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表