#16.2 Millis Таймер. Arduino

Поделиться
HTML-код
  • Опубликовано: 17 ноя 2024

Комментарии • 44

  • @sukayaskazalsuka
    @sukayaskazalsuka 2 года назад +2

    Только благодаря вашему ролику понял как работает millis

  • @olegyurkov6071
    @olegyurkov6071 2 месяца назад

    Максим, в ардуино так устроено, что при запуске программы на выполнение управление передается в функцию setup( ), в которой обычно производится инициализация всего что нам надо для работы. Она выполняется один раз и далее управление передается в функцию loop( ), в которой, как правило, мы делаем обработку в цикле, и в этом цикле постоянно работает наша программа. Выход из этого цикла означает выход из программы. Поэтому если вынести инициализацию переменной за пределы указанных функций, это место не получит управления. Для этого переменную Т надо инициализировать в одной из этих функций или в функции, которая вызывается из этих функций. И еще уточнение : в 17:50 у тебя оговорка - локальные переменные создаются не в цикле, а в теле функции, тогда они видны только внутри этой функции. В частности, когда мы создаем переменную в теле функции loop( ) она является локальной для этой функции.

  • @ВалерийСоколов-м8ы
    @ВалерийСоколов-м8ы 4 года назад +1

    Максим, такие задачи и более сложные имеют свой алгоритм. У Вас алгоритм в текстовой форме, легко запутаться. Хорошо составленный алгоритм это половина успеха, если не больше.

  • @morphey25
    @morphey25 6 лет назад +1

    Все равно с millis осталось много темных мест по применению, таймер по переднему, заднему фронту, таймер при появлении сигнала на включение держит 5 секунд и выключается, таймер наоборот через 5 сек включает чтото, как организовать счетчики, счетчики моточасов, бутылок, сигналов, включений, можно конечно самому придумать, но если есть опытный преподаватель то КПД таких придумываний будет больше и это будет доступно всем, есть масса других простых вариантов уроков, управление с помощью МОСФЕТ и обычных транзисторов, реле, сейчас непосредственно для меня непонятно как организовывать параллельно много LOOP функций и объединять их в одной программе и конечно же все так же подробно разжевывать каждый такт происходящего. Автору большое спасибо за проделанный труд.

  • @alesandryabov6478
    @alesandryabov6478 7 лет назад +1

    Спасибо огромное.Все прекрасно обьяснили.Удачных Вам проектов.

  • @vladimirvladimir1222
    @vladimirvladimir1222 7 лет назад +1

    Здравствуйте, Максим! Очень нравятся ваши видео. А когда ожидать следующий урок?

  • @p1grishin
    @p1grishin 4 года назад +1

    Добрый день.
    Было бы еще наглядней, если показать параллельную работу двух светодиодов, что с delay одновременно не получится, если включение или отключения светодиодов стоят в разных условиях, а перейдя на millis уже такое получится, т.к. программа не встает в паузу, а продолжает с такой же большой скоростью бегать по строчкам loop.

    • @maksymgrom1631
      @maksymgrom1631  4 года назад

      В качестве обучения можете реализовать такую систему и опубликовать в комментариях ссылку) всем было бы приятно посмотреть на разные варианты, а я мог бы дать обратную связь по качеству кода, если бы вы хотели такую получить)
      Новых видео я сейчас не записываю, так что простите если такая задумка не появится на моем канале :(

    • @p1grishin
      @p1grishin 4 года назад +1

      @@maksymgrom1631 если доберусь до этого урока, до обязательно оставлю тут ссылку:)ввиду такой ситуацией пришлось и до съёмок дойти

  • @cah4780
    @cah4780 5 лет назад

    23:40 тут Вы говорите, что надо поместить
    last=!current; //присвоить последнему значению - кнопка отпущена.
    в функцию таймера, а в if(current != last) присвоить последнему значению - нажата
    last = current;
    или я что-то не так понял?
    Еще раз большое спасибо за Ваш труд!

  • @anjeym0nblan89
    @anjeym0nblan89 4 года назад

    Спасибо автору. но вопрос. Зачем "столько текста" если даже не можете написать код так как она должна выглядеть?
    Вот в начале вы говорите - функция Милис возвращает количество миллисекунд. ???? ВОЗВРАЩАЕТ ??? откуда и куда ??? Считает от начала запуска контроллера - Наверное ... но возвращает? Объясните пожалуйста

    • @maksymgrom1631
      @maksymgrom1631  4 года назад +1

      Извините :(
      Вызов любой функции может что то принимать и что то возвращать. Что функция делает знать не обязательно.
      millis() вернет количество миллисекунд с момента запуска микроконтроллера. Милисекунды считаются за счет аппаратного таймера и прерывания которое увеличивает буффер этих самых миллисекунд.
      Рекомендую указывать временную метку на проблемное место в видео, чтобы я мог хотябы найти :(
      А можете дополнительно разобраться и дополнить видео своим замечательным комментарием

    • @anjeym0nblan89
      @anjeym0nblan89 4 года назад

      @@maksymgrom1631 Простите просто "я в танке". 8 дней сижу над Ардуино и не могу ничего сделать. И здесь ваши уроки. По теме но очень длинные и я немного не сдержался.
      К сожалению я так до сих пор не могу понять как функция может что-нибудь возвращать? Принимать какое-то значение или менять его, выполнять ряд действий - ОК ПОНИМАЮ .... но все пишут возвращать ... я завис. Куда вернуть?
      Вы пишете: " millis() вернет количество миллисекунд с момента запуска микроконтроллера. "
      Я понимаю так - millis () внутренний счетчик который изначально есть.
      Мы не можем к нему что-нибудь добавить или обнулить его. И к нему можно обратиться в любое время чтобы узнать сколько прошло времени от запуска процессора. и это можно сделать множество раз в течение программы. Мы не сможем обнулить этот счетчик он просто считает. Я не прав? Так что эта функция возвращает?

    • @maksymgrom1631
      @maksymgrom1631  4 года назад

      @@anjeym0nblan89 Сложно подобрать формат который будет удобный для абсолютно всех зрителей
      И не менее сложно вести серию уроков с одной и той же подачей и имея первый опыт съемки видео на ютуб
      Так что уроки далеко не идельны и доп обработка там очень слабая, извините за такое качество обучающего материала и терпения в изучении :)

  • @hobby5062
    @hobby5062 5 лет назад

    Максим,приведите пример еще с абстракцией,пожалуйста

    • @maksymgrom1631
      @maksymgrom1631  5 лет назад

      Добрый день
      ruclips.net/video/F5h9jW21mwk/видео.html
      Возможно урок с объектом даст больше информации

  • @серыйкуб-ш4н
    @серыйкуб-ш4н 3 года назад

    ПРИВЕТ АКАК ПРРСТПОСОБИТЬ ДЛЯ ИНКУБАТОРА ПЕРЕВОРОТ ЛОТКА И ПРОДУВ ВЕНТИЛЯТОРА ПРЕОДИЧЕСКИ К ПРМИЕРУ РАЗ В СУТКИ ИИ Л ДВА

  • @artem-cj5jk
    @artem-cj5jk 4 года назад

    Возвращает количество миллисекунд с момента начала выполнения текущей программы на плате Arduino. Это количество сбрасывается на ноль, в следствие переполнения значения, приблизительно через 50 дней
    будь добр быть компетентным

    • @maksymgrom1631
      @maksymgrom1631  4 года назад

      Для работы таймера это не существенная информация. Таймер считает относительное время, разница двух unsigned long вернет такой же тип данных. Я об этом говорил в этом курсе. Даже при переполнении результат будет одинаковый

  • @drago285
    @drago285 5 лет назад

    Прошу помощи, пожалуйста разжуйте мне как это понять:
    stepTime = 1;
    void loop(){
    millisStart = millis();
    while(millis() - millisStart < stepTime){
    do{
    ...
    }while(условие)
    millisStart = 0L;
    }
    ...
    }
    плюс возможно увеличение / уменьшение stepTime во время выполнения кода.
    Как (millis() - millisStart < stepTime) может оставаться истиной, или когда оно может быть истиной?

    • @maksymgrom1631
      @maksymgrom1631  5 лет назад

      Странный код, но после старта, цикл будет работать пока не пройдет время, т.е. Контроллер зациклится в этом месте на 1 мс. Потому что перед заходом в цикл была сохранена временная метка. В цикле уже будет считаться смещение времени от метки

    • @maksymgrom1631
      @maksymgrom1631  5 лет назад

      Контроллер будет обрабатывать только этот цикл пока там истина, код за пределами цикла будет игнорироваться

  • @volodysarasov
    @volodysarasov 4 года назад

    как сделать таймер на миллис что бы несколько светодиодов мигали каждый по своему времени ? покажите нужно для программы у меня там будет порядка 15 -20 задержек на миллс

    • @maksymgrom1631
      @maksymgrom1631  4 года назад

      В таймере нужно использовать функцию micros вместо millis т.е. таймер будет работать в микросекундах а не в милисекундах

  • @user-du3zt7ui8f
    @user-du3zt7ui8f 7 лет назад

    Помогите мне, нигде не могу найти ничего серьёзного по типу управления тремя реле одновременно по фиксированному времени. По типу одно реле переключается периодами: 18 часов включено и 6 выключено, а другое реле 12 включено и 12 выключено, а третье что бы сначала включалось раз в день периодами в несколько десятков минут (допустим 4 периода)!

    • @maksymgrom1631
      @maksymgrom1631  7 лет назад

      xxx_pussydestroyer_ 420blazeit_xxx посмотрите 19 - 21 уроки, как раз об этом

    • @TimeOut17
      @TimeOut17 7 лет назад

      Наверно Сенсей дает только уроки....Вам не в детский сад нужно.

    • @morphey25
      @morphey25 6 лет назад

      такие вещи на ура программируются codesys

  • @themusic9676
    @themusic9676 5 лет назад

    Добрый день! Подскажите пожалуйста, как сделать чтобы две кнопки управляли двумя нагрузками через один таймер обратного отсчета?

    • @maksymgrom1631
      @maksymgrom1631  5 лет назад

      Добрый день.
      Можно более подробно описать логику?

    • @themusic9676
      @themusic9676 5 лет назад

      @@maksymgrom1631 где-то так - habr.com/ru/post/320458/

    • @themusic9676
      @themusic9676 5 лет назад

      теоретически это будет работать? Можно сделать так, чтобы считывало не деньги, а время и работал он с жетоноприёмником (не купюроприёмником)? Заранее спасибо!

    • @maksymgrom1631
      @maksymgrom1631  5 лет назад

      @@themusic9676 По описанию в статье выглядит работоспособным.
      Опыта по изготовлению таких устройств у меня нет.
      Приемник жетонов или чего либо, или промо кодов, должен увеличивать счет в системе (желательно в энерго независимую память)
      При запуске включается таймер и минусует счет погласно времени, при достижении 0 аппарат должен быть остановлен.
      Водные автоматы работают по подобному принципу. На Ардуино такое сделать можно, и не трудно. Логика микроконтроллера довольно простая будет в этом случае. Возможно стоит подготовить такой прототип в качестве урока, но я сейчас загружен :(

    • @themusic9676
      @themusic9676 5 лет назад

      @@maksymgrom1631 Если всё таки будет время, сделайте пожалуйста подробное видео (если будет не трудно мне ссилочку сбросите), я и не только будем весьма благодарны.

  • @morphey25
    @morphey25 6 лет назад

    Чтобы понять про таймеры пришлось с 0 серии смотреть ))

  • @AntonyAntonys
    @AntonyAntonys 3 года назад +2

    Блин полный нудение

  • @Islam_urus
    @Islam_urus 7 лет назад

    Максим, где можно скачать код вашей программы?

    • @maksymgrom1631
      @maksymgrom1631  7 лет назад

      Ислам Урус в лаборатории, ссылка под видео, и там можно его скачать

  • @maksymgrom1631
    @maksymgrom1631  5 лет назад

    Сайт с лабораторией переехал, добавляю обновленную ссылку + обновил описание видео
    www.tinkercad.com/things/kk49SeOZpFU

  • @hobby5062
    @hobby5062 5 лет назад

    Спасибо

  • @ИпполитМатвеевичВоробьянин-т1п

    у автора редкое отсутствие способностей что либо преподавать