Это вряд ли.
Если они сейчас начнут изучать нормальное программирование (а в 3 классе уже пора), то через 3 года будут плеваться от этого Ардублока.
lilik
16.Октябрь.2023 13:13:26
106
Можно усложнить, короткие, длинные и длиннющие нажатия переключают каждый свой светодиод.
xDriver
16.Октябрь.2023 13:19:31
107
без бЫблЫотек, я надеюсь?
lilik
16.Октябрь.2023 13:24:39
108
Исключительно на delay();… попробовал - получилось, но структура скетча: сон во сне, во время сна. Кнопка ещё должна быть приятная и навык управления не сразу формируется…
…pulseIn() бы приделать к данным опытам.
При этом “включение”, естественно, подразумевает, что каждый светодиод начинает мигать со своей частотой.
lilik
17.Октябрь.2023 08:08:12
111
Нет. Просто нажал включил, нажал выключил.
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)); //
}
}
}
…Хотя можно и мигание частотные. Тот случай когда миллис и делей вместе будут работать.
Но просто переключение лучше - игрушка “успокойка” получается.
b707
17.Октябрь.2023 08:11:44
112
Приведенный код не имеет отношения к различению короткого, длинного и длиннющего нажатия…
lilik
17.Октябрь.2023 08:15:51
113
Ну светодиод же различает когда его переключают.
Для двух. Для трёх лень снимать.
xDriver
17.Октябрь.2023 08:18:31
114
lilik , тебя тут не за новичка считают, неужели нельзя нажать пару кнопок и отформатировать код, противно смотреть.
lilik
17.Октябрь.2023 08:24:28
115
Исправил. Просто теперь я нифига не вижу
Это если умный светодиод с мобильным приложением, а так - не.
lilik
18.Октябрь.2023 08:49:10
117
ЕвгенийП:
если умный светодиод
Тогда так:
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);
}
}
Экспериментально определяем границы по дельте для своего краткого, длинного и длиннющего нажатия.
lilik
18.Октябрь.2023 13:06:17
118
Заждался.
Вот вариант с настройкой под желаемою длительность “жатия”.
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;
}
}
Green
18.Октябрь.2023 13:56:14
119
Форматирование освоено. Ничего если я чуток подправлю?)
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;
}
}
lilik
18.Октябрь.2023 14:08:23
120
Да, пожалуйста…
С delay(1); это результат чтения темы:
В мониторе порта самое моё быстрое клацанье кнопки 31 мс.