×

由电池供电的点击记录器构建

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-07-11

张敏

分享资料个

描述

你有没有想过记录你的点击?无论您是在数数、为您的马拉松比赛计时还是只是为了好玩,我都在不到十分钟的时间内完成了这个很酷的小项目。我使用连接到按钮的 Hexabitz uSD 卡模块 (H1BR60),并由纽扣电池座模块 (H04R20) 供电。点击愉快!

poYBAGOpc72ADdGlAA2hUjeBO94837.jpg
 
1 / 2
 

它是什么?

这个项目是一个电池供电的点击记录器。您将获得有关点击的视觉指示和美元卡日志。它使用 2 节串联的 CR2032 纽扣锂电池供电。他们应该持续几个小时。当然,你也可以使用其他类型的电池,但我只是把它们放在身边,想用在一些很酷的地方:) 

预计硬件构建时间:5 分钟 

预计软件开发时间:5 分钟

代码说明:

这个项目代码很简单。我定义了一个按钮和一个基于事件的日志。该按钮有两个事件回调:一个在点击时触发,另一个在3 秒按下时触发单击回调会增加一个 SRAM 变量,并在每次单击时使指示灯 LED 闪烁。每计数 10 次,LED 就会闪烁 1 秒。 

定义按钮并将其链接到它的回调,如下所示:

AddPortButton(MOMENTARY_NO, P1);               // Define a button connected to port P1
SetButtonEvents(P1, 1, 0, 3, 0, 0, 0, 0, 0);    // Activate a click event and a pressed_for_x event for 3 seconds

接下来,我创建一个基于事件的日志并记录两个变量,即按钮状态和计数器变量:

if ( CreateLog("Click Logger", EVENT, 10, FMT_TAB, FMT_SAMPLE, "Sample @ 10Hz") == H05R0_OK )
{
    LogVar("Click Logger", PORT_BUTTON, P1, "Logger");
    LogVar("Click Logger", MEMORY_DATA_UINT32, (uint32_t)&counter, "Counter");                
    // Do not reset button state after writing the log since we need it to blink LED as well!
    needToDelayButtonStateReset = true;
}

记录在第一次单击按钮时开始,并在PressedForX回调中按下按钮 3 秒时停止。按钮事件也在那里被禁用,因此您不会再看到任何日志或 LED 闪烁。

void buttonClickedCallback(uint8_t port)
{
    ++counter;
    
    if (counter == 1)    StartLog("Click Logger");
    
    if ( counter%10 == 0 ) {
        IND_blink(1000);
    } else {
        IND_blink(200);
    }
    needToDelayButtonStateReset = false;        // Reset button state now
}
void buttonPressedForXCallback(uint8_t port, uint8_t eventType)
{
    // The first PressedForX event we defined in SetButtonEvents was called    
    if (eventType == 1)
    {
        StopLog("Click Logger");
        SetButtonEvents(P1, 0, 0, 0, 0, 0, 0, 0, 0);        
        IND_blink(400); Delay_ms(400); IND_blink(400);
    }
    needToDelayButtonStateReset = false;        // Reset button state now
}

请注意我是如何使用needToDelayButtonStateReset标志来记录按钮状态并同时使用它来闪烁 LED 指示灯的。将此变量设置为false后,按钮状态将在记录后自动重置。以下是基于样本的日志的样子:

 

 
poYBAGOpc8CAWFbGAAA_thGwVd0982.png
 

 

您还可以通过将索引列格式参数替换为 FMT_TIME 来记录时间戳,如下所示:

if ( CreateLog("Click Logger", EVENT, 10, FMT_TAB, FMT_TIME, "Sample @ 10Hz") == H05R0_OK )

你得到这个日志:

 

 
pYYBAGOpc8SAfcAGAAA7bRcTbGg246.png
 

 

 

 

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !