作者 主题: 菜鸟求教!谢谢大家!  (阅读 13072 次)

alvin123

  • Newbie
  • *
  • 帖子: 32
菜鸟求教!谢谢大家!
« 于: 四月 16, 2013, 10:13:01 下午 »
 processing里面的代码 


 import processing.serial.*;

import processing.video.*;
  Serial duankou;//创建对象duankou
 int data;
Movie theMov;
void setup() {
   
  size(720, 480);
  String arduinoDuankou=Serial.list()[2];
  duankou = new Serial(this,arduinoDuankou,9600);
  println(Serial.list());

  theMov = new Movie(this, "shiping.mp4");

   theMov.play();  //plays the movie once
    frameRate(24);
}

void draw() {
   theMov.read();
  image(theMov, 0, 0);
  if(duankou.available()>0){
  data=duankou.read();
  println(data);
 fill(0);
  rect(300,300,data,data) ;
  }
}

arduino 里面的代码
int sensorPin =0;
int data;
void setup(){
Serial.begin(9600);
}
void loop(){
data=analogRead(sensorPin);
Serial.println(data);
delay(1000);

}


sensorPin连接的是一个开关按钮 ,问题1:想请问一下为什么arduino向端口发布的data是0或者1023,processing接收到的data却不是0或者1023,而是40按下开关是50或者51.

问题2:我将arduino里面的代码Serial.println(data);改为Serial.write(data); processing接受到的data则为0或者255.是什么原因?
问题3:arduino有没有类似于processing里面println(data); 的语句?


谢谢解答!

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: 菜鸟求教!谢谢大家!
« 回复 #1 于: 四月 21, 2013, 07:35:35 上午 »
俺虽是P版版主,非A版版主,但还是回答你一下吧,说得可能会有错,勿怪。


问题一解答:

arduino 使用的是一个6通道的a/d 转换器,10位的精度(2^10),所以范围在0-1023。

问题二解答:

你使用的write() 中接受的参数是byte,也就是说8位的精度(2^8),所以范围在0-255。

问题三解答:

一样使用println(),打开Serial Monitor 就可以看到了。

alvin123

  • Newbie
  • *
  • 帖子: 32
Re: 菜鸟求教!谢谢大家!
« 回复 #2 于: 四月 21, 2013, 10:54:50 下午 »
俺虽是P版版主,非A版版主,但还是回答你一下吧,说得可能会有错,勿怪。


问题一解答:

arduino 使用的是一个6通道的a/d 转换器,10位的精度(2^10),所以范围在0-1023。

问题二解答:

你使用的write() 中接受的参数是byte,也就是说8位的精度(2^8),所以范围在0-255。

问题三解答:

一样使用println(),打开Serial Monitor 就可以看到了。


嗯嗯!!谢谢!对我有很大的帮助!我看见网上很多在arduino传输的代码都是println之类的。但是我用println的时候processing接收不到一模一样的数据

可以介绍点有关这种processing和arduino数据传输的书吗?或者有什么途径可以学到?谢谢


RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: 菜鸟求教!谢谢大家!
« 回复 #3 于: 四月 21, 2013, 11:46:25 下午 »
俺是觉得没有书单单介绍a与p 通信的内容,因为这并不难。

关键你要知道你使用的函数接受的参数类型,这点其实很容易在官方的reference 上查到。你知道了参数类型,就可以了解这种参数类型的局限性,是否需要在通信时做映射,或者是否要合并到一个字符串,再到p端调用splitTokens 做拆解。

alvin123

  • Newbie
  • *
  • 帖子: 32
Re: 菜鸟求教!谢谢大家!
« 回复 #4 于: 四月 22, 2013, 10:19:27 上午 »
俺是觉得没有书单单介绍a与p 通信的内容,因为这并不难。

关键你要知道你使用的函数接受的参数类型,这点其实很容易在官方的reference 上查到。你知道了参数类型,就可以了解这种参数类型的局限性,是否需要在通信时做映射,或者是否要合并到一个字符串,再到p端调用splitTokens 做拆解。

嗯!我用的IDE版本是1.5.2 我用Serial.println(78,BYTE)函数的时候,提示新版本已经没有BYTE了,叫我用write()函数代替。然后我就搞不懂我这个版本参数类型怎么设置了!

另外合并字符串,到p端调用splitTokens 做拆解有相应的代码给我研究一下吗?谢谢

admin

  • Administrator
  • Newbie
  • *****
  • 帖子: 29
Re: 菜鸟求教!谢谢大家!
« 回复 #5 于: 四月 22, 2013, 04:20:23 下午 »
微博主页君收到的该问题评论:

@everNote2013:要用serial.write()函数。而不是serial.print    (今天 08:21)
@everNote2013:2。你的sensor 接收到转化的数字信号需要进行处理。参考相应的传感器说明书    (今天 08:27)

ChocolateUniverse

  • Jr. Member
  • **
  • 帖子: 97
  • BigQ 勤劳勇敢,爱好艺术
