Прошу вашей помощи!

Тема в разделе "Arduino & Shields", создана пользователем Oksy, 7 дек 2020.

  1. Oksy

    Oksy Нерд

    • 5.1. Не создавайте темы с малопонятным содержанием.
    Доброго времени суток!!! Я новичок в этой теме и поэтому прошу Вашей помощи, есть задача сделать управления нагрузкой по условию:
    если нажата кнопка 1
    включается действие 1.
    включается действие 2 на "А" сек.
    включается действие 3:
    если кнопка 2 не нажата, действие 3 постоянно
    если кнопка 2 нажата, действие 3 длиться "В" сек.
    при отпускании кнопки 1 действие 1 длиться "С" сек.
    "А","В","С" переменные, они берутся с аналоговых входов и с помощью функции map, переводятся в нужный интервал, С переменными я разобрался а условие поставило меня в тупик, прошу Вашей помощи.
     
  2. Рокки1945

    Рокки1945 Гуру

    Сколько раз было мужики подходили старые электронщики - надо сделать при наступлении заранее выставленного времени на выходе в течение 3 секунд единица, потом опять ноль, на другом выводе инверсно и т.д. Но они хотя бы это понятно могли изложить, а тут я даже на свежую голову не могу врубиться действительно - "Прошу Вашей помощи".
     
  3. fogary

    fogary Гик

    Условие "кнопка нажата" срабатывает все время пока нажата кнопка, или один раз при изменении статуса?
     
  4. Igor68

    Igor68 Гуру

    - Петька! Прибор...
    - Пятнадцать.
    - Что пятнадцать?
    - А что прибор?
    :D:D:D
     
  5. Igor68

    Igor68 Гуру

    Код (C++):

    //определение переменных времени(если прочитаны то уже есть)
    int Asec;
    int Bsec;
    int Csec;
    //присвоена кнопка(некий код кнопки) - прочитано где-то и присвоен код
    #define _Key1 1
    #define _Key2 2
    //тут код кнопки - где-то прочитан/присвоен
    int key;
    switch(key) {
      case _Key1:
         //активируем действие 1
         sleep(Asec);
         //деактивируем действие 1
         break;
      case _Key2:
         //активируем действие 2
         sleep(Bsec);
         //деактивируем действие 2
         break;
      default:
         //активируем действие 3
         sleep(Csec);
         //деактивируем действие 3
        break;
    }
     
    Каков вопрос, таков и ответ. Вместо sleep у Вас возможно wait или что-то иное... для GCC это sleep(sec) в секундах.
    Я конечно понимаю, что контрольная или что-то иное... но всё равно не ясно что надо.
     
  6. Oksy

    Oksy Нерд

    иметься 3 таймера А, В и С, каждый таймер определяет длительность своей операции, как только нажали кнопку "1" и удерживаем стартуют все операция "1", "2"(время работы определяется таймером "А"), "3"(если кнопка "2" не нажата, операция выполняется пока нажата кнопка "1", если кнопка "2" нажата время операции зависит от таймера "В"), как только отпустили кнопку "1" операции "2" и "3" отключаются ,а операция "1" длиться в зависимости от таймера "С".
     
  7. a1000

    a1000 Гуру

    Всёравно туманно и запутанно. Что значит "выполняется операция". Это какое-то единичное действие, типа установить единицу на выводе, или это будет постоянно грузить процессор? Нодо ведь ещё постоянно отслеживать состояние кнопок.
    А что делать если время С не истекло а кнопка 1 нажата. Перезапускать или ждать завершения временного интервала С?
    Объясните что вы строите, тогда вам быстрее помогут.
     
  8. Oksy

    Oksy Нерд

    перезапускается, Собирается осциллятор,
    1 операция - предгаз
    2 операция - запуск осциллятора.
    3 операция - запуск ММА аппарата.
     
  9. fogary

    fogary Гик

    Вопрос был примерно про следующее:
    В бесконечном цикле проверяется состояние кнопки1.
    Вариант 1
    При каждом прохождении цикла, пока нажата кнопка1, операции 1, 2 и 3 постоянно перезапускаются.
    Вариант 2
    При каждом прохождении цикла, пока нажата кнопка1, операции 1, 2 и 3 не перезапускаются, если они уже запущены или отработали заданное время.

    Заодно вопрос. Состояние кнопки2 учитывается и в процессе удержания кнопки1, или только на момент нажатия кнопки1?
     
  10. Oksy

    Oksy Нерд

    Вариант 1. Состояние кнопки2 учитывается при удержании кнопки1
     
  11. fogary

    fogary Гик

    В чем тогда разница между "действие выполняется постоянно" и "действие выполняется в течении времени", если оно постоянно перезапускается?
     
  12. Oksy

    Oksy Нерд

    Если действие выполняется в течении времени это так называемый импульсный режим с регулировкой времени импульса.
     
    Последнее редактирование: 10 дек 2020
  13. fogary

    fogary Гик

    Короче - ясно, что ничего не ясно (для меня).

    Как-то так, что ли хотите?
    Если допустить, что действие - это функция, а аргумент функции - заданное время (если не указано - ограничения по времени нет).
    Кнопки в отжатое состояние - состояние LOW.
    Код (C++):
    void loop() {
      static bool prev_btn_state = LOW;

      if (digitalRead(BTN1_PIN) == HIGH) {
        prev_btn_state = HIGH;
        action1();
        action2(time_A);
        if (digitalRead(BTN2_PIN) == HIGH) {
          action3(time_B);
        } else {
          action3();
        }
      } else {
        if (prev_btn_state == HIGH) {
          prev_btn_state = LOW;
          action1(time_C);
        }
      }
    }
     
    Последнее редактирование: 11 дек 2020
  14. fogary

    fogary Гик

    В каком смысле как?
     
    parovoZZ нравится это.
  15. Oksy

    Oksy Нерд

    Всем спасибо!!! Отдельное СПАСИБО Евгению. Тема закрыта.