Robofun 機器人論壇
標題:
leap motion傳輸訊息給arduino
[打印本頁]
作者:
qqcc30
時間:
2017-3-15 16:59
標題:
leap motion傳輸訊息給arduino
目的是以leap motion掃描手部動作,並傳入arduino讓arduino端的伺服馬達能夠動作
小弟我所使用的程式是Processing , 插入的是 de.voidplus.leapmotion.*;
目標是由leap motion傳輸訊息給arduino讓arudino上的伺服馬達變化角度,達到手指伸直跟彎曲
但是leap motion伸直時也會偵測到彎曲的手指的switch,但彎曲時為正常,試了很多方試都沒辦法讓伸直時彎曲的switch不動作
import processing.serial.*;
import de.voidplus.leapmotion.*;
LeapMotion leap;
Serial myPort;
void setup() {
size(800,800,P3D); //螢幕大小
background(255); //白色背景
String arduinoPort = Serial.list()[1]; //連結arduino(com3),並com3=serial.list()[1]
leap = new LeapMotion(this);
println(Serial.list());
myPort = new Serial(this, arduinoPort, 9600);
}
void draw() {
background(255);
for (Hand hand : leap.getHands ()) { //偵測leap的手
hand.draw(); //繪製手
for (Finger finger : hand.getOutstretchedFingers()) { //偵測leap伸出的手指
finger.draw();
switch(finger.getType()) {
case 0: // 0-4 = Thumb -> Pinky
System.out.println("thumb"); //print出thumb
myPort.write("T"); //向arduino輸入"T"這個字元
break;
case 1:
System.out.println("index");
myPort.write("I");
break;
case 2:
System.out.println("middle");
myPort.write("M");
break;
case 3:
System.out.println("ring");
myPort.write("R");
break;
case 4:
System.out.println("pinky");
myPort.write("P");
break;
}
}
}
for (Hand hand : leap.getHands ()) {
for (Finger finger : hand.getOutstretchedFingersByAngel(0)){
switch(finger.getType()) {
case 0: // 0-4 = Thumb -> Pinky
System.out.println("t");
myPort.write("t");
break;
case 1:
System.out.println("i");
myPort.write("i");
break;
case 2:
System.out.println("m");
myPort.write("m");;
break;
case 3:
System.out.println("r");
myPort.write("r");
break;
case 4:
System.out.println("p");
myPort.write("p");
break;
//}
}
}
}
}
}
不知道這樣解釋清不清楚,小弟嘗試了一些辦法,包括定義五個變數為0 在第一次的switch觸發case後改為1
在限制下個switch這樣也不行,或是在for (Finger finger : hand.getOutstretchedFingersByAngel(0)){上面加上if(hand.getOutstretchedFingers()==null){
也不行,手指合起來時會直接不讀取下面的switch,請大哥大姐們幫忙,小弟目前剛加入這個行列還不是很懂這方面的邏輯。歡迎指教謝謝大家。
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2