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