说明文档

文章目录

  • 说明文档
    • 时间显示
    • 步数记录
    • 简易下位机
      • 上位机

项目地址

本代码主要实现了显示时间,以及对步数的记录。顺便加了个小的下位机,用来修改时间。

时间显示

这次还是用了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】简易智能手表说明文档相关推荐

  1. 基于STM32的OLED多级菜单GUI实现(简化版智能手表)

    前言:本文的OLED多级菜单UI为一个综合性的STM32小项目,使用多传感器与OLED显示屏实现智能终端的效果.项目中的多级菜单UI使用了较为常见的结构体索引法去实现功能与功能之间的来回切换,搭配DH ...

  2. bootstrap3 文件上传插件fileinput中文说明文档

    file input插件功能如此强大,样式非常美观,并且支持上传文件预览,ajax同步或异步上传,拖曳文件上传等炫酷的功能,完全没有理由不去使用,但是国内很少能找到本插件完整的使用方法,于是本人去其官 ...

  3. 智能手表能测新冠?你的Fitbit可能是一个全功能脉搏血氧计

    全文共2776字,预计学习时长9分钟 图源:unsplash 新冠病毒最让人担心的一点就是,它能将一名病情稳定的感染者迅速带入病危的境地.Covid-19官方指南告诉我们,要呆在家里,就像患了感冒或流 ...

  4. 儿童手表运动轨迹和路径追踪_如何将智能手表或健身追踪器用作静音闹钟

    儿童手表运动轨迹和路径追踪 When you need to wake up without disturbing everyone around you a silent vibration-bas ...

  5. 智能手表短信读取实现(带有eSIM卡,无短信功能,可安装手表QQ的智能手表)

    1 前言 像华为watch3这款智能手表,不带短信功能,一号双终端的设备,三大运营商都不支持短信服务,手机不在身边收取短信如验证码.快递信息等很不方便,因此开发出此方法,解决信息读取问题. 2 思路 ...

  6. 互联网快讯:百度地图第二代车道级导航上线;猿辅导推智能练习本布局教育智能硬件;vivo WATCH 2智能手表正式发布

    国内要闻 中国稀土集团有限公司在江西赣州挂牌成立,中铝集团.中国五矿.赣州稀土集团等参股: 华为举办冬季旗舰新品发布会,华为P50 Pocket旗舰折叠屏手机.AITO问界M5智能汽车.华为WATCH ...

  7. 《安富莱嵌入式周报》第308期:开源带软硬件安全认证的PLC设计,开源功率计,可靠PID实现,PR2机器人设计文件全开源,智能手表设计WASP-OS

    周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Pow ...

  8. 智能手表短信读取实现具体教程(带有eSIM卡,无短信功能,可安装手表QQ的智能手表)Version2.0改进版

    1 前言 像华为watch3这款智能手表,不带短信功能,一号双终端的设备,三大运营商都不支持短信服务,手机不在身边收取短信如验证码.快递信息等很不方便,因此开发出此方法,解决信息读取问题. 2 思路 ...

  9. eosjs使用说明文档

    eosjs使用说明文档 本使用说明基于EOSIO 1.0.22版本,最新版的教程请参考这里 版本说明: Version EOSIO/eosjs Npm EOSIO/eos Docker Node da ...

最新文章

  1. java 返回double数组_java-如何使用Collectors.averagingDouble计算双精度数组的均值?
  2. vn.py 2.0.2 发布,全功能交易程序开发框架
  3. 把jpg转换成pdf软件
  4. PaddleOCR——运行错误【Please compile with gpu to EnableGpu()】解决方案
  5. ubuntu12.04安装及配置过程详解1
  6. Java代码总结【1】_查询手机号码归属地
  7. ik分词和jieba分词哪个好_Python 中文 文本分析 实战:jieba分词+自定义词典补充+停用词词库补充+词频统计...
  8. java策略文件_[讨论]java类文件保护策略
  9. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...
  10. 【水果识别】基于matlab GUI RGB+HSV水果成熟度分级系统【含Matlab源码 825期】
  11. Java - JDBC Best Practices
  12. 8、16、32-BIT系列单片机区别与特点
  13. postman一直sending 常见问题
  14. Visual Studio开发环境介绍 及控件属性、事件
  15. B. Wilbur and Array
  16. 华为云ARM64服务器试用
  17. 计算机控制系统w域,西南交大18秋《计算机控制系统》离线作业
  18. 理财入门:基金(简述,主要是指数基金)
  19. 建立数据驱动的人力资源管理:以红海云eHR系统为例
  20. IGD Display Switch

热门文章

  1. 高效查询快递物流信息
  2. 机器人 零境交错吧_电击文库零境交错
  3. android组件化单独运行
  4. 盘点和反思在微信的阴影下艰难求生的移动端IM应用
  5. 小米范工具系列之九:小米范子域名收集工具
  6. android切换域名,android通过gradle切换域名,替换app的String资源(修改app名称,图标)
  7. java io密集型任务_Java 多线程(一):CPU密集型、IO密集型
  8. 跟CEO、CSO们一起来上保险科技精品课:众安在线、泛华金控...30家标杆企业案例8小时深度闭门研讨...
  9. [OS-Linux]详解Linux的文件系统、inode和动静态库
  10. 席南华院士:数学的意义(2020.5.30)