Управление одной кнопкой тремя реле

Етить-колотить!
И у меня теперь тоже такие цифры. Ну не мог же я 1408 с 1380 спутать?!

Еще один интересный факт. Если в 74 строке изменить

cur_rele = (cur_rele++) % r_count;

на

cur_rele = (cur_rele++) % (r_count - 1);

то объем уменьшится с 1396 байт до 1368 байт. Хотя (казалось бы) особо ничего не поменялось, так как r_count константа и (r_count - 1) тоже константа того же типа.
И вроде бы можно радоваться, но тогда формула становится не верной :smiley:

Не пойму что-то, зачем выключать все реле, если фиксируем короткое нажатие?

P.S. Не сразу понял задачу, извиняюсь. Предполагается что реле Р3 включается только на короткое время. И за это время короткого нажатия не будет.

увы по какой то причине то не заработало так как планировал.
воспользовался стандартной библиотекой, вроде что-то похоже получилось но с двойным кликом - что тоже подходит.

#include “Arduino.h”

// ------- Specify not required features before including the EButton.h --------
#define EBUTTON_SUPPORT_TRANSITION_DISABLED
#define EBUTTON_SUPPORT_EACH_CLICK_DISABLED
#define EBUTTON_SUPPORT_DONE_CLICKING_DISABLED
//#define EBUTTON_SUPPORT_SINGLE_AND_DOUBLE_CLICKS_DISABLED
//#define EBUTTON_SUPPORT_LONG_PRESS_START_DISABLED
#define EBUTTON_SUPPORT_LONG_PRESS_DURING_DISABLED

#define RELE1_PIN 2 // Реле 1
#define RELE2_PIN 3 // Реле 2
#define RELE3_PIN 4 // Реле 3
#define SHORT_TIME 3000
#define BUTTON_PIN 12

#include “EButton.h”
unsigned long time1;

EButton button(BUTTON_PIN);

void singleClick(EButton &btn) {
Serial.println(“We have a click!”);
releOff ();
digitalWrite(RELE1_PIN, HIGH);
time1 = millis();
}

void doubleClick(EButton &btn) {
Serial.println(“We have a double click!”);
releOff ();
digitalWrite(RELE2_PIN, HIGH);
time1 = millis();
}
void longClick(EButton &btn) {
Serial.println(“We have a long click!”);
releOff ();
digitalWrite(RELE3_PIN, HIGH);
time1 = millis();
}

void setup() {
Serial.begin(9600);
button.attachSingleClick(singleClick);
button.attachDoubleClick(doubleClick);
button.attachLongPressStart(longClick);
Serial.println(“\nClick or double-click!”);
}
void releOff () {
digitalWrite(RELE1_PIN, LOW);
digitalWrite(RELE2_PIN, LOW);
digitalWrite(RELE3_PIN, LOW);
}

void loop() {
button.tick();
if (millis() - time1 > SHORT_TIME ){
releOff ();

}
}