package com.yyf.wpc;
import android.bluetooth.BluetoothGatt;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.TextView;
import com.blankj.utilcode.util.ToastUtils;
import com.clj.fastble.BleManager;
import com.clj.fastble.callback.BleGattCallback;
import com.clj.fastble.callback.BleNotifyCallback;
import com.clj.fastble.callback.BleWriteCallback;
import com.clj.fastble.data.BleDevice;
import com.clj.fastble.exception.BleException;
import com.kyleduo.switchbutton.SwitchButton;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
public static final String TAG = MainActivity.class.getSimpleName();
//蓝牙服务uuid
public static final String SERVICE_UUID = "49535343-fe7d-4ae5-8fa9-9fafd205e455";
//蓝牙服务数据接收UUID
public static final String CHAR_NOTIFY_UUID = "49535343-1E4D-4BD9-BA61-23C647249616";
//蓝牙服务数据写入UUID
public static final String CHAR_WRITE_UUID = "49535343-8841-43F4-A8D4-ECBE34729BB3";
//蓝牙设备Mac
public static final String MAC = "00:0C:BF:15:62:A3";
//设备连接开关
private SwitchButton mDevicesSwitch;
//风力发电机状态开关
private SwitchButton mStatusSwitch;
//转速显示
private TextView mTextView;
//蓝牙设备实例
private BleDevice mCurrentBleDevice;
//蓝牙是否连接
private boolean isConnect = false;
//分钟转速
private int turns = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDevicesSwitch = findViewById(R.id.device_switch);
mStatusSwitch = findViewById(R.id.status_switch);
mTextView = findViewById(R.id.info_show);
//判断手机蓝牙是否开启
if (!BleManager.getInstance().isBlueEnable()) {
//开启手机蓝牙
BleManager.getInstance().enableBluetooth();
}
//风力放电机状态控制按钮
mStatusSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//设备没有链接是无法控制发电机状态
if (!isConnect) {
showMsg("请先连接设备!");
mStatusSwitch.setChecked(false);
return;
}
if (isChecked) {
//过速关闭风力发电机
writeByteData(intToByteArray(2));
} else {
//正常情况
writeByteData(intToByteArray(1));
}
}
});
//设备连接按钮
mDevicesSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
connectDevices(MAC);
} else {
BleManager.getInstance().disconnect(mCurrentBleDevice);
}
}
});
}
/**
* 连接设备
*
* @param mac 设置mac
*/
private void connectDevices(String mac) {
BleManager.getInstance().connect(mac, new BleGattCallback() {
@Override
public void onStartConnect() {
// 开始连接
showMsg("设备连接中...");
}
@Override
public void onConnectFail(BleDevice bleDevice, BleException exception) {
// 连接失败
showMsg("设备连接失败!");
isConnect = false;
}
@Override
public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
// 连接成功,BleDevice即为所连接的BLE设备
showMsg("设备连接成功!");
mCurrentBleDevice = bleDevice;
isConnect = true;
//订阅通知
subscribeNotify();
}
@Override
public void onDisConnected(boolean isActiveDisConnected, BleDevice bleDevice, BluetoothGatt gatt, int status) {
// 连接中断,isActiveDisConnected表示是否是主动调用了断开连接方法
showMsg("设备连接中断!");
}
});
}
/**
* 连接设备 接收风力发电机的转速 单位:转/分钟
*/
private void subscribeNotify() {
BleManager.getInstance().notify(
mCurrentBleDevice,
SERVICE_UUID,
CHAR_NOTIFY_UUID,
new BleNotifyCallback() {
@Override
public void onNotifySuccess() {
// 打开通知操作成功
showMsg("准备接收数据");
}
@Override
public void onNotifyFailure(BleException exception) {
Log.e(TAG, "onNotifyFailure: " + exception.toString());
// 打开通知操作失败
showMsg(exception.toString());
}
@Override
public void onCharacteristicChanged(byte[] data) {
// 打开通知后,设备发过来的数据将在这里出现
Log.e(TAG, "onCharacteristicChanged: " + data[0]);
turns = data[0];
mTextView.setText(data[0] + "转/秒");
//======根据转速自动控制风力发电机工作状态========
if (turns > 10) {
//如果大于40/min视为过速状态,关闭指示灯
writeByteData(intToByteArray(2));
mStatusSwitch.setChecked(true);
}
}
});
}
/**
* 写数据,控制风力发电机的工作状态 0开 1关
*
* @param data
*/
private void writeByteData(byte[] data) {
BleManager.getInstance().write(
mCurrentBleDevice,
SERVICE_UUID,
CHAR_WRITE_UUID,
data,
new BleWriteCallback() {
@Override
public void onWriteSuccess(int current, int total, byte[] justWrite) {
}
@Override
public void onWriteFailure(BleException exception) {
showMsg(exception.toString());
}
});
}
/**
* int到byte[] 由高位到低位
*
* @param i 需要转换为byte数组的整行值。
* @return byte数组
*/
private byte[] intToByteArray(int i) {
byte[] result = new byte[1];
result[0] = (byte) (i & 0xFF);
return result;
}
private void showMsg(String s) {
ToastUtils.showLong(s);
}
@Override
protected void onDestroy() {
super.onDestroy();
BleManager.getInstance().disconnectAllDevice();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
嵌入式优质项目,资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松copy复刻,拿到资料包后可轻松复现出一样的项目。 本人单片机开发经验充足,深耕嵌入式领域,有任何使用问题欢迎随时与我联系,我会及时为你解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明,项目具体内容可查看下方的资源详情。 【附带帮助】: 若还需要嵌入式物联网单片机相关领域开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步。 【本人专注嵌入式领域】: 有任何使用问题欢迎随时与我联系,我会及时解答,第一时间为你提供帮助,CSDN博客端可私信,为你解惑,欢迎交流。 【建议小白】: 在所有嵌入式开发中硬件部分若不会画PCB/电路,可选择根据引脚定义将其代替为面包板+杜邦线+外设模块的方式,只需轻松简单连线,下载源码烧录进去便可轻松复刻出一样的项目 【适合场景】: 相关项目设计中,皆可应用在项目开发、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面中 可借鉴此优质项目实现复刻,也可以基于此项目进行扩展来开发出更多功能
资源推荐
资源详情
资源评论
收起资源包目录
基于单片机的风力发电机转速控制.zip (47个子文件)
Archieabc
gradle.properties 728B
gradle
wrapper
gradle-wrapper.jar 53KB
gradle-wrapper.properties 232B
4B39748A-F69C-4C61-A2C0-42C997984AD6.mp4 2.04MB
app
src
androidTest
java
com
yyf
wpc
ExampleInstrumentedTest.java 727B
test
java
com
yyf
wpc
ExampleUnitTest.java 372B
main
java
com
yyf
wpc
App.java 549B
MainActivity.java 7KB
res
mipmap-xxhdpi
ic_launcher_round.png 12KB
ic_launcher.png 8KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 4KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 272B
ic_launcher_round.xml 272B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 3KB
mipmap-xxxhdpi
ic_launcher_round.png 16KB
ic_launcher.png 10KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 5KB
values
colors.xml 208B
strings.xml 66B
styles.xml 647B
layout
activity_main.xml 4KB
drawable
ic_launcher_background.xml 5KB
ic_bluetooth_audio_black_24dp.xml 708B
ic_lightbulb_outline_black_24dp.xml 635B
AndroidManifest.xml 733B
proguard-rules.pro 751B
build.gradle 2KB
release
app-release.apk 2.21MB
output.json 247B
app-release.aab 2.12MB
.gitignore 7B
gradlew.bat 2KB
build.gradle 564B
.idea
codeStyles
Project.xml 3KB
runConfigurations.xml 564B
vcs.xml 180B
misc.xml 775B
gradle.xml 748B
settings.gradle 38B
gradlew 5KB
app-release.apk 2.21MB
key
yyg.jks 2KB
.gitignore 208B
共 47 条
- 1
资源评论
阿齐Archie
- 粉丝: 1w+
- 资源: 2303
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功