Комбинации нажатой кнопки

Тема в разделе "Закажу проект", создана пользователем Crazyday, 25 янв 2016.

  1. DrProg

    DrProg Вечный нерд

    А с этим какие проблемы? Ждет нажатия, как дождалась записывает мс в очередную переменную массива, счетчик увеличивает на один, ждет отжатия, как дождался записывает и так по кругу.
     
  2. Crazyday

    Crazyday Нерд

    Можно это в коде описать. Пожалуйста
     
  3. DrProg

    DrProg Вечный нерд

    Попробую, но позже, или ночью или завтра.
     
  4. Crazyday

    Crazyday Нерд

    буду благодарен
     
  5. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    Можете в гугле мосмотреть о pulseIn()
     
  6. Crazyday

    Crazyday Нерд

    Она выдает какие - то случайные значения
     
  7. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    она измеряет в микросекундах, чтоб получились миллисекунды надо /1000
     
  8. Crazyday

    Crazyday Нерд

    Она не может принимать нажатия дольше 500 мс
     
  9. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    http://arduino.ru/Reference/PulseIn
     
  10. Crazyday

    Crazyday Нерд

    Вот прошу, нажимал кнопку с разным интервалом
    Где 0 нажимал больше 1 секунды.
    Вот код
    Код (C++):

    unsigned long duration;
    void setup()
    {
      pinMode(7, INPUT_PULLUP);
      Serial.begin(9600);
    }
    void loop()
    {
      duration = pulseIn(7, LOW);
      duration = (duration / 1000);
      Serial.println(duration);
    }
     
     
  11. Максимус-Бог

    Максимус-Бог Убийца матрёшек

    ну тогда не знаю
     
  12. Crazyday

    Crazyday Нерд

    Сейчас почитал на сайте и нашел такую строку
    Сейчас поменяю и посмотрю на результат.

    И ведь действительно работает, но с небольшими погрешностями. Сейчас попробую с массивом поиграть. Может получится что - то
     
  13. Crazyday

    Crazyday Нерд

    На нажатие работает, светодиод горит, с той задержкой которую задал кнопкой. Осталось придумать на отжатие кнопки
    Код (C++):
    int pin = 7;
    int cli, fo, On = 1;
    int clicks[20];
    unsigned long duration;

    void setup()
    {
      pinMode(pin, INPUT_PULLUP);
      pinMode(6, INPUT_PULLUP);
      pinMode(13, OUTPUT);
      Serial.begin(9600);
      Serial.println(On);
    }

    void loop()
    {

      if (!digitalRead(6)) {
        On = (On * -1);
        Serial.println(On);
      }
      if (On == 1) {
        cli++;
        duration = pulseIn(7, LOW);
        duration = (duration / 1000);
        Serial.println(duration);
        clicks[cli] = duration;
      }
      if (On == -1) {
        Serial.println(clicks[fo]);
        digitalWrite(13, HIGH);
        delay(clicks[fo]);
        digitalWrite(13, LOW);
        fo++;
        delay(1000);


      }

    }
     
     
  14. DrProg

    DrProg Вечный нерд

    Зачем вам микросекунды? Вместо pulsein написать свою функцию, вместо unsigned long достаточно unsigned int если не планируются паузы длиннее 1 минуты. Хотел написать свой вариант, но к сожалению все время сегодня потратил на другую задачу и уже хочу спать. Если актуально, попробую завтра.
     
  15. Crazyday

    Crazyday Нерд

    При использовании unsigned int выдаёт случайные значения.
     
  16. Crazyday

    Crazyday Нерд

    Каким образом выполнять одновременно 2 действия на Arduino? Кто знает помогите
     
  17. Mestniy

    Mestniy Гуру

    На одной ардуине никак. Если вы про мгновенное одновременное выполнение. Ардуина выполняет последовательность комманд. Хотя я не уверен, что вы заметите отстование одного действия от другого на мск.:)
     
  18. Mestniy

    Mestniy Гуру

    Вы проведите эксперемент. Подключите 2 светодиода на пин 2,3. Потом запустите этот скетч. Заметите отставание?
    Код (C++):
    int led1 = 2;
    int led2 = 3;
    void setup()
    {
    pinMode(led1, OUTPUT);
    pinMode(led2, OUTPUT);
    }
    void loop()
    {
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    delay(2000);
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    delay(2000);
    }
     
  19. Onkel

    Onkel Гуру

    по идее можно запускать сразу оба выхода одной однотактной командой
    PORTD|=0x0С;
    тогда оба светоидода загорятся СТРОГО одновременно, с точностью до 10 пс
    надо только префикс из wiring знать, я не в курсе.
     
  20. Crazyday

    Crazyday Нерд

    А если например. Большое условие с функцией delay. И надо, чтобы работал одновременно 2 скрипт без задержки. То как это реализовать