作者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