首页
学习
关于
友链
Search
1
小程序 蓝牙连接(出现的问题和一些解决方法)
322 阅读
2
颜色空间:RGB、HSV和HSL
156 阅读
3
小程序_连接蓝牙设备根据平台去打开定位权限
142 阅读
4
小程序 加快安卓手机向蓝牙设备发送大数据
96 阅读
5
侧边菜单切换的显示与隐藏,图标的 + 与 -
92 阅读
全部
感想
旅行
生活
学习
登录
Search
标签搜索
css
javascript
jquery
html
小程序
github
图床
假期
发布订阅
typecho
第一次
未来
快乐与忧伤
努力
奋斗
PicGo
倒计时
元旦
svg
vue
逸曦穆泽
累计撰写
35
篇文章
累计收到
22
条评论
首页
栏目
全部
感想
旅行
生活
学习
页面
学习
关于
友链
搜索到
35
篇与
逸曦穆泽
的结果
2022-04-30
小程序 正整数与char(character)的相互转换,十六进制与十进制相互转换
1、正整数转字符,String.fromCharCode(arr[i]),arr[i] 为正整数onLoad() { var array = [85, 4, 17, 0, 80, 80, 234, 170] let str = that.arrToCharacter(array); console.log("字符为:",str); // PP }, // 数组的数字转为 char arrToCharacter(arr) { let len = arr.length; var str = ''; for (var i = 0; i < len; i++) { // 取 80, 80 if(i >= 4 && i < len-2){ str += String.fromCharCode(arr[i]) + ""; } } return str; },2、字符转正整数 str.charCodeAt(i), str 为字符串,i 为索引onLoad: function (options) { let str = '<010109>'; // let str = "<A500>"; console.log("字符转整数",this.charToNum(str)) // 字符转整数 [60, 48, 49, 48, 49, 48, 57, 62] }, // 字符转整数 charToNum(str){ let len = str.length; let buffer = new ArrayBuffer(len) let dataView = new DataView(buffer) // var sum = ''; for (var i = 0; i < len; i++) { dataView.setUint8(i, str.charCodeAt(i)); // sum += str.charCodeAt(i) + ""; } return buffer; },3、十六进制与十进制相互转换// 十进制转为十六进制 // 方法一(缺点没有补0) decToHex(){ let num = 12; console.log(num.toString(16)); // 打印:c }, // 方法二(写在Page外面)在Page内调用 decToHex(12) => 打印:0c let decToHex = num => num <= 16 ? '0' + num.toString(16) : num.toString(16); // 十六进制转为十进制 // 写在Page外面 let sixteenToTen = hex => parseInt(hex.replace(/\s/g,""), 16); // 在Page内调用 hexToDec(){ let hex = "ab"; console.log(sixteenToTen(hex));// 打印:171 },
2022年04月30日
21 阅读
0 评论
0 点赞
2022-04-23
小程序 canvas 画布半圆环
效果图:2、wxml:<view class="fragrance_item"> <view class="fragPos"> <view class="fragNum">{{perfumePercent}}%</view> <view class="fragText">香水余量</view> </view> <view class="fragPsoReset"> <view bindtap="resetTab" class="fragReset" hover-class="fragModel_hover"> <image class="fragReset_icon" src="/static/image/reset.png" mode="widthFix"> </image> <view>复位</view> </view> </view> <view class="fragRing"> <canvas id="perfumeBalance" type="2d" style="width: 220px; height: 120px;" ></canvas> </view> </view>3、wxss:.fragModel_hover{box-shadow: 0.2rem 0 0.3rem #8fd0e0, -0.2rem 0 0.3rem #58bfd1;} .fragrance_item{position: relative;margin-left: 15px;margin-right: 15px;} .fragPos{position: absolute;left: 50%; top: 50%;transform: translateX(-50%);text-align: center;} .fragPos .fragNum{color:#32CD32;} .fragPsoReset{position: absolute;right: 3px;top: 36px;text-align: center;} .fragPsoReset .fragReset{display:inline-block;padding:8px 13px;background-color: rgba(50,80,80.68);border-radius: 15px;transition: all .3s ease-in;font-size: 12px;} .fragPsoReset .fragReset_icon{width:22px;height:22px;} .fragRing{width: 220px;height:120px;margin: auto;}4、js:let perfumeNum = 1.5; Page({ data: { perfumePercent: 0, // 香水余量 }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { let that = this; // 香水余量圆环 const query = wx.createSelectorQuery() query.select('#perfumeBalance') .fields({ node: true, size: true }).exec((res) => { that.initRing(res); }) }, // b、香水余量 initRing(res) { let that = this; const canvas = res[0].node const ctx = canvas.getContext('2d'); const dpr = wx.getSystemInfoSync().pixelRatio // 设备像素比 canvas.width = res[0].width * dpr canvas.height = res[0].height * dpr ctx.scale(dpr, dpr); var circleR = 220 / 2; // 画布的一半,用来找中心点和半径 ctx.translate(0, 0); // 定义起始点 function draw() { ctx.clearRect(0, 0, canvas.width, canvas.height); // 取色圆环 ctx.beginPath(); ctx.strokeStyle = '#fff';//transparent ctx.lineWidth = 12; ctx.lineCap='round' // 设置圆环端点的形状 ctx.arc(circleR, circleR-10, circleR - 35, Math.PI, 2 * Math.PI, false); ctx.stroke(); ctx.closePath(); console.log("香水余量") // 进度_香水余量 ctx.beginPath(); // 起始一条路径,或重置当前路径 ctx.lineWidth = 6; // 线条宽度 ctx.lineCap='round' // 线条的结束端点样式 ctx.arc(circleR, circleR-10, circleR - 35, Math.PI,perfumeNum * Math.PI, false); ctx.strokeStyle = "#00CED1";//transparent ctx.stroke(); canvas.requestAnimationFrame(draw); } draw(); }, // 复位 resetTab(){ let that = this; perfumeNum = 2; // 香水余量为100% that.setData({ perfumePercent: 100, }) }, })
2022年04月23日
11 阅读
0 评论
0 点赞
2022-03-11
小程序 蓝牙连接(出现的问题和一些解决方法)
序:最近做小程序,要用到蓝牙模块的,不知道如何下手,没关系,看文档,看案例!看文档: 微信文档 看案例: 谷歌/百度/知乎等等,只要你觉得合适,都可以去尝试!一、小程序 BLE 开发 API 简介操作蓝牙适配器的共有 4 个:wx.openBluetoothAdapter 初始化蓝牙适配器 1 wx.closeBluetoothAdapter 关闭蓝牙模块 2 wx.getBluetoothAdapterState 获取本机蓝牙适配器状态 3 wx.onBluetoothAdapterStateChange 监听蓝牙适配器状态变化事件 4扫描和获取周围 BLE 设备的有4个(操作方式与普通蓝牙一样):wx.startBluetoothDevicesDiscovery 开始搜寻附近的蓝牙外围设备 5 wx.stopBluetoothDevicesDiscovery 停止搜寻附近的蓝牙外围设备 6 wx.getBluetoothDevices 获取所有已发现的蓝牙设备 7 wx.onBluetoothDeviceFound 监听寻找到新设备的事件 8连接BLE设备的2个:wx.createBLEConnection 连接低功耗蓝牙设备 9 wx.closeBLEConnection 断开与低功耗蓝牙设备的连接 10连接成功后,读写BLE对应特征对象的数据:wx.getConnectedBluetoothDevices 根据 uuid 获取处于已连接状态的设备 11 wx.getBLEDeviceServices 获取蓝牙设备所有 service(服务) 12 wx.getBLEDeviceCharacteristics 获取蓝牙设备所有 characteristic(特征值)13 wx.readBLECharacteristicValue 读取低功耗蓝牙设备的特征值的二进制数据值 14 wx.writeBLECharacteristicValue 向低功耗蓝牙设备特征值中写入二进制数据 15 wx.notifyBLECharacteristicValueChange 启用低功耗蓝牙设备特征值变化时的 notify 功能 16 wx.onBLECharacteristicValueChange 监听低功耗蓝牙设备的特征值变化 17 wx.onBLEConnectionStateChange 监听低功耗蓝牙连接的错误事件 18二、小程序蓝牙连接流程我的连接流程是这样的(代码我就不多贴了,只要你有思路、有想法,你就是黑马):初始化蓝牙设备之前,我做了一些的骚操作(不懂的查一下):1、打开定位/** 获取定位信息 */ getLocation: function () { let that = this; // 获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限 wx.getSetting({ success: function (res) { if(res.authSetting['scope.userLocation'] != undefined && res.authSetting['scope.userLocation'] != true){ wx.showModal({ title: '是否授权当前位置', content: '需要获取你的地理位置,请确认授权,否则无法获蓝牙', success: function(mres){ if(mres.confirm){ wx.openSetting({ success (authData) { if(authData.authSetting['scope.userLocation'] == true){ wx.showToast({ title: '授权成功', icon: "success", duration: 1000 }) }else{ wx.showToast({ title: '授权失败', icon: "error", duration: 1000 }) } } }) }else if(mres.cancel){ wx.showToast({ title: '授权失败', icon: "error", duration: 1000 }) } } }) }else{ // 当前位置 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标 wx.getLocation({ type: 'wgs84', success: function (res) { console.log('打开地理位置') }, }) } }, }) },2、这个放到一个初始化方法里面,,校验一下微信的蓝牙权限是否打开:init(){ let that = this; // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.bluetooth" 这个 scope wx.getSetting({ success(res) { // (1) 微信授权已关闭,弹窗打开 if (res.authSetting['scope.bluetooth'] != undefined && res.authSetting['scope.bluetooth'] == false) { wx.openSetting({ success (authData) { if(authData.authSetting['scope.bluetooth'] == true){ wx.showToast({ title: '授权成功', icon: "success", duration: 1000 }) that.openBluetoothAdapter(); // 打开蓝牙适配器 }else{ wx.showToast({ title: '授权失败', icon: "success", duration: 1000 }) } } }) } // (2) 'scope.bluetooth'属性不存在,需要授权 if(res.authSetting['scope.bluetooth'] == undefined){ wx.authorize({ scope: 'scope.bluetooth', success(res){ that.openBluetoothAdapter(); // 打开蓝牙适配器 } }) } // (3) 已经授权 if(res.authSetting['scope.bluetooth'] == true){ that.openBluetoothAdapter(); // 打开蓝牙适配器 } } }) }初始化蓝牙设备 1=》 (1_success)成功:开始搜索附近的蓝牙外围设备 5 , (1_fail)失败:获取蓝牙适配器状态 4;=》1_success:发现蓝牙设备 8 (对结果进行过滤,符合条件的设备进行连接) =》 连接到目标设备 9 ,连接成功,监听蓝牙低功耗连接状态的改变事件 18,关闭蓝牙搜索 6 =》 获取蓝牙低功耗设备所有服务 12 =》 获取某个服务下所有的特征值 13 (打印一下特征值有:notify,read,write特征的),监听蓝牙低功耗设备的特征值变化 17 =》 启用低功耗蓝牙设备特征值变化时的 notify 功能 16 ;=》1_fail:available 为true时,开始搜索附近的蓝牙外围设备 5,否则提示检查蓝牙是否打开你会发现,有好几个是一些流程中没用到的,但是,这是不可能发生的,存在必有其道理;(1)比如:你刷新时,你不可能再重新走一遍初始化蓝牙吧,那就要用到 获取蓝牙适配器状态 3 ,判断是 获取所有已发现的蓝牙设备 8 还是 开始搜索附近的蓝牙外围设备 5;(2)比如:要你断开主动断开蓝牙连接,断开与低功耗蓝牙设备的连接 10;(3)比如:短时间内,频繁退出或多次扫描 重新进入已连接蓝牙的小程序,在 onLoad 要用的 根据 uuid 获取处于已连接状态的设备 11(连接后,缓存 services 连接的 uuid 值),不然你已连接了设备,还一直搜不到;(4)比如:关闭蓝牙模块 2,获取所有已发现的蓝牙设备 7,读取低功耗蓝牙设备的特征值的二进制数据值 14,向低功耗蓝牙设备特征值中写入二进制数据 15 ,这个几个不用我多说了吧。三、总结:iOS 的坑是比较少一些的,Android 机的确实有很多不完善的地方,毕竟是百花齐放的嘛
2022年03月11日
322 阅读
3 评论
0 点赞
2022-02-06
春节假期
春节假期这个春节假期平平淡淡,一如既往的蜗居在家,大门没出超过十次。1月24日归家的一天,下午4点多的车票,深圳北到梧州南,六点多到梧州南站,出站差不多二十多分钟,本想去打的的,最后恍恍惚惚去买了班车(也就是你们说的巴士)票,七点多开车,路上堵了十分钟左右,一个多钟的路程,八点多到岑溪,又等了二十分钟左右我哥来接我,回村到家已经九点多了;期间,梧州到家这段家人虽然唠叨责备,但是也是关心问候,当时的心情不如现在罢了,其实都懂得,也明白其方法用得不对,但终究有些无能为力,十几年的生活习惯,哪能凭我几天的相聚说服且改变,只能默而不语。转了两千给老哥,让他过年能减轻一下自己的用度。1月25日归家的一天,早上到村委登记,然后到镇里测核酸,这队长死了,百来个人,排了快两个多钟才测到我;期间快到十一点时,眼看测核酸的人越来越多,然后工作人员点够前面排队的人数,让后面的人回去多了,这就是小镇,效率慢且设施落后,登记信息是两个人手敲的,速度能快才奇呢。1月25日 1月26日 1月27日这几天不是和外甥女玩就是和外甥女玩,小孩单纯又可爱,但也开始有了一些不好习惯展现了出来,几个小孩玩在一块,开始有推人的习惯了,不知是哪个开始的,大的那个用的最多,小的也跟着学,小孩子不知道是非对错,但大人还是要教的,如果只是唬叫几声的喊骂,只是治标不治本,看着二姐的散养养娃式,我也无奈,这习惯不是一蹴而就的,就算我打了也不管事,没有在止在开头,终究是个陋习,陋习一多,是为坏习惯,唉!这个就不深究了,意义不大。1月28日今天开始 气温骤降,不是降温,是急冻,伴随小雨纷纷,寒风入骨,令人不适,防寒衣物幸好带了一些,不然就芭比Q了,有一个小热风机吹吹脚,不然就上楼躺床盖被子,看小程蓝牙代码。1月29日 1月30日29号,六姨新居进住碧桂园,安静宜居之地,卧龙之所,屋满春风春满屋,门盈喜气喜盈门,宴请了亲朋好友,摆了三桌大菜;给外公带回一个新手机,他说旧手机的天气预报收不到了;这两天,我变得更懒,早上刷牙的水是冰的,人连大门口都少出,一天两餐,早午餐一块吃。1月31日 2月1日除夕,手上的现金不是很多,连五百都没有,大姐让我帮给一千家里,只能匆匆到药材六那里换取了八百现金,补够一千给老爸,我自己只能微信转两千给他(老爸去年还用着发红包,现在老爸一直抱怨不会使用微信付款,教过很多次了,也不知道真假),想要转变一个人很难,转变一个比较固执的人更难。大年初一,早上给外甥女发红包,也收到老妈给的红包,下着春雨贴红纸,老哥烧的鞭炮,在村里还有点年味,在城里只能在街上体会一下了。2月2日 2月3日过年期间顿顿吃肉,肉菜吃不完,青菜也吃不完,农村是这样,青菜不会缺,一如前几天,天气依然寒冷,冻得我瑟瑟发抖,3号老妈包粽子,我烧火兼烘暖,烧了大半天火,粽子出锅了。2月4日今天本来是进城去外公家的,从中午拖到下午,然后到晚上,老哥本说不开车带我进城的,让我坐班车进城的,下午他忙忙碌碌去买狗杀,跑好几个钟后才买到,最后杀好分好煮饭杜快晚上,最后洗完澡吃完饭,到外公家已经八点左右了,外公还没睡,和外公再深刻讲解了一下新手机的使用,老人易忘。2月5日一大早上,见外婆起的比我还早,七姨还没起,问了一下,外婆说要到九点多到十点吧她们才会起来;我吃过早餐后,出去逛一逛,在一个小店吃一份白米磁,去车站联系一下上梧州的顺风车,在回来的路上买点吃的东西,九点五十出门,十点上车出发,路上兜兜转转加上塞车,快十一四十多到梧州南站,十二点多进站,下午一点二十一分的动车,快四点到罗湖深圳站,回到宿舍也快五点了,一切顺利!新的征程将要开始...
2022年02月06日
28 阅读
0 评论
0 点赞
2022-01-03
元旦假期
元旦,假期三天(包括周六日)。第一天元旦,昨晚跨年晚睡,早上慢悠悠起床,十一点左右出门,本想着今天独自去甘坑客家小镇逛一逛的,开始的路上打开软件地图,突然想去爬山了,然后看看地图,去了塘朗山,出了桃源村地铁站,在附近买了几个橘子、一瓶水和一瓶维C饮料,从龙珠门进入,抄近道上到山顶,... -> 陶然小憩 -> 相思经 -> 深云广场,下午回来自己做顿好吃的,然后过个节。第二天修养,哪也不去,除了出一趟门吃个饭。第三天中午出门,快两点才到甘坑客家小镇,扫码预约亮绿码,好像预约了个寂寞,保安只看了一下绿马,其他的都没查,在里面逛了逛,在返回的过程中闻到牛奶和鸡蛋的香味,找到一家店,在那买了两个鸡蛋烤饼,到一家奶茶店买了一杯烧仙草,并在那吃完了才走,最后撑着肚子回去了。
2022年01月03日
22 阅读
0 评论
0 点赞
1
2
3
4
...
7