Например TDA7294

Форум РадиоКот • Просмотр темы - Вопрос по Ардуино. Заменить delay() на millis()
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 04:06:27

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Ср фев 28, 2018 19:53:52 
Первый раз сказал Мяу!

Зарегистрирован: Чт ноя 26, 2015 18:33:42
Сообщений: 29
Откуда: Екатеринбург
Рейтинг сообщения: 0
Здравствуйте! Совсем недавно столкнулся с Ардуино. Пытаюсь собрать автозапуск двигателя.
Никак не могу одолеть вопрос таймеров. Как убрать из программы delay? В Гугле ищется лишь как мигать светодиодом без delay, но это совсем не то, что нужно. Вот кусочек кода именно запуска двигателя:
Код:
void autostart() {
  digitalWrite(main_relay, HIGH); // включаем главное реле
  digitalWrite(engine_relay, HIGH); // включаем реле зажигания
  digitalWrite(immo_relay, HIGH); // включаем реле обходчика иммобилайзера
  delay(3000); // ждем 3 секунды, пока накачает бензонасос
  digitalWrite(starter_relay, HIGH); // включаем реле стартера
  delay(1000); // на 1 секунду
    if (launch_status == 0) delay(1000); // если двигатель не запущен, то ждем еще секунду (в общей сумме стартер проработает 2 секунды)
    else if (launch_status == 0) delay(1000); // если двигатель не запущен, то ждем еще секунду (в общей сумме стартер проработает 3 секунды)
    else if (launch_status == 0) delay(1000); // если двигатель не запущен, то ждем еще секунду (в общей сумме стартер проработает 4 секунды)
    else if (launch_status == 0) delay(1000); // если двигатель не запущен, то ждем еще секунду (в общей сумме стартер проработает 5 секунды)
    else digitalWrite(starter_relay, LOW); // иначе выключаем стартер
}


В постоянном цикле loop у меня опрашиваются лампы зарядки(генератора) и давления масла. По ним я определяю статус двигателя запущен или нет.
Так вот мне нужно крутить стартером, пока статус двигателя не изменится на 1 (значит запущен), НО крутить при этом не более 5 секунд! Если посмотрели код, то наверняка заметите как топорно я это организовал через кучу задержек. Боюсь, что во время этих задержек контроллер вообще не будет получать никаких данных с ламп и будут глюки при определении запущен двигатель или нет.

Как это можно реализовать при помощи millis()?

И еще дополнительный вопрос, как можно сделать несколько таймеров на основе millis() в одном скетче? Толковых примеров не встречал, а методом тыка получается какая-то белиберда. Заранее спасибо вам за ответы!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Ср фев 28, 2018 20:57:28 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18470
Рейтинг сообщения: 0
Никак не могу одолеть вопрос таймеров. Как убрать из программы delay? В Гугле ищется лишь как мигать светодиодом без delay, но это совсем не то, что нужно.

Это то самое если добавить еще светодиод и управление ими с помощью кнопок, а так слишком просто вышло.

Полистайте эту тему http://arduino.ru/forum/obshchii/pomogite-uiti-ot-delay (посты 28 31 59 ну и другие примеры без delay) и почитайте про конечные автоматы. Замена - неправильное слово, заменить нельзя, нужно переделывать программу.

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

Как это можно реализовать при помощи millis()?

И еще дополнительный вопрос, как можно сделать несколько таймеров на основе millis() в одном скетче? Толковых примеров не встречал, а методом тыка получается какая-то белиберда. Заранее спасибо вам за ответы!

Ваш код должен постоянно выполнять непрерывный цикл и в определенные моменты времени (определяются millis() и текущим состоянием системы - что включено, когда, запущен двигатель или нет) выполнять определенное действие, запоминать что выполнили (если требуется соблюсти последовательность действий) и дальше по кругу. Этакое псевдопараллельное выполнение. Думаю в книжке по конечным автоматам толковее написано.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Ср фев 28, 2018 21:20:05 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Morroc, почитал, как и ожидалось чуда не произошло . Ардуионо _изобредатели так же далеки от осознание конечного автомата как до китая раком.
Что дальше?


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Ср фев 28, 2018 21:41:28 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18470
Рейтинг сообщения: 0
Не думаю что есть варианты :) Читать и пробовать до полного просветления :)

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Чт мар 01, 2018 06:09:00 
Друг Кота
Аватар пользователя

