Introduction: One Button Multiple Functions !!#Arduino

About: Electronics and Automation Engineer, Game designer, Artist! EMAIL: amaraxr@gmail.com

Instead of using multiple buttons to select different function , here is a simple technique which uses only one button to select different function !!

Step 1: Components Needed

Arduino uno ,
Push button,
led !!

Step 2: Connection!!

Led to pin 13

Button to Analog 1

Step 3: Code !!


#include "OneButton.h"

// The actions I ca do...
typedef enum {
ACTION_NONE, // do nothing.
ACTION_ON, // set LED "ON"
ACTION_SLOW, // blink LED "SLOW"
ACTION_FAST // blink LED "FAST"
}
MyActions;

// Setup a new OneButton on pin A1.
OneButton button(A1, true);

MyActions nextAction = ACTION_NONE; // no action when starting

// setup code here, to run once:
void setup() {
// enable the standard led on pin 13.
pinMode(13, OUTPUT); // sets the digital pin as output

// link the myClickFunction function to be called on a click event.
button.attachClick(myClickFunction);

// link the doubleclick function to be called on a doubleclick event.
button.attachDoubleClick(myDoubleClickFunction);
} // setup


// main code here, to run repeatedly:
void loop() {
unsigned long now = millis();

// keep watching the push button:
button.tick();

// You can implement other code in here or just wait a while

if (nextAction == ACTION_NONE) {
// do nothing.
digitalWrite(13, LOW);

} else if (nextAction == ACTION_ON) {
// turn LED on
digitalWrite(13, HIGH);

} else if (nextAction == ACTION_SLOW) {
// do a slow blinking
if (now % 1000 < 500) {
digitalWrite(13, LOW);
} else {
digitalWrite(13, HIGH);
} // if

} else if (nextAction == ACTION_FAST) {
// do a fast blinking
if (now % 200 < 100) {
digitalWrite(13, LOW);
} else {
digitalWrite(13, HIGH);
} // if

} // if

} // loop


// this function will be called when the button was pressed 1 time and them some time has passed.
void myClickFunction() {
if (nextAction == ACTION_NONE)
nextAction = ACTION_ON;
else
nextAction = ACTION_NONE;
} // myClickFunction


// this function will be called when the button was pressed 2 times in a short timeframe.
void myDoubleClickFunction() {
if (nextAction == ACTION_ON) {
nextAction = ACTION_SLOW;

} else if (nextAction == ACTION_SLOW) {
nextAction = ACTION_FAST;

} else if (nextAction == ACTION_FAST) {
nextAction = ACTION_ON;
} // if
} // myDoubleClickFunction

// End

Step 4: Library !! Link

http://www.mathertel.de/Arduino/OneButtonLibrary.aspx&sa=U&ved=0ahUKEwitn4z7_cnLAhXC0iYKHWgqDecQFggfMAU&sig2=5UzHZ_hnprc_HBL7pg_4HQ&usg=AFQjCNGhorWrXney3BBtKcyids3KiI_pow