網際論壇 - 軟體使用求助區 - 〔求助〕NB藍芽操控2台機器人(lego)同時動作..
» 遊客:  註冊 | 登錄 | 會員 | 幫助
 

免費線上小說
動漫分類 : 最新上架熱門連載全本小說最新上架玄幻奇幻都市言情武俠仙俠軍事歷史網游競技科幻靈異 ... 更多小說

作者:
標題: 〔求助〕NB藍芽操控2台機器人(lego)同時動作.. 上一主題 | 下一主題
  atuaz
  基本會員 
 



  積分 10
  發文 2
  註冊 2010-1-27
  狀態 離線
#1  〔求助〕NB藍芽操控2台機器人(lego)同時動作..

各位資深前輩們好

小弟的專題報告將近

題目是用筆電連結藍芽操控2台機器人同時動作(前進後退)


由於時間緊迫 依小弟及朋友的能力只有辦法藉由書籍的範例程式碼來操作一台


我想詢問的是能否以修改程式碼的方式


來使筆電藍芽操控"兩台"機器人同時動作
(機器人為LEGO)

因為下面的程式碼是已經成功能連結操作一台機器人


希望資深前輩能不吝指教!!小弟非常感激!!


範例程式碼如下(已實作成功操控一台)




import lejos.pc.comm.*;

import java.io.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

class MouseAction implements MouseListener //滑鼠事件
{

DataOutputStream dataOut;


int cmd;



public MouseAction(DataOutputStream _dataOut, int _cmd)


{


dataOut = _dataOut;


cmd = _cmd;


}//建構子



public void mousePressed(MouseEvent e) //滑鼠壓下事件

{

try{


dataOut.writeInt(cmd); //送出命令


dataOut.flush();


} catch(IOException i) {


JOptionPane.showMessageDialog(null, "Communication disconnected",
"Error", JOptionPane.ERROR_MESSAGE); //斷線錯誤警告


System.exit(1);

}


}//mousePressed




public void mouseReleased(MouseEvent e) //滑鼠放開事件

{

try{


dataOut.writeInt(0); //送出停止命令

dataOut.flush();

} catch(IOException i) {

JOptionPane.showMessageDialog(null, "Communication disconnected",

"Error", JOptionPane.ERROR_MESSAGE); //斷線錯誤警告

System.exit(1);


}

}//mouseReleased



public void mouseClicked(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}


public void mouseExited(MouseEvent e) {}

}//MouseAction

class Sample14_2 extends JFrame
{

int STOP = 0, FWD = 1, BACK = 2, LEFT = 3, RIGHT = 4; //宣告命令碼


JButton btForward;


JButton btBackward;

JButton btLeft;

JButton btRight;

NXTConnector conn;


DataOutputStream dataOut;



public Sample14_2()

{

conn = new NXTConnector();


if(!conn.connectTo("", "", NXTCommFactory.BLUETOOTH)) //連線到NXT

{


JOptionPane.showMessageDialog(null, "Cannot connect to NXT",


"Error", JOptionPane.ERROR_MESSAGE); //連線失敗訊息

System.exit(1);

}//if

dataOut = conn.getDataOut(); //取得輸出串流




//設定視窗

this.setTitle("COM"); //視窗標題為「COM」

this.setSize(320, 240); //視窗大小為320×240

this.setResizable(false); //固定視窗大小

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //視窗關閉時結束程式

this.getContentPane().setLayout(null); //視窗的Layout Manager為null

this.setLocationRelativeTo(null); //視窗在螢幕置中



//前進按鈕


btForward = new JButton("↑"); //宣告JButton


btForward.setBounds(100, 0, 100, 100); //設定大小位置

btForward.addMouseListener(new MouseAction(dataOut, FWD));//加入滑鼠事件


this.getContentPane().add(btForward); //將按鈕加入視窗



//後退按鈕


btBackward = new JButton("↓");

btBackward.setBounds(100, 100, 100, 100);


btBackward.addMouseListener(new MouseAction(dataOut, BACK));


this.getContentPane().add(btBackward);




//左轉按鈕


btLeft = new JButton("←");


btLeft.setBounds(0, 100, 100, 100);


btLeft.addMouseListener(new MouseAction(dataOut, LEFT));

this.getContentPane().add(btLeft);



//右轉按鈕


btRight = new JButton("→");


btRight.setBounds(200, 100, 100, 100);


btRight.addMouseListener(new MouseAction(dataOut, RIGHT));


this.getContentPane().add(btRight);



this.setVisible(true); //顯示視窗

}//建構子




public static void main(String args[])


{

Sample14_2 com = new Sample14_2();


}//main
}//Sample14_2


2011-12-7 04:08 PM
查看資料  發送郵件  發短消息   編輯文章  引用回覆
  Smiler
  高級會員 
 


  積分 6333
  發文 987
  註冊 2005-9-7
  狀態 離線
#2  參考看看!

我對程式部份不是那麼瞭解,但是大致對藍牙連線有一些概念,我想您的程式最大的問題應該是缺少定義裝置名稱(Device Name)的部份!
藍牙規範可以同時連結8個藍牙裝置(1個Host,7個Slave),您的程式在連線時是連線到NXT通道,但是並沒有區分不同藍牙裝置各自的裝置名稱,所以無法分辨送出的命令是要給那一個裝置,想要同時控制兩個裝置,就需要同時對兩個裝置送出指令!

[ Last edited by Smiler on 2011-12-10 at 11:55 PM ]


2011-12-10 11:50 PM
查看資料  發送郵件  發短消息   編輯文章  引用回覆

可打印版本 | 推薦給朋友 | 訂閱主題 | 收藏主題

論壇跳轉選單: