Подскажите

Это вряд ли.
Если они сейчас начнут изучать нормальное программирование (а в 3 классе уже пора), то через 3 года будут плеваться от этого Ардублока.

Я уже боюсь.


Можно усложнить, короткие, длинные и длиннющие нажатия переключают каждый свой светодиод.

без бЫблЫотек, я надеюсь?

:slight_smile:
Исключительно на delay();… попробовал - получилось, но структура скетча: сон во сне, во время сна. Кнопка ещё должна быть приятная и навык управления не сразу формируется…

…pulseIn() бы приделать к данным опытам.

Гвозди бы делать …

При этом “включение”, естественно, подразумевает, что каждый светодиод начинает мигать со своей частотой.

Нет. Просто нажал включил, нажал выключил.

const int led_1_Pin = 5;//светодиод - короткое нажатие
const int led_2_Pin = 4;//светодиод - длинное нажатие
const int led_3_Pin = 3;//светодиод - длиннющие нажатие
const int button_PIN = 2;
void setup() {
  pinMode(button_PIN, INPUT_PULLUP); //вывод для управляющей кнопки
  pinMode(led_1_Pin, OUTPUT);
  pinMode(led_2_Pin, OUTPUT);
  pinMode(led_3_Pin, OUTPUT);
}
void loop() {
  if (digitalRead(button_PIN) == LOW) {
    delay(200);
    if (digitalRead(button_PIN) == LOW) {
      delay(200);
      if (digitalRead(button_PIN) == LOW) {
        digitalWrite(led_3_Pin, !digitalRead(led_3_Pin));
        delay(300);
      }
      else {
        digitalWrite(led_2_Pin, !digitalRead(led_2_Pin));
        delay(300);
      }
    }
    else {
      digitalWrite(led_1_Pin, !digitalRead(led_1_Pin)); //
    }
  }
}

…Хотя можно и мигание частотные. Тот случай когда миллис и делей вместе будут работать.
Но просто переключение лучше - игрушка “успокойка” получается.

Приведенный код не имеет отношения к различению короткого, длинного и длиннющего нажатия…

Ну светодиод же различает когда его переключают.
VID_20231015_201527
Для двух. Для трёх лень снимать.

lilik, тебя тут не за новичка считают, неужели нельзя нажать пару кнопок и отформатировать код, противно смотреть.

Исправил. Просто теперь я нифига не вижу :slight_smile:

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

Тогда так:

const int led_1_Pin = 5;//светодиод - короткое нажатие
const int led_2_Pin = 4;//светодиод - длинное нажатие
const int led_3_Pin = 3;//светодиод - длиннющие нажатие
const int button_PIN = 2;
long Y = 0; //
int delta = 0; //
bool FL = false; //
void setup() {
  Serial.begin(9600);
  pinMode(button_PIN, INPUT_PULLUP); //вывод для управляющей кнопки
  pinMode(led_1_Pin, OUTPUT);
  pinMode(led_2_Pin, OUTPUT);
  pinMode(led_3_Pin, OUTPUT);
}
void loop() {
  if (digitalRead(button_PIN) == LOW && FL == false) {
    Y = millis();
    FL = true;
    delay(1);
  }
  if (digitalRead(button_PIN) == HIGH && FL == true) {
    FL = false;
    delta = millis() - Y;
    Serial.println(delta);
    delay(1);
  }
}

Экспериментально определяем границы по дельте для своего краткого, длинного и длиннющего нажатия.

:slight_smile:
Заждался.
Вот вариант с настройкой под желаемою длительность “жатия”.

const int led_1_Pin = 5;//светодиод - короткое нажатие
const int led_2_Pin = 4;//светодиод - длинное нажатие
const int led_3_Pin = 3;//светодиод - длиннющие нажатие
const int button_PIN = 2;
long Y = 0; //
int delta = 0; //хранит длительность нажатия в мс
bool FL = false; //
void setup() {
  Serial.begin(9600);
  pinMode(button_PIN, INPUT_PULLUP); //вывод для управляющей кнопки
  pinMode(led_1_Pin, OUTPUT);
  pinMode(led_2_Pin, OUTPUT);
  pinMode(led_3_Pin, OUTPUT);
}
void loop() {
  if (digitalRead(button_PIN) == LOW && FL == false) {
    Y = millis();
    FL = true;
    delay(1);
  }
  if (digitalRead(button_PIN) == HIGH && FL == true) {
    FL = false;
    delta = millis() - Y;
    Serial.println(delta);
    delay(1);
  }
  if (delta > 10 && delta <= 200) {
    digitalWrite(led_1_Pin, !digitalRead(led_1_Pin));
    delta = 0;
  }
  if (delta > 200 && delta <= 400) {
    digitalWrite(led_2_Pin, !digitalRead(led_2_Pin));
    delta = 0;
  }
  if (delta > 400 && delta <= 600) {
    digitalWrite(led_3_Pin, !digitalRead(led_3_Pin));
    delta = 0;
  }
}

Форматирование освоено. Ничего если я чуток подправлю?)

const int led_1_Pin = 5;//светодиод - короткое нажатие
const int led_2_Pin = 4;//светодиод - длинное нажатие
const int led_3_Pin = 3;//светодиод - длиннющие нажатие
const int button_PIN = 2;

long y = 0; // - переменные строчными! И желательно смысловое название
int delta = 0; //длительность нажатия в мс
bool fl = false; // - аналогично. Кстати, глобальные переменные уже в 0.

void setup() {
  Serial.begin(9600);
  pinMode(button_PIN, INPUT_PULLUP); //вывод для управляющей кнопки
  pinMode(led_1_Pin, OUTPUT);
  pinMode(led_2_Pin, OUTPUT);
  pinMode(led_3_Pin, OUTPUT);
}

void loop() {
  if (digitalRead(button_PIN) == LOW && fl == false) {
    y = millis();
    fl = true;
    delay(1);  //это зачем?
  }
  if (digitalRead(button_PIN) == HIGH && fl == true) {
    fl = false;
    delta = millis() - y;
    Serial.println(delta);
    delay(1);  //аналогично
  }
  if (delta > 10 && delta <= 200) { // - 11 не мало для дребезга?
    digitalWrite(led_1_Pin, !digitalRead(led_1_Pin));
    delta = 0;
  }
  if (delta > 200 && delta <= 400) {
    digitalWrite(led_2_Pin, !digitalRead(led_2_Pin));
    delta = 0;
  }
  if (delta > 400 && delta <= 600) {
    digitalWrite(led_3_Pin, !digitalRead(led_3_Pin));
    delta = 0;
  }
}

Да, пожалуйста…
С delay(1); это результат чтения темы:

В мониторе порта самое моё быстрое клацанье кнопки 31 мс.