你有没有想过记录你的点击?无论您是在数数、为您的马拉松比赛计时还是只是为了好玩,我都在不到十分钟的时间内完成了这个很酷的小项目。我使用连接到按钮的 Hexabitz uSD 卡模块 (H1BR60),并由纽扣电池座模块 (H04R20) 供电。点击愉快!
这个项目是一个电池供电的点击记录器。您将获得有关点击的视觉指示和美元卡日志。它使用 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后,按钮状态将在记录后自动重置。以下是基于样本的日志的样子:
您还可以通过将索引列格式参数替换为 FMT_TIME 来记录时间戳,如下所示:
if ( CreateLog("Click Logger", EVENT, 10, FMT_TAB, FMT_TIME, "Sample @ 10Hz") == H05R0_OK )
你得到这个日志:
。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !