//[email protected]
const int button = 2;
const int led1 = 12;
const int led2 = 11;
const int led3 = 10;
unsigned long time1 ; //couter to check
unsigned long time2 ; //counter to check
unsigned long time3 ; //time1 - time2
unsigned long time4 = 250; //click check maximum for click, minimum for long click
unsigned long time5 = 1000; //click check maximum for long click
unsigned long time6 = 1000; //click check duration
int mode = 0;
int buttonpressed = LOW;
int clickedcount = 0;
int longclickedcount = 0;
int alreadypressed = LOW;
int alreadyreleased = HIGH;
int alreadyaddedaclick = LOW;
int alreadyaddedalongclick = LOW;
void setup() {
pinMode(button, INPUT_PULLUP);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
Serial.begin(9600);
}
void loop() {
buttonpressed = digitalRead(button);
//Serial.println(buttonpressed);
if (buttonpressed == LOW && alreadypressed == LOW) { //pressed
time1 = millis(); // save time 1 when pressed
alreadyreleased = LOW;
alreadypressed = HIGH;
delay(50); // keep this delay for stability
}
if (buttonpressed == HIGH && alreadyreleased == LOW){ //released
time2 = millis();
alreadyaddedaclick = LOW;
alreadyaddedalongclick = LOW;
alreadyreleased = HIGH;
alreadypressed = LOW;
delay(50); // keep this delay for stability
}
time3 = time2 - time1; // DEFINITION OF time3 - DONT CHANGE THIS
if (time3 >= 0 && time3 <= time4 && time1 !=0){ //check the click in range
if (alreadyaddedaclick == LOW){
clickedcount = clickedcount + 1; //add one to click
alreadyaddedaclick = HIGH;
Serial.print("clickedcount: ");
Serial.println(clickedcount);
}
}
if (time3 >= time4 && time3 <= time5){ //check the click in range
if (alreadyaddedalongclick == LOW){
longclickedcount = longclickedcount + 1; //add one to long click
alreadyaddedalongclick = HIGH;
Serial.print("longclickedcount: ");
Serial.println(longclickedcount);
}
}
if (clickedcount == 0){ //set the mode according to click count
mode = 0;
}
if (clickedcount == 1){
mode = 1;
}
if (clickedcount == 2){
mode = 2;
}
if (clickedcount == 3){
mode = 3;
}
if (clickedcount == 4){
mode = 4;
}
if (clickedcount == 5){
mode = 5;
}
if (clickedcount == 6){
mode = 6;
}
if (clickedcount == 7 || clickedcount >= 7){
Serial.println("too many clicks there buddy ^^,");
mode = 0;
}
if (longclickedcount == 1){
mode = 7;
}
if (longclickedcount == 2){
mode = 8;
}
if (millis() - time2 >= time6){ // Wait for time to expire before executing mode
if (mode == 1){
digitalWrite(led1, HIGH);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
Serial.println("mode: 1");
mode = 0;
}
if (mode == 2){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, LOW);
Serial.println("mode: 2");
mode = 0;
}
if (mode == 3){
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
Serial.println("mode: 3");
mode = 0;
}
if (mode == 4){
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
digitalWrite(led3, HIGH);
Serial.println("mode: 4");
mode = 0;
}
if (mode == 5){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
Serial.println("mode 5");
mode = 0;
}
if (mode == 6){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
Serial.println("mode 6");
mode = 0;
}
if (mode == 7){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led1, HIGH);
delay(200);
digitalWrite(led1, LOW);
digitalWrite(led2, HIGH);
delay(200);
digitalWrite(led2, LOW);
digitalWrite(led3, HIGH);
delay(200);
digitalWrite(led3, LOW);
Serial.println("mode 7");
mode = 0;
}
if (mode == 8){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led3, HIGH);
delay(200);
digitalWrite(led3, LOW);
digitalWrite(led2, HIGH);
delay(200);
digitalWrite(led2, LOW);
digitalWrite(led1, HIGH);
delay(200);
digitalWrite(led1, LOW);
Serial.println("mode 8");
mode = 0;
}
longclickedcount = 0;
clickedcount = 0;
}
}
1 click, 2 click, 3 click, 4 click, 5 click, 6 click, long click and double long click