667|3

1824

帖子

3

资源

版主

【环境专家之智能手表】Part10:状态灯及模式切换 [复制链接]

1.介绍

NFC功能先掠过,先写一个简单的功能,状态灯和模式切换,为什么需要状态灯,是因为【RSL10-SENSE-GEVK】板不方便外接显示模块,刚好板载一个RGB灯,刚好就拿这个RGB灯作为指示状态,而且还比较低功耗。

2.设计

由于用的是RGB灯,不能直接展示出用户想要的信息,那么就可以通过一些闪烁的方式来表示一些状态,根据自己需要的状态,定义了如下图1的对应表格:

1.png

图1

状态不多,灯也够用,后期要添加也足够。闪烁方式对应的状态表已经好了,那么就来实现吧,首先定义了一个枚举用于表示状态。

typedef enum
{
	LED_NO_STATUS = 0,
	LED_SWITCH_NORMAL,
	LED_BLE_CONNECT,
	LED_BLE_DISCONNECT,
	LED_SET_SUCCESS,
	LED_WITCH_DOWNHOLE,
	LED_DOWNHOLE_NORMAL,
	LED_DOWNHOLE_ALARM,
	LED_DOWNHOLE_HELP,
}status_led_t;

一共是九种状态,有一个是无状态,有了状态之后,需要有一个状态设置接口,如下定义:

void status_led_set(status_led_t now_status)
{
	runing_status = now_status;
	runing_cnt = 0;
	LED_Off(LED_RED);
	LED_Off(LED_GREEN);
	LED_Off(LED_BLUE);
}

其中runing就是用来计数的,然后实现一个定时调用的函数就可以了,由于逻辑比较简单,下面贴出部分代码:

void status_led_runing(void)
{
	if(runing_status == LED_NO_STATUS)
		return;
	switch(runing_status)
	{
		case LED_SWITCH_NORMAL:
		{
			if(runing_cnt % 2 == 0)
				LED_On(LED_BLUE);
			else
				LED_Off(LED_BLUE);
			if(runing_cnt >= 3)
				status_led_set(LED_NO_STATUS);
			break;
		}
		case LED_BLE_CONNECT:
		{
			if(runing_cnt < 5)
				LED_On(LED_BLUE);
			if(runing_cnt >= 5)
				status_led_set(LED_NO_STATUS);
			break;
		}
		case LED_BLE_DISCONNECT:
		{
			if(runing_cnt < 5)
				LED_On(LED_RED);
			if(runing_cnt >= 5)
				status_led_set(LED_NO_STATUS);
			break;
		}
        //.......
	}
	runing_cnt++;
}

我是200毫秒调用一次【status_led_runing】函数,在蓝牙连接和断开回调中调用设置状态灯的函数即可,蓝牙连接函数为【GAPC_ConnectionReqInd】,蓝牙断开函数为【GAPC_DisconnectInd】,在该函数中调用即可。

对于状态切换,我这里采用两个按键,按键0长按3秒切换到正常模式,按键1长按3秒切换到下井模式,最终展示出来的效果如下图所示。

2.gif

图2 蓝牙连接和断开测试

3.gif

图3 模式切换

可以对照图1的表格观看GIF图片。

3.总结

状态灯这个设计其实不难,但是也是需要的,因为没有屏幕只能通过这个进行人机交互,对于模式切换,考虑到手表不是下井时才佩戴,日常也可以进行佩戴,所以加入了这么一个机制。


回复

951

帖子

18

资源

一粒金砂(高级)

学习了,不错


回复

79

帖子

4

资源

一粒金砂(中级)

请问手机用的是什么app?

点评

nRF connect  详情 回复 发表于 2021-7-1 19:19
个人签名尽吾志也而不能至者,可以无悔矣。——王安石

回复

1824

帖子

3

资源

版主

yilonglucky 发表于 2021-7-1 09:20 请问手机用的是什么app?

nRF connect


回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表