Плследовательное нажатие кнопок

xblazelx

✩✩✩✩✩✩✩
2 Июл 2024
2
0
Доброго времени суток. Я новичек и прошу помощи у опытных.
Стоит задача последовательное нажатие 2х кнопок. При нажатии и удержании кн1 и затем через заданное время нажатии и удержании кн2, срабатывало реле. И также только в обратной последовательности реле выключалось..
Желательно пример кода на последовательное нажатие. Спасибо.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
509
81
@xblazelx, здеся так не работают. Вы что то начинаете, собираете, рисуете код и вам расскажут , где косяк. Можно конечно в раздел ищу разработчика, но с таким пустяком вряд ли найдётся желающий.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,222
1,291
Москва
Следует более точно описать что подразумевается под удерживанием, заданным временем. А лучше словами опишите с указанием интервалов последовательность действий для включения. Прям возьмите 2 кнопки и сделайте так, как надо и запишите это.
 

xblazelx

✩✩✩✩✩✩✩
2 Июл 2024
2
0
C++:
#include <Arduino.h>
#include <EncButton.h>
#define RELAY_IN 5
#define EB_DEB_TIME 100
Button btn1(3);
Button btn2(4);


void setup() {
  Serial.begin(9600);
  pinMode(RELAY_IN, OUTPUT);
  //pinMode(3, INPUT_PULLUP);
  //pinMode(4, INPUT_PULLUP);
}
void loop() {
    btn1.tick();
    btn2.tick();
    if (btn1.pressing()){
          if (btn1.pressing() && btn2.pressing() && !btn1.release() ){
            digitalWrite(5, HIGH);
          }
          else if(btn1.pressing() && btn2.pressing() && !btn2.release()) {
            digitalWrite(5, LOW);
          }
          else {
            digitalWrite(5, LOW);
            }
        }
    }
Мне поставили задачку. Нужно сделать контроллер который будет отслеживать состояние 2-х фотоэлементов, установленных вдоль железной дороги, чтобы отслеживать проехал поезд в одну сторону, замкнуть реле для сигнализации идущего поезда. т.е. последовательно стработал фотоэлемент 1 -> 2 замыкаем реле на сигнализацию поезда. Затем поезд выезжает с территории предприятия, пересекает фотоэлементы 2 - > 1, тогда выключаем сигнализацию о поезде.

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

Торможу, никак не пойму как мне описать алгоритм. Прошу помощи. Спасибо.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,222
1,291
Москва
Это фактически идет работа энкодера. Посмотрите описания работы с ним.
Единственное что надо будет продумать как выключать реле , т.к. движение состава с вагонами в одну сторону даст несколько команд , и выключать надо исходя из пауз относительно последнего импульса.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
413
126
@xblazelx,
Чтобы осознано пользоваться библиотекой EncButton.h , надо прочитать и понять ее описание.
btn1.pressing() - это состояние. btn1.release() - это событие. Нет смысла проверять release() если известно, кнопка сейчас нажата.
Совет
  • Используйте пока только btn.pressing - это состояние - нажата сейчас кнопка или не нажата.
  • Добавляйте комментарии, и внимательно проверяйте - соответствуют ли они коду.

(Возможно более полезно было бы написать свою функцию определения нажатия.)
И в целом, перед тем как дать вам задание, наверное был какой то учебный план, уроки и т.д.
Учиться по советам на форуме, не лучший вариант.