【max32660】简易智能手表说明文档
说明文档
文章目录
- 说明文档
- 时间显示
- 步数记录
- 简易下位机
- 上位机
项目地址
本代码主要实现了显示时间,以及对步数的记录。顺便加了个小的下位机,用来修改时间。
时间显示
这次还是用了OLED的文字库,用到了显示文字,和画图功能。
DrawNum(0,0,step_cnt,5);SetFontSize(3);DrawChar(30,24,':');DrawNum(0,24,hour,2);DrawNum(42,24,min,2);fresh_g();RoundClock(hour,min,sec);
其中画时钟的函数是我之前有用过,参照的是另外一个up主的内容,程序里有提到。具体的使用可以参照我之前的项目
下面源码,主要用了简单的画图函数。
void RoundClock(int hours ,int minute ,int sec)
{unsigned char i=0;TypeXY hourspoint,minutepoint,secpoint,tmp1,tmp2;center_pos.x = 104;center_pos.y = 39;//时针SetRotateValue(center_pos.x,center_pos.y,hours*30+(minute*30)/60+clock_angle,1); //设定旋转中心,旋转角度,旋转方向hourspoint=GetRotateXY(center_pos.x,center_pos.y-CLOCK_R+12); //给出一个不在中心的点,计算出其旋转后的坐标DrawLine(center_pos.x,center_pos.y,hourspoint.x,hourspoint.y);//画线//分针SetRotateValue(center_pos.x,center_pos.y,minute*6+(sec*6)/60+clock_angle,1);minutepoint=GetRotateXY(center_pos.x,center_pos.y-CLOCK_R+6);DrawLine(center_pos.x,center_pos.y,minutepoint.x,minutepoint.y); //秒针SetRotateValue(center_pos.x,center_pos.y,sec*6+clock_angle,1);secpoint=GetRotateXY(center_pos.x,center_pos.y-CLOCK_R+2);DrawLine(center_pos.x,center_pos.y,secpoint.x,secpoint.y);//表盘for(i=0;i<12;i++){SetRotateValue(center_pos.x,center_pos.y,i*30+clock_angle,1);tmp1=GetRotateXY(center_pos.x,center_pos.y-CLOCK_R+1);tmp2=GetRotateXY(center_pos.x,center_pos.y-CLOCK_R+1+CLOCK_LEN);DrawLine(tmp1.x,tmp1.y,tmp2.x,tmp2.y);}
// /*表盘上的数字*/
// SetRotateValue(60,30,i*30+clock_angle,1);
// if(i==0)
// {// tmp3=GetRotateXY(center_pos.x,center_pos.y-num_pos);
// SetFontSize(1);
// DrawNum(tmp3.x,tmp3.y,12,2);
// }
// else if(i<7)
// {// SetRotateValue(62,29,i*30+clock_angle,1);
// tmp3=GetRotateXY(center_pos.x,center_pos.y-num_pos);
// SetFontSize(1);
// DrawNum(tmp3.x,tmp3.y,i,1);
// }
// else if(i<10)
// {// tmp3=GetRotateXY(center_pos.x,center_pos.y-num_pos);
// SetFontSize(1);
// DrawNum(tmp3.x,tmp3.y,i,1);
// }
// else if(i<12)
// {// tmp3=GetRotateXY(center_pos.x,center_pos.y-num_pos);
// SetFontSize(1);
// DrawNum(tmp3.x,tmp3.y,i,2);
// }
// }DrawFillCircle(center_pos.x,center_pos.y,2);//中心圆点DrawCircle(center_pos.x,center_pos.y,CLOCK_R);UpdateScreen();ClearScreen();
}
步数记录
代码设计过程参考了CSDN上的一篇博客
前面是一些基本的滤波以及求峰值,后面才是计算是否走步。
filter_acc();peak_caculate();slid_update(&temp_acc,&mpu);detect_step(&peak_acc,&temp_acc,&mpu);
下面是判断是否走步的代码:
void detect_step(peak_info *peak, slid_reg_t *slid, axis_info *cur_sample)
{char res = is_most_active(peak);switch (res) {case MOST_ACTIVE_NULL: {//fixbreak;}case MOST_ACTIVE_X: {short threshold_x = (peak->max_x + peak->min_x) / 2;if (slid->old_sample.acc_x > threshold_x && slid->new_sample.acc_x < threshold_x) {step_cnt ++;}break;}case MOST_ACTIVE_Y: {short threshold_y = (peak->max_y + peak->min_y) / 2;if (slid->old_sample.acc_y > threshold_y && slid->new_sample.acc_y < threshold_y) {step_cnt ++;}break;}case MOST_ACTIVE_Z: {short threshold_z = (peak->max_z + peak->min_z) / 2;if (slid->old_sample.acc_z > threshold_z && slid->new_sample.acc_z < threshold_z) {step_cnt ++;}break;}default: break;}
}
简易下位机
参照我之前的项目,这次的下位机更加简单,没有头文件和结束语句,原因是max的串口我用的不是很明白,所以简化了
void fresh_s_time(char *temp)
{while(*temp != '\0'){switch(*temp++){case 'h':hour = (*temp-'0')*10 + (*(temp+1)-'0');temp+=2;break;case 'm':min = (*temp-'0')*10 + (*(temp+1)-'0');temp+=2;break;case 's':sec = (*temp-'0')*10 + (*(temp+1)-'0');temp+=2;break;}}
}
上位机
也是和之前一样用的python编写
#-*- coding: UTF-8 -*- import serial # pyserial
import datetimetry:# 端口:CNU; Linux上的/dev /ttyUSB0等; windows上的COM3等portx = "COM3"# 波特率,标准值有:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200bps = 115200# 超时设置,None:永远等待操作;# 0:立即返回请求结果;# 其他:等待超时时间(单位为秒)timex = 5# 打开串口,并得到串口对象ser = serial.Serial(portx, bps, timeout=timex)# 写数据curr_time = datetime.datetime.now()result = ser.write(datetime.datetime.strftime(curr_time,'h%Hm%Ms%S').encode("gbk"))result = ser.write(datetime.datetime.strftime(curr_time,'s%S').encode("gbk"))ser.close() # 关闭串口except Exception as e:print("error!", e)
curr_time,‘h%Hm%Ms%S’).encode(“gbk”))
result = ser.write(datetime.datetime.strftime(curr_time,'s%S').encode("gbk"))ser.close() # 关闭串口
except Exception as e:
print(“error!”, e)
【max32660】简易智能手表说明文档相关推荐
- 基于STM32的OLED多级菜单GUI实现(简化版智能手表)
前言:本文的OLED多级菜单UI为一个综合性的STM32小项目,使用多传感器与OLED显示屏实现智能终端的效果.项目中的多级菜单UI使用了较为常见的结构体索引法去实现功能与功能之间的来回切换,搭配DH ...
- bootstrap3 文件上传插件fileinput中文说明文档
file input插件功能如此强大,样式非常美观,并且支持上传文件预览,ajax同步或异步上传,拖曳文件上传等炫酷的功能,完全没有理由不去使用,但是国内很少能找到本插件完整的使用方法,于是本人去其官 ...
- 智能手表能测新冠?你的Fitbit可能是一个全功能脉搏血氧计
全文共2776字,预计学习时长9分钟 图源:unsplash 新冠病毒最让人担心的一点就是,它能将一名病情稳定的感染者迅速带入病危的境地.Covid-19官方指南告诉我们,要呆在家里,就像患了感冒或流 ...
- 儿童手表运动轨迹和路径追踪_如何将智能手表或健身追踪器用作静音闹钟
儿童手表运动轨迹和路径追踪 When you need to wake up without disturbing everyone around you a silent vibration-bas ...
- 智能手表短信读取实现(带有eSIM卡,无短信功能,可安装手表QQ的智能手表)
1 前言 像华为watch3这款智能手表,不带短信功能,一号双终端的设备,三大运营商都不支持短信服务,手机不在身边收取短信如验证码.快递信息等很不方便,因此开发出此方法,解决信息读取问题. 2 思路 ...
- 互联网快讯:百度地图第二代车道级导航上线;猿辅导推智能练习本布局教育智能硬件;vivo WATCH 2智能手表正式发布
国内要闻 中国稀土集团有限公司在江西赣州挂牌成立,中铝集团.中国五矿.赣州稀土集团等参股: 华为举办冬季旗舰新品发布会,华为P50 Pocket旗舰折叠屏手机.AITO问界M5智能汽车.华为WATCH ...
- 《安富莱嵌入式周报》第308期:开源带软硬件安全认证的PLC设计,开源功率计,可靠PID实现,PR2机器人设计文件全开源,智能手表设计WASP-OS
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...
- 智能手表短信读取实现具体教程(带有eSIM卡,无短信功能,可安装手表QQ的智能手表)Version2.0改进版
1 前言 像华为watch3这款智能手表,不带短信功能,一号双终端的设备,三大运营商都不支持短信服务,手机不在身边收取短信如验证码.快递信息等很不方便,因此开发出此方法,解决信息读取问题. 2 思路 ...
- eosjs使用说明文档
eosjs使用说明文档 本使用说明基于EOSIO 1.0.22版本,最新版的教程请参考这里 版本说明: Version EOSIO/eosjs Npm EOSIO/eos Docker Node da ...
最新文章
- java 返回double数组_java-如何使用Collectors.averagingDouble计算双精度数组的均值?
- vn.py 2.0.2 发布,全功能交易程序开发框架
- 把jpg转换成pdf软件
- PaddleOCR——运行错误【Please compile with gpu to EnableGpu()】解决方案
- ubuntu12.04安装及配置过程详解1
- Java代码总结【1】_查询手机号码归属地
- ik分词和jieba分词哪个好_Python 中文 文本分析 实战:jieba分词+自定义词典补充+停用词词库补充+词频统计...
- java策略文件_[讨论]java类文件保护策略
- MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...
- 【水果识别】基于matlab GUI RGB+HSV水果成熟度分级系统【含Matlab源码 825期】
- Java - JDBC Best Practices
- 8、16、32-BIT系列单片机区别与特点
- postman一直sending 常见问题
- Visual Studio开发环境介绍 及控件属性、事件
- B. Wilbur and Array
- 华为云ARM64服务器试用
- 计算机控制系统w域,西南交大18秋《计算机控制系统》离线作业
- 理财入门:基金(简述,主要是指数基金)
- 建立数据驱动的人力资源管理:以红海云eHR系统为例
- IGD Display Switch
热门文章
- 高效查询快递物流信息
- 机器人 零境交错吧_电击文库零境交错
- android组件化单独运行
- 盘点和反思在微信的阴影下艰难求生的移动端IM应用
- 小米范工具系列之九:小米范子域名收集工具
- android切换域名,android通过gradle切换域名,替换app的String资源(修改app名称,图标)
- java io密集型任务_Java 多线程(一):CPU密集型、IO密集型
- 跟CEO、CSO们一起来上保险科技精品课:众安在线、泛华金控...30家标杆企业案例8小时深度闭门研讨...
- [OS-Linux]详解Linux的文件系统、inode和动静态库
- 席南华院士:数学的意义(2020.5.30)