автоматика ворот

Тема в разделе "Arduino & Shields", создана пользователем Адам, 10 мар 2017.

?

Как правильно?

Голосование закрыто 11 ноя 2018.
  1. Скетч?

    100,0%
  2. Скейч?

    0 голосов
    0,0%
  3. Скретч?

    0 голосов
    0,0%
  4. Скрейтч?

    0 голосов
    0,0%
  1. b707

    b707 Гуру

    я уже все что надо поменял. просто вставь эту функцию в свой код вместо checkSwitches()
     
  2. qwone

    qwone Гик

    enum {STOP, OPEN, CLOSE}; // возможные состояния системы
    Вот только состояний системы ПЯТЬ. - стоим/ открываем двери/ открыты двери/ закрываем двери/ закрыты двери.
     
  3. Адам

    Адам Нерд

    У меня скейч работает 1) нажал кнопку открываются ворота 2 ) нажал стоп ворота 3) нажал закрываются ворота 4 ) стоп,,, далее по кругу , а во время закрытия и открытия ворот мотор работает пока концевики не подадут сигнал на стоп , то есть двигатель работает пока нет сигнала концевиках а мне надо что б мотор работал пока есть сигнал на концевиках, а при отсутствии сигнала с концевиков стоп мотор тоесть Воронина закрыта или открыта
     
  4. b707

    b707 Гуру

    Адам - вы мой код-то проверили? Он вас не устраивает?
     
  5. Адам

    Адам Нерд

     
  6. Адам

    Адам Нерд

    • проверил и работает как я хотел , вы мне помогли , хорошо что есть такие добрые люди как вы , вот еще одна проблема , когда нажимаю на кнопку антидребезгом переключается на закрытие, то на открытие ворот если ты не отпустишь кнопку свое время , то есть когда увеличиваешь время антидребезга мигалка на моргает , а нельзя сделать пока кнопка с пульта нажата , исполняется только одно действие,а то у меня когда нажимаю на кнопку переключается то на открытие то на закрытие ворот, приходится отпускать кнопку с пульта улавливая нужное направление движения воротины
     
  7. Адам

    Адам Нерд

    состояние только три а открытые и закрытые ворота это и есть стоп , как то так, но этом мне уже помогли добрые люди ))
     
  8. b707

    b707 Гуру

    завтра гляну, сегодня поздно уже
     
  9. Адам

    Адам Нерд

    Буду ждать мой друг!!!
     
  10. Un_ka

    Un_ka Гик

    Посмотрел код . Если концевики надёжные и не подведут то можно менять приведущее направление лишь после замыкания их .
     
  11. Un_ka

    Un_ka Гик

    Почему у тебя антидребезг в функции мотора?
     
  12. Un_ka

    Un_ka Гик

    Тогда нужно delay менять на конструкцию с миллис и if.
    А насчёт кнопки , то можно не опрашивать её до замыкания или размыва законцовок.
     
  13. Адам

    Адам Нерд

    Концевики щас работают нормально ,вот нажимаешь на пульт на открытие или закрытие Воротины , то перебрасывается сигнал то на закрытие то на открытие воротины если не отпустишь кнопку пульта нужное время
     
  14. Адам

    Адам Нерд

    не знаю как изменить я чайник
     
  15. parovoZZ

    parovoZZ Гуру

    купи радиокнопку, а защелку на реле любой электрик сделает. Не понимаю, зачем в такой простой задаче МК?
     
  16. Адам

    Адам Нерд

    Электрике я сам могу по шаманить ,программировании полный отстой ,у меня готовый проект на ардуино с выше указанный скетчем вот чуть изменения нужны с кнопкой пульта ,а на счёт на радиопульте с релюшками то он постоянно замкнутым бывает да на ардуино проще ,программу чуть изменить да и все
     
  17. Адам

    Адам Нерд

    То есть у меня воротина на ардуино работает давно ,вот кнопкой с пульта проблемы чуть чуть
     
  18. parovoZZ

    parovoZZ Гуру

    Сдал недавно СКУД одному заку. Он попросил радиопульт. Купили радиопульт за там семьсот рублей что ле. У меня и в мыслях не было вкрячивать туда МК. Пара минут на монтаж - дверь открывается с пульта из любого места в офисе.
     
  19. Адам

    Адам Нерд

    Фигня это все на простом пульте с релюшками без ардуино, испытано уже давно
     
  20. b707

    b707 Гуру

    вот, держи, замени на это свою функцию readButton()
    отпишись потом заработало или нет
    Код (C++):
    void readButton()
    { static bool butt_flag =0;
      static long past = 0;
    if ((millis() - past) < 20 ) return;
    if (digitalRead(BUTTON)) // если нажата кнопка
    {
    if (butt_flag) return;
    butt_flag = true;
    past = millis();
    if (state == STOP && lastDir == CLOSE) // даем команду на открытите
    {
    // lastDir = state;
    state = OPEN;
    }
    else if (state == STOP && lastDir == OPEN) // даем команду на закрытите
    {
    // lastDir = state;
    state = CLOSE;
    }
    else if (state == OPEN || state == CLOSE) // даем команду на остановку
    {
    lastDir = state;
    state = STOP;
    }
    }
    else {
    if (!butt_flag) return;
    butt_flag = false;
    past = millis();
    }
    }