zigBee控制風扇開關


程序目的:通過串口傳送命令控制ZigBee的雙聯繼電器來控制風扇的開關

【1】畫ui  一個Spinner用來選擇需要控制的風扇  兩個Button分別用來控制開關

【2】打開串口

1.判斷句柄值   如果大於0則串口已經打開   先把串口關閉傳入句柄值后在打開

2.發送命令    把命令轉換為Sring類型

 1 // 打開ZigBee串口和線程
 2     public void OpenZigBee() {
 3         // 句柄值>0表示串口打開如果串口已經打開先關閉
 4         if (ShareData.com_fdZigBee > 0)
 5             // 關閉串口 傳入句柄值
 6             SerialPort.closePort(ShareData.com_fdZigBee);
 7         /**
 8          * 讀取串口設置值,無線傳感網默認值為0
 9          * 
10          * @port:串口 ,1代表com1,2代表com2...等等
11          * @mode: 接入方式,選擇 com口還是usb com是0 usb是1
12          * @baudRate:波特率, 1200 --- 0 2400 --- 1 4800 --- 2 9600 --- 3 19200 ---
13          *                4 38400 --- 5 57600 --- 6 115200 ---7 230400 --- 8
14          *                921600 --- 9
15          * 
16          * @return ShareData.com_fdZigBee 句柄值
17          */
18         ShareData.com_fdZigBee = SerialPort.openPort(6, 1, 5);
19         // 打開Zigbee數據接收
20         Intent intent = new Intent(this, ZigBeeService.class);
21         this.startService(intent);
22 
23     }
 1 // 發送命令
 2     private static void sendCMD(char[] cmd) {
 3         // 把命令轉為為String格式
 4         String strcmd = String.valueOf(cmd);
 5         /**
 6          * 向硬件發送命令
 7          * 
 8          * @param fd
 9          *            句柄值
10          * @param pBuffer
11          *            字符串
12          * @param Length
13          *            字符長度
14          * @return
15          */
16         Linuxc.sendMsgUartHex(ShareData.com_fdZigBee, strcmd, strcmd.length());
17     }

【3】初始化UI

1.填充下拉框值

2.為下拉框設置適配器

3.獲取選中的名稱

5.分別設置兩個按鈕的監聽  並根據下拉框的選擇判斷風扇的開關

 1 private void initView() {
 2         // 填充下拉框的值
 3         String[] items = { "請選擇", "風扇1", "風扇2", "風扇3" };
 4         // 下拉框適配器
 5         ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
 6                 android.R.layout.simple_list_item_1, items);
 7         Spinner sp = (Spinner) findViewById(R.id.control_spinner);
 8         // 為下拉框設置適配器
 9         sp.setAdapter(adapter);
10         // 下拉框設置監聽
11         sp.setOnItemSelectedListener(new OnItemSelectedListener() {
12 
13             @Override
14             public void onItemSelected(AdapterView<?> parent, View view,
15                     int position, long id) {
16                 // 獲取選中的名稱
17                 String itemName = parent.getItemAtPosition(position).toString();
18                 // 設置當前風扇為選中的風扇
19                 mControlName = itemName;
20             }
21 
22             @Override
23             public void onNothingSelected(AdapterView<?> parent) {
24                 // TODO Auto-generated method stub
25 
26             }
27         });
28         // 設置打開按鈕的監聽
29         mControlOpenBtn = (Button) findViewById(R.id.open_btn);
30         mControlOpenBtn.setOnClickListener(new OnClickListener() {
31 
32             @Override
33             public void onClick(View v) {
34                 // 如果打開的是風扇 ,發送打開風扇命令
35                 if ("風扇1".equals(mControlName)) {
36                     // 開啟風扇1
37                     sendCMD(fanOpenCommand);
38                 } else if ("風扇2".equals(mControlName)) {
39                     // 開啟風扇2
40                     sendCMD(fan2OpenCommand);
41                 } else if ("風扇3".equals(mControlName)) {
42                     // 開啟風扇3
43                     sendCMD(fan3OpenCommand);
44                 }
45             }
46         });
47         // 設置關閉的監聽
48         mControlCloseBtn = (Button) findViewById(R.id.close_btn);
49         mControlCloseBtn.setOnClickListener(new OnClickListener() {
50 
51             @Override
52             public void onClick(View v) {
53                 // 發送關閉風扇命令
54                 if ("風扇1".equals(mControlName)) {
55                     // 關閉風扇1
56                     sendCMD(fanCloseCommand);
57                 } else if ("風扇2".equals(mControlName)) {
58                     // 關閉風扇2
59                     sendCMD(fan2CloseCommand);
60                 } else if ("風扇3".equals(mControlName)) {
61                     // 關閉風扇3
62                     sendCMD(fan3CloseCommand);
63                 }
64             }
65         });
66     }

【4】關閉串口   使句柄值為-1

1 private void closePort() {
2         // 判斷串口是否打開 如果打開就關閉
3         if (ShareData.com_fdZigBee > 0)
4             SerialPort.closePort(ShareData.com_fdZigBee);
5         ShareData.com_fdZigBee = -1; // java.lang.ArrayIndexOutOfBoundsException:
6     }

【5】銷毀程序    在程序退出時關閉串口

1 @Override
2     protected void onDestroy() {
3         // 在程序退出的時候關閉串口
4         closePort();
5         super.onDestroy();
6     }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM