You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

4.0 KiB

conduction1_dynamic_electrocardiograph

使用说明

https://iflytop1.feishu.cn/wiki/Fp0fwciUEibtm4kaUeXcraOCneg

开发板IO资源说明:

#define BSP_LED_0      13
#define BSP_LED_1      14
#define BSP_LED_2      15
#define BSP_LED_3      16

#define BUTTON_1       11 // 上拉低电平有效
#define BUTTON_2       12 // 上拉低电平有效
#define BUTTON_3       24 // 上拉低电平有效
#define BUTTON_4       25 // 上拉低电平有效

sdk\components\boards\pca10100.h

清风开发板

        AIN2 -> 光感

I2C
#define TWI_SCL_M           28         //I2C SCL引脚
#define TWI_SDA_M           30         //I2C SDA引脚

------------------------------------

      
PIN4  PIN30/PIN31 PIN28/PIN29 PIN11/PIN20




设备行为:
1. 按下按键或者电极触发后开始广播

2. 当电极没有触发,且蓝牙没有连接,且超时10s后,停止广播,进入低功耗模式

3. 设备状态

        关机(休眠)
        开机蓝牙未连接(广播中)
        蓝牙已连接


难点:
        1.采样间隔2ms (500HZ)
        2.数据往flash中写入时间消耗,cache选择多大,数据什么时候上报。
        1. ADC:单次采样,阻塞拿数值(50us)
        2. 电池电量的采集ADC和电压采集ADC用的是同一个ADC

        (这里先使用最简单的阻塞式ADC采集,电池ADC3次,采样ADC3次)



屏幕驱动:
https://github.com/libdriver/ssd1306
1306驱动和1312是一样的,只不过1312默认是镜像的


UI元素:
-------------------
1. 不同大小的字体
2. 进度条
3. [X]
4. APP
-------------------


1. 进度条
2. 圈,x
3. 时间
4. LOGO
5. [X]
6. HR
7. APP查看结果
8. 年月日/时分秒
9. 不同大小的字体


xxx
+xx


     LOGO
     进度条

    年月日
      时分秒

    
    保持静止
    ___________
    [=====     ]
    ------------

    心电图
    [=====     ]

        [X]
     不足30秒
    
    正在保存
    [=====     ]

    APP
    查看结果
存储:
1帧
2byte
200帧
400byte 
1秒
400byte
30秒
12kbyte
120秒
48kbyte

----------------------------
2Mbit
256Kbyte

640秒 /120 = 5条记录

256kbyte

256byte索引

[
   ID:[年月日]
   packetOFF:[]
   usage[]:
   date:[]
]
48kbyte --> 一个扇区

256/4k = 64个扇区 10s数据

openStorage(年月日)
writeData(){

// 数据量是否大于最大数值

// 是否还有空间
// 擦除旧的空间
// 写入数据
// 写入缓存

// 是否刷新缓存?

找到空闲扇区,写入数据。
找不到空闲扇区,按照顺序释放旧的扇区
重新寻找扇区
}

// 倍数读取
readData(){
        1. 判断数据在哪个扇区
        3. 读取扇区数据信息
        2. 读取数据
        3. 拷贝数据
}

// Header

[
        usage:
        fileHeaderdata:
        fileId:
        dataoff:
        datalen:
]

{
        fileUUID:年月日时分秒
        sector:[1,2,3,4,5]
        datalen: 100
        //分辨率
        //总时长
        //采样率
}


硬件异常:
        1. eeprom读写失败
        2. 电池电量低
编程注意事项:
1. 使用了app_timer后,如果在系统中某个位置延时时间过程,会导致系统重启

TODO:
1. eeprom的文件扇区信息没有存储,也就是说每次电池用没了之后,数据会丢失
2. 如果要实现不丢数据,需要在eeprom中存储文件扇区信息,同时由于扇区的大小大于256字节,所以需要优化eeprom的写入函数。

单导蓝牙使用注意事项:

        1. 开机后
                开启广播
        2. 关机
                关闭广播
        关机条件:
                1. 蓝牙断开
                2. 设备未操作
                3. 30s内无任何蓝牙指令(连接)


        1. 蓝牙的广播的启停独立控制和设备开机关机逻辑分开
                开启广播:开机时候,如果当前没有开启广播,则打开广播
                关闭广播: 关机后30s内无连接关闭广播
                         断开连接后30s关闭广播

        2. 蓝牙状态指示灯:
                1. 蓝牙广播打开:指示灯闪烁
                2. 蓝牙广播关闭:指示灯关闭

        3. 采样时不支持电量上报
        4. 采样时不支持记录查询相关指令
        5. 不支持删除采样记录

任务:
       16. 解决断开连接,再次唤醒,屏幕无显示的BUG OK
        1. 提取休眠时间到宏配置中 OK
        9. 支持数据上报
       12. 支持数据上传
        6. 支持电池电量采集
        8. 采集完30秒,蜂鸣器滴一声,采集完成,蜂鸣器滴一声
       13. 支持低电量事件
       14. 支持掉落事件
       15. 检查设备状态

        2. UI添加蓝牙状态
        3. UI添加上传状态
        4. UI添加心率计算
        5. UI添加心脏跳动效果
        7. 校准电池电量采集
       10. 添加OTA支持
       11. 数据掉电不丢失