Как с помощью сигнала HIGH на pin прибавлять к переменной int?

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем ToxaRU, 17 май 2015.

  1. ToxaRU

    ToxaRU Гик

    Как с помощью сигнала HIGH на pin прибавлять или убавлять(сигнал на другой пин) к переменной int скетча определенное число и ограничить это число 360, чтобы после 360 шло не 361, а 1?

    ну понятно что декларируем пины, ставим их на прием.... а дальше?
     
  2. ANV

    ANV Гуру

    Вы алгоритм напишите словами. Например "если на пине 3 HIGH, то...." А еще лучше для себя же нарисуйте его на бумажке. После того как нарисуете, код сам собой напишется :)
     
  3. ToxaRU

    ToxaRU Гик



    1.Если на пин X(любой) подали HIGH, то к переменной int dir = 180 прибавляется 10
    2.Если на пин X(любой) подали HIGH, то от переменной int dir = 180 убавляется 10
    3. при переходе в плюс через 360 градусов должно переходить не на 361 а на 1
    4.при переходе в минус через 0 не -1 а 359

    переменная в скетче указывает направление на которое настраивается система
     
  4. Tomasina

    Tomasina Сушитель лампочек Модератор

    чем 1 от 2 отличается?
    п. 3 и 4 - ноль используется?
     
    Последнее редактирование: 17 май 2015
  5. ToxaRU

    ToxaRU Гик

    разные пины
     
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    тогда "на пин Y" ;)

    Без оптимизации, тупо и наглядно:
    Код (Text):
    #define XX 2 // XX подключен к пину 2
    #define YY 3 // YY подключен к пину 3
    const int step = 10; // шаг приращения
    const int max = 360; // максимум
    const int min = 0; // минимум
    int dir; // переменная, хранящая направление

    void setup()
    {
      pinMode(XX, INPUT_PULLUP); // пин подключен напрямую, без резистора, поэтому используем внутреннюю подтяжку
      pinMode(YY, INPUT_PULLUP);
      dir = 180; // задаем уставку по умолчанию
    }

    void loop()
    {
      if(!digitalRead(XX)) // если на пин XX подали HIGH
      {
        dir = dir + step; // прибавляем 10
      }

      if(!digitalRead(YY)) // если на пин YY подали HIGH
      {
        dir = dir - step; // убавляем 10
      }

      if(dir > max) // проверяем выход за пределы верхней границы
      {
        dir = dir - max;
      }

      if(dir < min) // проверяем выход за пределы нижней границы
      {
        dir = max - dir;
      }

      if(dir == max) // корректируем непонятки с 360 и 0 (один и тот же угол)
      {
        dir = min;
      }

    }
    С оптимизацией это все займет одну строчку, но не для новичков :)
     
    Последнее редактирование: 17 май 2015
    ToxaRU нравится это.
  7. ToxaRU

    ToxaRU Гик


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

    Только не совсем понял, при переходе допустим 355 на 5 градусов сбоя не будет? на 360 не остановится, там же прописано максимумом?
     
    Последнее редактирование: 17 май 2015
  8. Tomasina

    Tomasina Сушитель лампочек Модератор

    А ты циферки подставь и на бумажке напиши ;)
    355+5=360; 360=0.
     
    ToxaRU нравится это.
  9. ToxaRU

    ToxaRU Гик


    Ступил))))) Я имел ввиду 355 нажал прибавилось 10 .... ну и на 360 остановится? или до 5 градусов поедет? 360=0 это я видел-просто как это работает не уверен-вот и переспросил)))
     
  10. Tomasina

    Tomasina Сушитель лампочек Модератор

    А ты циферки подставь и на бумажке напиши ;)
    355+10=365; 365>max; 365-360=5.
     
    ToxaRU нравится это.
  11. ToxaRU

    ToxaRU Гик

    Понял))) Спасибо)))
     
  12. ToxaRU

    ToxaRU Гик


    Эх скоро закручу я своей антенкой))))