Карма: 30
Рейтинг сообщений: 155
Зарегистрирован: Пн июл 28, 2008 22:12:01
Сообщений: 3604
Рейтинг сообщения: 0
Мне? Уважаемый, мне чужие г.скетчи для осознания и на не вперлись. Я говорю о тех кому вы советуете чушь.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Чт мар 01, 2018 06:18:09 
Друг Кота

Карма: 43
Рейтинг сообщений: 257
Зарегистрирован: Пн апр 19, 2010 00:04:18
Сообщений: 11998
Откуда: Малороссия
Рейтинг сообщения: 0
Я вот не пойму..Вы, что ЭБУ вообще выкинули из тачки?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Чт мар 01, 2018 08:56:37 
Первый раз сказал Мяу!

Зарегистрирован: Чт ноя 26, 2015 18:33:42
Сообщений: 29
Откуда: Екатеринбург
Рейтинг сообщения: 0
Я вот не пойму..Вы, что ЭБУ вообще выкинули из тачки?

Это Вы к чему? :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Чт мар 01, 2018 11:10:00 
Друг Кота

Карма: 43
Рейтинг сообщений: 257
Зарегистрирован: Пн апр 19, 2010 00:04:18
Сообщений: 11998
Откуда: Малороссия
Рейтинг сообщения: 0
Электронный Блок Управления, коробочка такая, которая там всем управляет...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Чт мар 01, 2018 11:13:51 
Друг Кота

Карма: 49
Рейтинг сообщений: 523
Зарегистрирован: Чт фев 20, 2014 18:57:55
Сообщений: 18470
Рейтинг сообщения: 0
Мне? Уважаемый, мне чужие г.скетчи для осознания и на не вперлись. Я говорю о тех кому вы советуете чушь.

И я о них же :)) Не чушь. Куда еще отправить ардуинщика как не к другим ардуинщикам ? Там стандартные советы почитать книжки и вполне рабочие варианты "как избавиться от delay()" в точности по теме управления движком.

_________________
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопрос по Ардуино. Заменить delay() на millis()
СообщениеДобавлено: Чт мар 01, 2018 12:23:27 
Друг Кота
Аватар пользователя

Карма: 93
Рейтинг сообщений: 1351
Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 14054
Откуда: ДОНЕЦК
Рейтинг сообщения: 0
Здравствуйте! Совсем недавно столкнулся с Ардуино. Пытаюсь собрать автозапуск двигателя.
Никак не могу одолеть вопрос таймеров. Как убрать из программы delay?
...
В постоянном цикле loop у меня опрашиваются лампы зарядки(генератора) и давления масла. По ним я определяю статус двигателя запущен или нет.
Так вот мне нужно крутить стартером, пока статус двигателя не изменится на 1 (значит запущен), НО крутить при этом не более 5 секунд! Если посмотрели код, то наверняка заметите как топорно я это организовал через кучу задержек. Боюсь, что во время этих задержек контроллер вообще не будет получать никаких данных с ламп и будут глюки при определении запущен двигатель или нет.

Как это можно реализовать при помощи millis()?

И еще дополнительный вопрос, как можно сделать несколько таймеров на основе millis() в одном скетче? Толковых примеров не встречал, а методом тыка получается какая-то белиберда. Заранее спасибо вам за ответы!


Запомнить исходное значение и периодически сравнивать с получаемым. А новое считанное значение при достижении необходимой разницы использовать как базу для следующего опроса.
Через определенный промежуток времени - допустим после цикла опроса входных данных и/или обязательных управляющих действий.
При соответствующем результате отработать участок за ним закрепленный и/или инкремент/декремент счетчика ожидания соответствующего "процесса в ожидании".
Обычное программирование - как и для других видов МК и компиляторов...
:roll:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y