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

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

  1. Onkel

    Onkel Гуру

    разделить условия с установкой параметров и выполнение. Например, если нужно зажечь/погасить два светоидода, то в больших условиях выясняем и выставляем переменные led1 и led2, а после проверки больших условий в одном или двух параметрах выставляем пины по переменным led1 led2
     
  2. Limoney

    Limoney Гик

    Что вы хотите сделать?
     
  3. Crazyday

    Crazyday Нерд

    Запоминать нажатия на кнопку (не сколько раз нажата, а через какое время и на сколько), а потом при нажатии на 2 кнопку воспроизводить нажатия на светодиоде или серве
     
  4. Crazyday

    Crazyday Нерд

  5. Crazyday

    Crazyday Нерд

    Сделал второй скетч, на подсчет время отжатия. А теперь вопрос, как объединить эти скетчи в 1 и чтобы не конфликтовало и сохранялась точность.
    Код (C++):
    int cli, fo, On = 1, On1 = 1, clic;
    int clicks[1];
    unsigned long duration;

    void setup()
    {
      pinMode(7, INPUT_PULLUP);
      pinMode(6, INPUT_PULLUP);
      pinMode(5, INPUT_PULLUP);
      pinMode(13, OUTPUT);
      Serial.begin(9600);
    }

    void loop()
    {
      if (!digitalRead(7)) {
        On1 = 0;
        delay(200);
      }

      if (cli < 1) {
        if (On1 == 0) {
          if (On == 1) {
            duration = pulseIn(7, HIGH, 3000000);
            duration = (duration / 1000);
            Serial.println(duration);
            clicks[cli] = duration;
            cli++;
          }
        }
      }

    if (clicks[0] > 0) {
      if (cli == 1) {
        Serial.println("Record Finished");
        cli = 2;
      }
    } else {

            duration = pulseIn(7, HIGH, 3000000);
            duration = (duration / 1000);
            Serial.println(duration);
            clicks[0] = duration;
            cli++;
    }

      if (cli == 2) {
        if (!digitalRead(6)) {
          On = !On;
          Serial.println(On);
          delay(200);
        }
        if (On == 0) {
          clic = (clicks[0] - 5);
          Serial.print(clicks[0]);
          Serial.print("\t");
          Serial.println(clic);
          digitalWrite(13, HIGH);
          delay(100);
          digitalWrite(13, LOW);
          delay(clic);
        }
      }
    }
     
  6. Максимус-Бог

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

    я бы так написал и короче, - 1 переменная
    Код (C++):
    clicks[cli] = pulseIn(7, HIGH, 3000000) /1000;
    Чем
    Код (C++):
    duration = pulseIn(7, HIGH, 3000000);
            duration = (duration / 1000);
            Serial.println(duration);
            clicks[cli] = duration;
     
     
    Crazyday нравится это.
  7. Максимус-Бог

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

    Код (C++):

    bool state;


    for (i = 0; i < 20; i++;){
      clicks[i] = pulseIn(7, state, 3000000) /1000;
      state = !state;
    }
     
     
    Crazyday нравится это.
  8. DrProg

    DrProg Вечный нерд

    Такое вам надо?

     
    Mestniy нравится это.
  9. Mestniy

    Mestniy Гуру

    Кто-то шпионажем решился заняться? Азбука Морзе - мощная вещь!
    Но судя по возрасту Crazyday, он наверное хочет на экзаменах шпаргалки получать по такому принципу.
    А если честно, то зачем Вам это?
     
  10. DrProg

    DrProg Вечный нерд

    Например нужно передавать сигнал SOS а некогда. Один раз записал и пусть хреначит вечно. ))
     
    Mestniy нравится это.
  11. Mestniy

    Mestniy Гуру

    Ну мне кажется, что мой вариант, как-бы реальнее)))))))))))). Щас блин экзамены такие, что хоть так изощряйся!
     
  12. DrProg

    DrProg Вечный нерд

    Значит билеты выучить лень, а морзянку нет? Сомневаюсь, лень она не выбирает извилины, она косит весь мозг.
     
  13. Mestniy

    Mestniy Гуру

    Щас давно билетов нет. Дают задания и выполняй сиди. А что дадут, тут кампот-знает. Тем более лучше голову забить изобритением морзянки из ардуино, чем лить школьную воду в свой мозг. Я с вами согласен, что учить надо. Я сам сдавал без шпргалок, но блин - тут явная лень к обучению.

    Хотя мы щас тут обсуждаем его, а он правда не необитаевом осторове, на котором есть интернет, изобретает морзянку, что-бы отправить SOS, вместо того, что-бы сказать это через весь инткренет:D!!!!
     
  14. DrProg

    DrProg Вечный нерд

    Ниже код. Допилить напильником до своих потребностей не сложно. Сейчас 8 пин на кнопку морзянки, 9 на запуск вечного повтора. Для примера массив на 100 событий, можно расширить, главное чтобы в память влезло.

    Важно! программного антидребезга в примере нет, то есть записывать будет вместе с ним, что очень заметно опустошает память. Выхода два, или допилить программным антидребезгом, либо поставить на кнопку 8 аппаратный.

    Код (C++):
    unsigned int pressed[100]; // 100 событий (включая дребезг, если он есть)
    int count = 0;
    unsigned long timer;
    bool LH = 0;

    void setup() {
      // put your setup code here, to run once:
      pinMode(8, INPUT_PULLUP);
      pinMode(9, INPUT_PULLUP);
      pinMode(13, OUTPUT);
      digitalWrite(13, LOW); //ждем первого нажатия
      while (digitalRead(8));
      digitalWrite(13, HIGH);
    }

    void loop() {                          // записываем
      timer = millis();
      while (digitalRead(8) == LH) {       // ждем нажатия/отжатия
        if (!digitalRead(9)) Play();
        if (count > 99) Play();
      }
      digitalWrite(13, LH);
      pressed[count] = millis() - timer;
      count++;
      LH = !LH;
    }

    void Play() {                          // вечный повтор
      while (1) {
        LH = 1;
        int count2 = 0;
        for (int i = 0; i < count; i++) {
          digitalWrite(13, LH);
          timer = millis() + pressed[count2];
          while (timer > millis());
          count2++;
          LH = !LH;
        }
      }
    }
     
    Последнее редактирование: 28 янв 2016
  15. Onkel

    Onkel Гуру

    переведу с докторского - поставить кондер 0,1 uF
     
  16. Onkel

    Onkel Гуру

    лень- двигатель прогресса. Только в школах, например, сейчас закон божий заставляют учить (под разными названиями), да и кроме мракобесия треша полно.
    Физику, особенно оптику (а некоторым надо начать с природоведения за 4 класс) знать надо , математику, английский, а всякое словоблудие вроде уже умершей философии или , как я упоминал, мракобесия лучше и не читать вовсе, мозг он, знаете ли, не помойка.
     
  17. DrProg

    DrProg Вечный нерд

    100nF = 0.1uF - словарь с докторского на онкельский, никто бы не допер без подсказки.
    Вариант рабочего кода антидребезга через прерывания продолжаю ждать. Согласен на неадаптированную версию под С. Насчет парникового эффекта продолжаю верить что дело в разнице между лучевым и конвективным способом передачи тепла.
     
  18. DrProg

    DrProg Вечный нерд

    А верите в Дарвинскую теорию? Правда?
     
  19. ИгорьК

    ИгорьК Гуру

    Зря Вы так. Диалектика Гегеля очччень практичная штука. Жаль что ее уже многие не знают.
     
  20. Onkel

    Onkel Гуру

    теория Дарвина - не вопрос веры, а уже давно установленный и доказанный факт, не менее доказанный, чем , например, теория относительности или постулаты квантовой механики. Вы и биологию в школе тоже прогуляли? Имхо если вы таким образом "верите ли" ставите вопрос, то вам надо сходить на урок биологии в 5-6 класс.
    философия как наука умерла в 1859 году, поскольку философы перестали понимать математику, лежащую в основе краеугольных наук - физики и биологии. Это даже сами философы признали, например Файерабенд и Поппель.