You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
1.8 KiB
C
110 lines
1.8 KiB
C
#include "multi_button.h"
|
|
|
|
typedef enum {
|
|
BUTTON_ID_0,
|
|
BUTTON_ID_2,
|
|
|
|
BUTTON_ID_MAX
|
|
|
|
} BUTTON_ID_INDEX;
|
|
|
|
struct Button btnGroup[BUTTON_ID_MAX];
|
|
uint8_t btnActiveLevel[BUTTON_ID_MAX] = {0, 0};
|
|
|
|
uint8_t read_button_level()
|
|
{
|
|
uint8_t code = 0x01;
|
|
for (size_t i = 0; i < BUTTON_ID_MAX; i++)
|
|
{
|
|
if (get_button_current() == &btnGroup[i])
|
|
{
|
|
switch (i)
|
|
{
|
|
case BUTTON_ID_0:
|
|
code = HAL_GPIO_ReadPin(B1_GPIO_Port, B1_Pin);
|
|
break;
|
|
case BUTTON_ID_2:
|
|
code = HAL_GPIO_ReadPin(B2_GPIO_Port, B2_Pin);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return code;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
static uint8_t btn_event_val[BUTTON_ID_MAX] = {NONE_PRESS, NONE_PRESS};
|
|
|
|
for (size_t i = 0; i < BUTTON_ID_MAX; i++)
|
|
{
|
|
button_init(&btnGroup[i], read_button_level, btnActiveLevel[i]);
|
|
|
|
button_start(&btnGroup[i]);
|
|
}
|
|
|
|
// make the timer invoking the button_ticks() interval 5ms.
|
|
// This function is implemented by yourself.
|
|
__timer_start(button_ticks, 0, 5);
|
|
|
|
while (1)
|
|
{
|
|
for (size_t i = 0; i < BUTTON_ID_MAX; i++)
|
|
{
|
|
if (btn_event_val[i] != get_button_event(&btnGroup[i]))
|
|
{
|
|
btn_event_val[i] = get_button_event(&btnGroup[i]);
|
|
|
|
if (btn_event_val[i] == PRESS_DOWN)
|
|
{
|
|
switch (i)
|
|
{
|
|
case BUTTON_ID_0:
|
|
// do something
|
|
break;
|
|
case BUTTON_ID_2:
|
|
// do something
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else if (btn_event_val[i] == PRESS_UP)
|
|
{
|
|
switch (i)
|
|
{
|
|
case BUTTON_ID_0:
|
|
// do something
|
|
break;
|
|
case BUTTON_ID_2:
|
|
// do something
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
else if (btn_event_val[i] == LONG_PRESS_HOLD)
|
|
{
|
|
switch (i)
|
|
{
|
|
case BUTTON_ID_0:
|
|
// do something
|
|
break;
|
|
case BUTTON_ID_2:
|
|
// do something
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|