手把手教你做智能LED灯(三) 手机控制端开发
2016-09-14 10:04
246 查看
第3节 手机控制端开发
Arduino开发板已经可以接收命令了。接下来就要开始考虑手机端如何控制LED灯。我们在之前一篇文档中开发过蓝牙聊天应用,那里面详细介绍了蓝牙设备互相连接的原理和实现方法。在这一节中,我们只需要将那个应用稍微做些改造,就能实现对LED灯的控制功能了。
如果你对安卓开发实在没有兴趣,只想赶快能用手机控制器控制它。那么你可以在这里下载到APK安装包。安装完成后,直接启动程序就可以了。
3.1 界面设计
首先,我们用Android Studio重新创建一个安卓应用的工程,把蓝牙聊天应用原封不动的照搬过去。删除界面相关的代码,我们将在这个基础上对代码进行修改。你只需要按照下面的步骤做就行了。
给主界面
activity_chat.xml添加一个
SeekBar,让用户通过拖动
SeekBar的方式来改变LED灯带亮度。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:padding="5dp"> <SeekBar android:id="@+id/light_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center"/> </FrameLayout>
3.2 逻辑设计
因为调整了布局文件,相应的代码逻辑也要做出改变。在
onCreate()回调中,获取
SeekBar,
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); ...... mSeekBar = (SeekBar) findViewById(R.id.light_bar); }
给这个
SeekBar设置它被拖动到最大时所对应的数字-
255,对应着LED灯的
0~255级,
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); ...... mSeekBar = (SeekBar) findViewById(R.id.light_bar); mSeekBar.setMax(255); }
给
SeekBar添加监听器,当用户开始拖动、正在拖动、结束拖动进度条的时候,都会通知给监听器。开发者就可以根据当前进度条所在的位置,来判断要发送什么值给LED灯。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); ...... mSeekBar = (SeekBar) findViewById(R.id.light_bar); mSeekBar.setMax(255); mSeekBar.setOnSeekBarChangeListener(mOnSeekBarChangeListener); }
我们仅当用户结束拖动的时候,才把要设置的亮度发送给LED灯。而且发送之前要确定当前手机与LED灯之间处于连接状态,
rivate SeekBar.OnSeekBarChangeListener mOnSeekBarChangeListener = new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } //停止拖动时触发,这时尝试把要设定的亮度发送给LED灯 @Override public void onStopTrackingTouch(SeekBar seekBar) { //手机与LED灯处于连接状态才发送命令 if(mConnectionManager.getCurrentConnectState() == ConnectionManager.CONNECT_STATE_CONNECTED) { //每条命令一个字节,所以要把获取的灯的亮度转换成一个byte byte level = (byte)seekBar.getProgress(); byte [] data = {level}; //发送命令 mConnectionManager.sendData(data); } } };
当蓝牙设备没有连接的时候,让
SeekBar不能够被拖动,把它
setEnabled(false)掉,
private void updateUI() { if(mConnectionManager == null) { return; } if(mConnectionMenuItem == null) { mSeekBar.setEnabled(false); return; } Log.d(TAG, "current BT ConnectState="+mConnectionManager.getState(mConnectionManager.getCurrentConnectState()) +" ListenState="+mConnectionManager.getState(mConnectionManager.getCurrentListenState())); if(mConnectionManager.getCurrentConnectState() == ConnectionManager.CONNECT_STATE_CONNECTED) { mConnectionMenuItem.setTitle(R.string.disconnect); mSeekBar.setEnabled(true); } else if(mConnectionManager.getCurrentConnectState() == ConnectionManager.CONNECT_STATE_CONNECTING) { mConnectionMenuItem.setTitle(R.string.cancel); mSeekBar.setEnabled(false); } else if(mConnectionManager.getCurrentConnectState() == ConnectionManager.CONNECT_STATE_IDLE) { mConnectionMenuItem.setTitle(R.string.connect); mSeekBar.setEnabled(false); } }
至此,一个能控制LED灯的手机控制器就改造完成了。
/[b]*******************************************************************[/b]/
本系列课程使用到的Arduino开发板、扩展板以及其他相关的传感器,各位可以根据我们文章中介绍的硬件在淘宝网选购。
您也可以在我们的网店跟我学Arduino编程中购买,这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。
最后再次感谢各位读者对
安豆的支持,谢谢:)
/[b]*******************************************************************[/b]/
相关文章推荐
- Window Mobile SmartPhone智能手机软件开发vs2005 简体中文版 设置指南!
- 智能手机开发平台三国鼎立
- 智能手机Smartphone开发从零起步(四)
- 使用 C# 开发智能手机软件:推箱子(十四)
- 使用 C# 开发智能手机软件:推箱子(十三)
- [智能设备]SmartPhone开发常用类(一) 手机短信发送
- 使用 C# 开发智能手机软件:推箱子(十五)
- 智能手机Smartphone开发从零起步(二)
- 智能手机Smartphone开发从零起步(一)
- 使用 C# 开发智能手机软件:推箱子(十六)
- VS.NET 2005 开发微软智能手机SmartPhone Window Mobile 5.0 开发环境配置指南
- 使用 C# 开发智能手机软件:推箱子(四)
- 使用 C# 开发智能手机软件:推箱子(三)
- 智能手机Smartphone开发从零起步(三)
- 使用 C# 开发智能手机软件:推箱子(八)
- [转] VS.NET 2005 开发微软智能手机SmartPhone Window Mobile 5.0 开发环境配置指南
- 使用 C# 开发智能手机软件:推箱子(二)
- 使用 C# 开发智能手机软件:推箱子(六)
- 使用 C# 开发智能手机软件:推箱子(十一)
- 使用 C# 开发智能手机软件:推箱子(十六)