funpack第六期_MAX32660+OLED+APDS9960_时钟显示及手势识别
MAX32660评估系统提供结构紧凑的开发平台,在微小、易于使用的电路板实现对MAX32660全部特性的访问,使用手势传感器及oled屏完成作业.
标签
Funpack参赛
MAX32660
OLED
APDS9960
litter47
更新2021-03-31
1075

Funpack第六期说明文档

  我是来自安徽某师范大学18级通信工程的一名学生,,这次是第二次参加funpack的活动,很高兴也很荣幸能够参加funpack的这次活动.

  那么本期活动的任务是实现一个智能手表的简单原型,包括:

  1. 能显示基本的时间;
  2. 配合任意形式的一个显示屏及一种或多种传感器或其他器件,实现一个智能手表的相关功能,比如:针对运动的计步器、针对健康的血压监测和跌倒报警等等

首先介绍一下本期开发板评估板,最核心的是MAX32660微控制器,属于美信DARWIN产品系列,是一款超低功耗、性价比突出、集成度非常高的32位控制器。芯片封装非常小,4mm x 4mm 的TQFN已经是这个系列里最大封装,非常适合电池供电或是无线传感器的应用。MAX32660采用了带浮点运算功能的Cortex-M4内核,最大主频96MHz, 带256KB Flash和96KB SRAM,性能很强劲.FkSOH9ySHDecc1cKAVekuzgqSWWP

那么本次活动我所使用的传感器是apds的一款手势识别传感器,通过oled屏显示一行时间和一行上下箭头,当手从上往下划过传感器时,屏幕上的箭头自动变为向下的箭头,手从下往上划过时则自动变为向上的箭头.

先介绍一下我所使用的手势传感器APDS,它是一款具有光感和色感的传感器,利用四个方向的光电二极管来感测反射的IR能量,以将物理运动信息(即速度,方向和距离)转换成数字信息.APDS的应用广泛,包括手势检测,颜色感测,环境光感测,手机触摸屏和机械开关更换等等.

(手册链接:https://max.book118.com/html/2017/0905/131913559.shtm)

Fhvmdgz5kLWND7r7cqOPGJlxez4i

之后就是代码的介绍了,主要代码分别为各个器件的初始化,apds信息获取以及oled显示:

    Pin_Init();
    printf("Pin Init OK");

    if (SPI_Init(SPI0A, 0, SPI_SPEED) != 0)
    {
        Console_Init();
        printf("Error configuring SPI\n");
        while (1) {}
    }

    sys_cfg.tmr = MXC_TMR0;
    if (RTC_Init(MXC_RTC, 16*SECS_PER_HR+40*SECS_PER_MIN+0, 0, &sys_cfg) != E_NO_ERROR) {
        printf("Failed RTC_Setup().\n");
        return -1;
    }
    if (RTC_EnableRTCE(MXC_RTC) != E_NO_ERROR) {
        printf("Failed RTC_EnableRTCE().\n");
        return -1;
    }
    PWM_Output(100);


#if defined USE_OLED
    OLED_Init();
#if defined USE_APDS
        uint8_t gesture = APDS9960_readGesture();
        uint8_t temp_gest = 0;
        if(gesture == APDS9960_DOWN)
        {
            temp_gest = gesture;
            printf("v");
        }
        if(gesture == APDS9960_UP)
        {
            temp_gest = gesture;
            printf("^");
        }
        if(temp_gest == APDS9960_UP)
            OLED_ShowChar(20,30,'^',16);
        if(temp_gest == APDS9960_DOWN)
            OLED_ShowChar(20,30,'v',16);

        sec = RTC_GetSecond();

        day = sec / SECS_PER_DAY;
        sec -= day * SECS_PER_DAY;

        hr = sec / SECS_PER_HR;
        sec -= hr * SECS_PER_HR;

        min = sec / SECS_PER_MIN;
        sec -= min * SECS_PER_MIN;
        OLED_ShowChar(10, 8, (char)(48+hr/10),24);
        OLED_ShowChar(20, 8, (char)(48+hr%10),24);
        OLED_ShowChar(30, 8, (char)(46+(sec%2?12:0)),24);
        OLED_ShowChar(40, 8, (char)(48+min/10),24);
        OLED_ShowChar(50, 8, (char)(48+min%10),24);
        OLED_ShowChar(60, 8, (char)(46+(sec%2?12:0)),24);
        OLED_ShowChar(70, 8, (char)(48+sec/10),24);
        OLED_ShowChar(80, 8, (char)(48+sec%10),24);
        OLED_Refresh();

现象如图,oled第一行显示的是时间,第二行是手势划动的方向.

先是向下划动手指时,第二行显示V字样式代表检测到向下划动:

Fjd9CdMl6WOMWHOCC5aoG2CMhvL3

之后是手指向上滑动,屏幕显示^字样式代表检测到向上划动:

FviM5uElvZ234LXuSSAZAXcjGxss

那么以上便是本次活动的我的作业展示了,funpack活动让我每次都接触到没有使用过的开发平台,锻炼了我的学习能力,使我受益匪浅,也让我熟悉了max评估版的基本使用方法,锻炼了我的编程开发能力.很感谢funpack的这次活动,以后也还会多多参加支持活动,希望活动能越办越好!

附件下载
liu.zip
团队介绍
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号