Re: 菜鸟求教!谢谢大家!
« 回复 #6 于: 四月 22, 2013, 04:33:27 下午 »
建议:你在Arduino中,用serial.write() .
原因:在A中传字符串到P,P中就拿字符串收.   PS: println()函数是传输的ASCII码.
您的代码中:在A中传ASCII码,然后在P中存储在 int类型中,所以会不同.
BigQ 勤劳勇敢 爱好艺术

ChocolateUniverse

  • Jr. Member
  • **
  • 帖子: 97
  • BigQ 勤劳勇敢,爱好艺术
Re: 菜鸟求教!谢谢大家!
« 回复 #7 于: 四月 22, 2013, 04:44:36 下午 »
@RavenKwok 三点回答,赞!

关于serial.write()  :http://arduino.cc/en/Serial/Write
关于splitTokens()     : http://processing.org/reference/splitTokens_.html
BigQ 勤劳勇敢 爱好艺术

alvin123

  • Newbie
  • *
  • 帖子: 32
Re: 菜鸟求教!谢谢大家!
« 回复 #8 于: 五月 04, 2013, 12:51:56 下午 »
建议:你在Arduino中,用serial.write() .
原因:在A中传字符串到P,P中就拿字符串收.   PS: println()函数是传输的ASCII码.
您的代码中:在A中传ASCII码,然后在P中存储在 int类型中,所以会不同.


感谢!那么如果A中要传输几个输入引脚的数据,怎么传到P中

alvin123

  • Newbie
  • *
  • 帖子: 32
Re: 菜鸟求教!谢谢大家!
« 回复 #9 于: 五月 04, 2013, 01:11:27 下午 »
@RavenKwok 三点回答,赞!

关于serial.write()  :http://arduino.cc/en/Serial/Write
关于splitTokens()     : http://processing.org/reference/splitTokens_.html


就是如果我有几个传感器。怎么把这几个传感器的读取的数据都传到P里面!有代码参考吗?谢谢

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: 菜鸟求教!谢谢大家!
« 回复 #10 于: 五月 06, 2013, 11:25:39 上午 »
@alvin123

俺已经在三楼回答你了。

"。。。或者是否要合并到一个字符串,再到p端调用splitTokens 做拆解。"

大Q在七楼把splitTokens 的文档页链接也给你了。

"关于splitTokens()     : http://processing.org/reference/splitTokens_.html"

无意冒犯,但俺觉得你应该花点时间看下。

alvin123

  • Newbie
  • *
  • 帖子: 32
Re: 菜鸟求教!谢谢大家!
« 回复 #11 于: 五月 07, 2013, 12:12:58 上午 »
@alvin123

俺已经在三楼回答你了。

"。。。或者是否要合并到一个字符串,再到p端调用splitTokens 做拆解。"

大Q在七楼把splitTokens 的文档页链接也给你了。

"关于splitTokens()     : http://processing.org/reference/splitTokens_.html"

无意冒犯,但俺觉得你应该花点时间看下。


好的!谢谢!

alvin123

  • Newbie
  • *
  • 帖子: 32
Re: 菜鸟求教!谢谢大家!
« 回复 #12 于: 五月 07, 2013, 12:20:03 上午 »
@alvin123

俺已经在三楼回答你了。

"。。。或者是否要合并到一个字符串,再到p端调用splitTokens 做拆解。"

大Q在七楼把splitTokens 的文档页链接也给你了。

"关于splitTokens()     : http://processing.org/reference/splitTokens_.html"

无意冒犯,但俺觉得你应该花点时间看下。


怎么将几个数据在A中合并成字符串?例如a=40,b=50,c=60

RavenKwok

  • Sr. Member
  • ****
  • 帖子: 277
  • Artist/ Animator/ Coder/ Cynical Asshole
Re: 菜鸟求教!谢谢大家!
« 回复 #13 于: 五月 07, 2013, 02:00:53 下午 »
String msg = String(a) + "," + String(b) + "," + String(c);

http://arduino.cc/en/Reference/StringConstructor

alvin123

  • Newbie
  • *
  • 帖子: 32
Re: 菜鸟求教!谢谢大家!
« 回复 #14 于: 五月 09, 2013, 12:32:16 上午 »
String msg = String(a) + "," + String(b) + "," + String(c);

http://arduino.cc/en/Reference/StringConstructor


你好!我尝试了一下!报错!
A里面的代码
String a;
String b;
void setup() {
Serial.begin(9600);
a="10";
b="20";
}

void loop() {
  String msg = String(a) + "," + String(b);
  Serial.println(msg);
  delay(100);
}

P里面的代码
import processing.serial.*;

Serial duankou;//创建对象duankou
 String t;//变量data作为接收到的数据
void setup() {
  size(500, 500,P3D);//开启3d渲染
  duankou = new Serial(this,"COM3",9600);
 
}

void draw() {

  if(duankou.available()>0){
  t=duankou.readString();
  String[] q = splitTokens(t, ", ");//拆分字符串储存在数组上
  println(q[0]);  // Prints "a"
  println(q[1]);  // Prints "b"
  }
 
   }


Tags: