作者tooto1985 ( )
标题Re: [问题] Arduino和Processing结合
时间Thu Jan 16 13:12:26 2014
※ 引述《p790807 (卡丘)》之铭言:
: 请教对这两个软体熟悉的大大~
: 想请问连接arduino和processing的问题
: 我想要用两个感测器去控制processing的图案
: 其中一个是超音波感测器,另一个是光敏电阻
: 而processing也很简单,只是希望当越接近超音波感测器时,方形会越靠左边
: 而当光线值小於某值之後,processing会出现一个圆
: 但现在问题来了
: 上网找了连接的程式後
: 我只知道要怎麽接一个感测器
: 不知道若要用到两个感测器时要怎麽写
: 以去区分两种不同的功能@@
: -------------------------------------------------
: Arduino端如下:
: const int ping Pin =11;
: int duration, cm;
: int photocellPin=2;
: int photocellVal=0;
: void setup(){
: Serial.begin(9600);
: }
: void loop(){
: photocellVal=analogRead(photocellPin); //光敏电阻
: Serial.write(photocellVal); //这里要传一个光敏值
: pinMode(pingPin,OUTPUT); //超音波感测器
: digitalWrite(pingPin,LOW);
: delayMicroseconds(2);
: digitalWrite(pingPin,HIGH);
: delayMicroseconds(5);
: digitalWrite(pingPin,LOW);
: pinMode(pingPin,INPUT);
: duration=pulseIn(pingPin,HIGH);
: cm=durartion/74;
: Serial.write(cm); //这里也要传一个超音波值
: delay(100);
: }
: --------------------------------------------
: Processing端如下
: import processing.serial.*;
: Serial.serial;
: int cm;
: void setup(){
: size(165,200);
: background(0);
: serial=new Serial(this,"COM6", 9600);
: }
: void draw(){
: if(serial.available()>0){
: cm=serial.read(); //这里就出现问题了,好像只能塞得下一种感测器值?
我不确定你的问题跟我想的是不是一样?
不过也提供我的解法给你参考
void setup() {
Serial.begin(9600);
pinMode(13,OUTPUT);
}
void loop() {
if (Serial.available()>0) {
delay(100);
String s="";
int max = Serial.available();
for (int i=0;i<max;i++) {
s += String((char)Serial.read());
}
Serial.println(s);
}
}
之前我有发现,如果透过Serial输入12然後送出
会马上接收到1这个值,处理完再接着接收2
就会变成这样:
1
2
但预期中因该是这样:
12
後来就想到这个方法来解决,但有个问题存在
如果你需要高速传送Serial 可能会有延迟的问题
: background(255);
: fill(255,0,0);
: rect(cm,80,50,50);
: if(photocellVal<20){
: fill(0,0,255);
: ellipse(80,6*cm,60,60);
: }
: }
: }
: 这样出来我的Processing的方块和圆会同时被超音波和光敏值影响@@
: 请问要怎麽写才可以区分@@
: 不确定这里可否问这一类的问题@@
: 但我现在真的有点一头雾水@@
: 再请大大帮忙了!感谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.32.146.145
1F:推 p790807:了解!! 应该是这个问题!谢谢大大 01/28 22:44