Skip to content

Instantly share code, notes, and snippets.

@kkmonster
Last active August 29, 2015 14:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kkmonster/d13060a3a5f028031d9c to your computer and use it in GitHub Desktop.
Save kkmonster/d13060a3a5f028031d9c to your computer and use it in GitHub Desktop.
retrun 6 state by 2 button
uint8_t read_button()
{
static boolean hold; // reset timer
static boolean button_a_state_prev; // hold a
static boolean button_b_state_prev; // hold b
static unsigned long button_a_time_prev; // timer a
static unsigned long button_b_time_prev; // timer b
boolean button_a_state = 1-digitalRead(button_a); //pull up
boolean button_b_state = 1-digitalRead(button_b); //pull up
unsigned long time = millis(); // update time
if (button_a_state_prev == 0 && button_a_state == 1)
{
button_a_time_prev = time;
hold = 1 ;
}
if (button_b_state_prev == 0 && button_b_state == 1)
{
button_b_time_prev = time;
hold = 1 ;
}
if (hold==1)
{
if (button_a_state_prev == 1 && button_a_state == 0)
{
hold = 0;
button_a_state_prev = button_a_state ;
button_b_state_prev = button_b_state ;
return 1;
}
if (button_b_state_prev == 1 && button_b_state == 0)
{
hold = 0;
button_a_state_prev = button_a_state ;
button_b_state_prev = button_b_state ;
return 2;
}
if ((time - button_a_time_prev > 1000) && (button_a_state == 1))
{
hold = 0;
button_a_state_prev = button_a_state ;
button_b_state_prev = button_b_state ;
return 3;
}
if ((time - button_b_time_prev > 1000) && (button_b_state == 1))
{
hold = 0;
button_a_state_prev = button_a_state ;
button_b_state_prev = button_b_state ;
return 4;
}
if (button_a_state == button_b_state)
{
hold = 0;
button_a_state_prev = button_a_state ;
button_b_state_prev = button_b_state ;
return 5;
}
}
button_a_state_prev = button_a_state ;
button_b_state_prev = button_b_state ;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment