Работа с таймером

Тема в разделе "Arduino & Shields", создана пользователем vasilp, 2 апр 2014.

  1. vasilp

    vasilp Нерд

    Не могу понять почему здесь break;
     
  2. vasilp

    vasilp Нерд

    Вопрос почему светодиод вместо того чтоб включиться и выключиться гаснет ступенями просто включается и за i проходов изменяет яркость?
    Код (Text):
    void loop()
    {
      long int time = millis() - time_start;
      bool led_on = false;
      for (int i = 0; i < Pulse_red; i++)
      {
     

          if (millis() - time <= ligth_time_red + next_red)
          {
            led_on = true;
          }
          if ((time>=(time_start + ligth_time_red + pulseIntervalRed*i)))
          {
          led_on = false;
          }
          digitalWrite(RED_PIN, led_on);
      }
    }
     
  3. vasilp

    vasilp Нерд

    Видать не суждено этому проекту жить... Может кто нибудь подскажет как этот loop должен на самом деле выглядеть? Не получается у меня справиться с ним :(
     
  4. Unixon

    Unixon Оракул Модератор

    Чтобы не крутить ненужные итерации цикла.
     
  5. Unixon

    Unixon Оракул Модератор

    Ну опять на старые грабли наступаете...
     
  6. vasilp

    vasilp Нерд

    Да видать не разобраться мне с ним. Так синий светодиод не работает И еще парадокс когда пытался заставить работать один красный то вместе с ним загорался зеленый хотя в коде ни слова не было про него


    Код (Text):
    {
     
      long int time = millis() - time_start;
      bool led_onBlue = false;
      bool led_onRed = false;
     
      if (digitalRead (PIN_BTN_START))
      {
       
     
      for (int i = 0; i < Pulse_red; i++)
      {
     
        if ((time<=(time_start + ligth_time_red + next_red + pulseIntervalRed*i)))
          {
            led_onRed = true;
          }
          if ((time>=(time_start + ligth_time_red + pulseIntervalRed*i)))
          {
          led_onRed = false;
          }
          digitalWrite(RED_PIN, led_onRed);
      }
     
    for (int i = 0; i < Pulse_blue; i++)
    {
      if ((time<=(time_start + ligth_time_blue + next_blue + pulseIntervalBlue*i)))
      {
        led_onBlue = true;
      }
      if ((time>=(time_start + ligth_time_blue + pulseIntervalBlue*i)))
      {
        led_onBlue = false;
      }
    }

    }
    }
     
  7. vasilp

    vasilp Нерд

    Вобще как только не пробовал ничего ни выходит разные варианты мучал немогу добиться того что надо приблизительно только.
     
  8. Unixon

    Unixon Оракул Модератор

    Посмотрите еще раз первый мой пример. Там написано как должна выглядеть функция loop() в случае одного импульса.
     
  9. Unixon

    Unixon Оракул Модератор

    Если импульсов несколько, заменяете соответствующий if() циклом /точнее пару if() отвечающую за включение и выключение/, который вычисляет значение led_on. Сами светодиоды внутри этих циклов не трогаете, никаких digitalWrite() ! Это все нужно только для того, чтобы вычислить, должен ли гореть светодиод в данный момент времени или нет, при условии что импульсов несколько и между ними определенные промежутки.
     
    Последнее редактирование: 6 апр 2014
  10. Unixon

    Unixon Оракул Модератор

    Только потом, в конце loop(), в зависимости от значения соответствующей цвету переменной led_on_X, на самом деле зажигаете или гасите светодиод.
     
  11. vasilp

    vasilp Нерд

    Спасибо за помошь! Я даже понятия не имею как это сделать (заменяете соответствующий if() циклом /точнее пару if() отвечающую за включение и выключение/, который вычисляет значение led_on.) не понять мне этого , Загружу в него Blink и пускай мигает чтоб не валялся просто так..А сам займусь более полезным делом... и так потерял зря кучу времени...
     
  12. Makar

    Makar Нуб

    здравствуйте, подскажите пожалуйста как можно сделать циклический таймер. Может кто делал. Заранее спасибо
     
  13. vasilp

    vasilp Нерд

    Как еще можно это зписывать теперь он тупо гаснет снова зажигается и горит когда стоял break он просто горел
    Код (Text):
    void loop()
    {

    long int time = millis() - time_start;
    bool led_on = false;
    for (int i = 0; i < Pulse_red; i++)
    {
      if ((time>=(time_start + next_red)))
      {
      led_on = true;
      }
      if ((time>=(time_start + ligth_time_red)))
      {
        led_on = false;
      }
      if ((time>=( + pulseIntervalRed*i)))
      {
        led_on = true;
       
      }
     
    }

    digitalWrite(RED_PIN, led_on);
    }
     
  14. Makar

    Makar Нуб

    таймер включения/ выключения нагрузки с бесконечным повторением
     
  15. ne555 должен справится.
     
  16. Makar

    Makar Нуб

    он да, но мне надо что бы это время можно было менять, а это лучше делать на микроконтроллере и вывод на дисплей информации
     
  17. так можно дойти до приготовления кофе..

    сложность собстно в чем?
     
  18. Makar

    Makar Нуб

    не могу разобраться как создать бесконечный цикл, пока не будет нажата кнопка выхода в настройки времени таймеров
     
  19. do {
    //цикл
    } while (digitalRead(кнопка));
     
  20. Makar

    Makar Нуб

    спасибо