Расскажите доступно про таймеры

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

Здравствуйте. Мне нужно

1. раз в 0.3 сек. считывать показания каждого потенциометра (а их четыре).

2. раз в 2 секунды 5 раз с перерывом в 0.1 сек. считывать показания термопары (для усреднения, там температура пляшет). Всего у меня 2 термопары.

3. раз в секунду получать дистанцию с дальномера

4. Ещё вывод(обновление) информации на дисплеях, включение/выключение реле, 2 серво и мигание светодиодами.

Теперь вопрос: как без использования delay() всё это сделать? может, есть готовая функция-аналог или проверенное временем решение?

Спасибо.

SLKH
Offline
Зарегистрирован: 17.08.2015
Kakmyc
Offline
Зарегистрирован: 15.01.2018

С такими запросами иди в "Ищу исполнителя".
С нуля забесплатно твои хотелки никто за тебя реализовывать не будет

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andreykrasnodar пишет:

Теперь вопрос: как без использования delay() всё это сделать? может, есть готовая функция-аналог или проверенное временем решение?

Спасибо.

Встречный вопрос: как С ИСПОЛЬЗОВАНИЕМ delay() всё это сделать? ;))))

Пожалуйста.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Я своими таймерами пользуюсь.  Но, думаю, тебе они не помогут. 

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

Похоже, я нашёл то, что мне нужно: timer-api.h и timer_init_ISR_XYHz

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

wdrakula пишет:

andreykrasnodar пишет:

Теперь вопрос: как без использования delay() всё это сделать? может, есть готовая функция-аналог или проверенное временем решение?

Спасибо.

Встречный вопрос: как С ИСПОЛЬЗОВАНИЕМ delay() всё это сделать? ;))))

Пожалуйста.

Я делал всё просто: внутри loop один delay(100) и пропуск 2 циклов там, где нужно сделать замер (или вывод) раз в 0.3 секунды, девяти - где нужно сделать замер (или вывод) раз в секунду. Так делает большинство. Но по мере обрастания проекта датчиками и добавления (и отключения) в проект дополнительных циклов с задержкой, цикл стал выполняться не раз в 0.1 секунду, а порой в 3 раза дольше, отсюда и возник вопрос, который в теме.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Я своими таймерами пользуюсь.  Но, думаю, тебе они не помогут. 

чего так сразу - не помогут, а вдруг, даже хотел ссылку дать

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ua6em пишет:

даже хотел ссылку дать

Не надо, смысла нет. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

ua6em пишет:

даже хотел ссылку дать

Не надо, смысла нет. 

 а как ты вычисляешь?

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

по уровню вопросов

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andreykrasnodar пишет:
Так делает большинство.

Да ты што!? ;))) Параметры статистической выборки "большинства" можно узнать? ;)))

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

Посмотрите на название раздела

-NMi-
Offline
Зарегистрирован: 20.08.2018

Что-то "сломалось" на этом форуме. Задавать вопросы здесЯ уже не "модно" - ибо засрут спамом беспонтовым или обвинят в "тупизЪме". Пасиму, советую, разобрацца самому, и полезно, и толк будет. Так-сказать инвестицции фсебя)))))))

Мне то-же пришлось "пободацца" с таймером на 85-й таньке. Нипонятки были, но всё прошло успешно и без сторонней помощи, что не может не радовать.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

-NMi- пишет:

Что-то "сломалось" на этом форуме. Задавать вопросы здесЯ уже не "модно" - ибо засрут спамом беспонтовым или обвинят в "тупизЪме". Пасиму, советую, разобрацца самому, и полезно, и толк будет. Так-сказать инвестицции фсебя)))))))

Мне то-же пришлось "пободацца" с таймером на 85-й таньке. Нипонятки были, но всё прошло успешно и без сторонней помощи, что не может не радовать.

Ну значит мой совет "почитать даташит", был к месту

b707
Offline
Зарегистрирован: 26.05.2017

andreykrasnodar пишет:

Посмотрите на название раздела


для решения вашей задачи используют функцию миллис. Смотрите ответ #1

-NMi-
Offline
Зарегистрирован: 20.08.2018

Kakmyc пишет:

Ну значит мой совет "почитать даташит", был к месту

Если бы он был на бумаге, да с-утреца, возможно и был бы к месту, возможно. Если других альтернатиф не было бы, опять-же. Реально понять не могу, здесь посоветовать как поправить моргало светодиодное только могут без хлама и все на этом? Реально не могу представить программирование камней без датащей, одновременно открытых вместе с иде? Вот жеж не пейсал, типа памагите, пейсал, мол, пачиму так, и никак по другому... но сццуко, надо всё переиначить, перевернуть и выставить себя гироем - вот мол, я направил его на путь истинный, четануть датаЩей... Единственный, кто хоть что-то сказал был Макс, который дал понять, что частота там неизменна, хотя я про это и спрашивал в самом первом посте. Так-шо млацца, так-диржать!

sadman41
Offline
Зарегистрирован: 19.10.2016

NMI, чё ты заныл-то?

Я вот ни разу не видел от тебя полезной реплики. Или понты дешёвые - мол я то, я се, а вы не шарите ни в чем, или вообще непонятно что написано.

Что заслужил, то и получил. Хватит на плохой форум жаловаться, можешь на другом пальцы позагибать.

-NMi-
Offline
Зарегистрирован: 20.08.2018

Ненене, продолжай в том-же стиле. Я вааЩе ничо не спрашивал серьёзного здесь, похож больше и спрашивать не стоит. ДатаЩи- нашефсё!

Расслабсо, йоптэ )))))))))))))))))

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

sadman41 пишет:
Хватит на плохой форум жаловаться, можешь на другом пальцы позагибать.

Садман41! Поца уже столько раз макали в собственное дерьмо невежество, что сосчитать нельзя. Теперь ему тут на тупые вопросы должны отвечать, а то оно обиццо! А уж мы то как переживаем! Слов нет!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

andreykrasnodar пишет:

Похоже, я нашёл то, что мне нужно: timer-api.h и timer_init_ISR_XYHz

Хрена-се! А это точно то, что Вам нужно? Ну, если так, то успехов :-)

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

-NMi- пишет:

Что-то "сломалось" на этом форуме. Задавать вопросы здесЯ уже не "модно" - ибо засрут спамом беспонтовым или обвинят в "тупизЪме". Пасиму, советую, разобрацца самому, и полезно, и толк будет. Так-сказать инвестицции фсебя)))))))

Я заметил на форуме неуравновешенных персонажей, которым важно показать, какие они умные, хотя в более простых вопросах тупят они похлеще, чем новички в Ардуино типа меня. 

Я довольно быстро нашёл элегантное решение https://habr.com/ru/post/337430/.

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

b707 пишет:
andreykrasnodar пишет:

Посмотрите на название раздела

для решения вашей задачи используют функцию миллис. Смотрите ответ #1

Спасибо за помощь. Уже нашёл решение чуть интересней (и проще) для меня

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

ЕвгенийП пишет:

andreykrasnodar пишет:

Похоже, я нашёл то, что мне нужно: timer-api.h и timer_init_ISR_XYHz

Хрена-се! А это точно то, что Вам нужно? Ну, если так, то успехов :-)

Благодарю.

-NMi-
Offline
Зарегистрирован: 20.08.2018

andreykrasnodar пишет:

Я заметил на форуме неуравновешенных персонажей, которым важно показать, какие они умные, хотя в более простых вопросах тупят они похлеще, чем новички в Ардуино типа меня. 

Сейчас модно не "тупить", а "уводить" в "сторону" - поРусски = ССатьВ_уши!! Обвинить кого-то в некомпетенции, мотивируя (например) незнанием, чо такое указатель или структура.. этт как пару пальцев помочить.

Ниабращщай внимания, чо-то случилось с этим форумом, явно не хорошее.

И, мой тебе совет - в утубе есть цельная КУЧА роликофф, в которых простым и доступным языком описаны и рассказаны методы решения твоей задачи.Не трать время зря, посмотри ролики, полезнее будет для себя, да и клянчить чото здесь - себя не уважать. Забей)))

b707
Offline
Зарегистрирован: 26.05.2017

andreykrasnodar пишет:

Я довольно быстро нашёл элегантное решение https://habr.com/ru/post/337430/.

Ну, не надо называть "элегантным решением" то, что вы просто поленились разобраться в вопросе.

куда полезнее было бы додуматься до подобного самостоятельно. Все эти костыли имеют предел числа одновременно обрабатываемых событий или "скорострельности". Не понимая, как это устроено внутри - вы довольно быстро достигнете этого предела и не опять не будете знать, что делать дальше. Разобравшись в вопросе самостоятельно - пределом бы для вас были только аппаратные возможности контроллера.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это тот случай когда "И целого millis() мало"...

b707
Offline
Зарегистрирован: 26.05.2017

-NMi- пишет:

 мой тебе совет - в утубе есть цельная КУЧА роликофф, в которых простым и доступным языком описаны и рассказаны методы решения твоей задачи.Не трать время зря, посмотри ролики, полезнее будет для себя, да и клянчить чото здесь - себя не уважать. Забей)))

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

так что это совет правильный, и тебе, NMI, тоже было бы полезно им пользоваться. А то один раз в жизни заставили залезть в даташит - и надо же, сколько жалоб и причитаний на форуме...

-NMi-
Offline
Зарегистрирован: 20.08.2018

b707 пишет:

А то один раз в жизни заставили залезть в даташит - и надо же, сколько жалоб и причитаний на форуме...

А, вот оно как? Т.е. я вчерась первый раз в жизни прочитал даташит? )))))))))))))))))))))))))))))

По просьбе форумчанина? )))))))))))))))))))))))))))))))))

Да ещё на англицком?)))))))))))))))))))))))))))))))))

Которого я незнаю)))))))))))))))))))))))))))

И я ишшо и смел пожаловацца?)))))))))))))))))))))))))))))))))))))

пипэц(((

b707
Offline
Зарегистрирован: 26.05.2017

-NMi- пишет:

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

ну, с почином. Читай почаще, мож и английский подтянешь

Цитата:
И я ишшо и смел пожаловацца

а вот это зря. Мы ж тебе добра желаем

-NMi-
Offline
Зарегистрирован: 20.08.2018

b707 пишет:

Мы ж тебе добра желаем

Надеюсь, что это действительно так)))

inspiritus
Offline
Зарегистрирован: 17.12.2012

Ну вот и молодец, сам сумел похуглить.

теперь разберись и радуйся.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

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

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

wdrakula пишет:

sadman41 пишет:
Хватит на плохой форум жаловаться, можешь на другом пальцы позагибать.

Садман41! Поца уже столько раз макали в собственное дерьмо невежество, что сосчитать нельзя. Теперь ему тут на тупые вопросы должны отвечать, а то оно обиццо! А уж мы то как переживаем! Слов нет!

Так уж повелось, что на форум обращаются зелёные (специально, чтоб ни один зануда не придирался потом к словам, речь не о цвете, а о неопытности) новички. Обращаются за советом, а не послушать нравоучения от невежественного закомплексованного старика, который на форум ходит самоутвердиться.

И то что вас лично не макали в ваше невежество, не говорит о том, что вы шибко умный - это лишь некий показатель культурности ваших виртуальных собеседников.

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

b707 пишет:

andreykrasnodar пишет:

Я довольно быстро нашёл элегантное решение https://habr.com/ru/post/337430/.

Ну, не надо называть "элегантным решением" то, что вы просто поленились разобраться в вопросе.

куда полезнее было бы додуматься до подобного самостоятельно. Все эти костыли имеют предел числа одновременно обрабатываемых событий или "скорострельности". Не понимая, как это устроено внутри - вы довольно быстро достигнете этого предела и не опять не будете знать, что делать дальше. Разобравшись в вопросе самостоятельно - пределом бы для вас были только аппаратные возможности контроллера.

Каюсь, поленился.

В своё оправдание скажу, что mills я нашёл ещё до создания темы (и в других языках функции времени использовал), но как представил, сколько ж мне придётся вводить новых переменных и как потом я в них запутаюсь...за голову схватился и стал искать информацию, как решили вопрос более опытные товарищи.

 

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

-NMi- пишет:

Ниабращщай внимания, чо-то случилось с этим форумом, явно не хорошее.

Форум хороший и ребята стараются помочь. По опыту виртуального общения с соседями в моём доме скажу, что когда появляются всего два 3.14дараса, окружающим кажется, что "с форумом что-то случилось и кругом один негатив".

sadman41
Offline
Зарегистрирован: 19.10.2016

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

Поэтому нет разницы - зелёный ты, черный или фиолетовый в крапинку.

И, отнюдь, за советом сюда обращаются редко. Чаще - когда запутались в непосильной задаче, которую взялись решать нахрапом, а отложить неподъемный проект и начинать учиться - лень. Гораздо проще свое говнище на форум вывалить - давайте, мол, рассказывайте что тут исправить, чтобы у меня все заработало. И побыстрее.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andreykrasnodar пишет:

wdrakula пишет:

sadman41 пишет:
Хватит на плохой форум жаловаться, можешь на другом пальцы позагибать.

Садман41! Поца уже столько раз макали в собственное дерьмо невежество, что сосчитать нельзя. Теперь ему тут на тупые вопросы должны отвечать, а то оно обиццо! А уж мы то как переживаем! Слов нет!

Так уж повелось, что на форум обращаются зелёные (специально, чтоб ни один зануда не придирался потом к словам, речь не о цвете, а о неопытности) новички. Обращаются за советом, а не послушать нравоучения от невежественного закомплексованного старика, который на форум ходит самоутвердиться.

И то что вас лично не макали в ваше невежество, не говорит о том, что вы шибко умный - это лишь некий показатель культурности ваших виртуальных собеседников.

Дорогой! Я просто хочу заметить, что НЕ О ТЕБЕ написано было, а о пользователе с ником MNi. И в общении с ним есть давняя и долгая история, которая тебе неизвестна.

К тебе, ввиду твоей дремучести, вопросов нет, и тебе помогают по мере возможности. Про коллегу MNi  такого сказать не могу. Не говоря о том, как всех уже достал его "удафф.ком-овский" и сильно искаженный сленг, так еще за ним числится грешок группового оскорбления ВСЕХ участников форума ("скетчедрочеры"), просто потому, что ему не написали срочно какой-то код, а учить программирование - не его барское дело.

Признаю, что возможно в той дискуссии он был пьян в сосиску, по своему обыкновению, но люди тут с хорошей памятью и недобрые! ;)))

=================================

Ну и отдельно, про "обращаются за советом". Пойми, что есть разница между уточнением непонятного и вопросами уровня таблицы умножения, то есть справочными вопросами. Справочные вопросы изучаются самостоятельно в поисковых системах и документации.

Вот изучи, если не трудно, на что обилось NMi: вопрос об изменении частоты таймера, который БОЛЕЕ ЧЕМ ПОДРОБНО освещен в даташите на контроллер. Ты не поймешь деталей, но попробуй ухватить суть проблемы.

=================================

Теперь по твоей теме. Вопрос про насос своей кофеварки ты задал еще несколько месяцев назад и тебе сказали, что этот модуль НИКАК СОВСЕМ не подойдет. Тебе реально долго учиться программировать, чтобы самому написать код для такого модуля с пропуском периодов. Притом, что есть ГОРАЗДО БОЛЕЕ ПРОСТОЕ решение - не использовать никакой модуль, а спаять другую "моську" (жаргон для оптопар MOC30XY) с тремя резисторами на куске картона или макетке, если есть. Вот ту самую, в которую детектор пересечения ноля встроен.

Там, ты просто не особо заботясь о синхронизации, откроешь на 20 мс симистор и потом закроешь на 20 мс. Пусть иногда твой насос пропустит не один а два шелчка, ну и что? Так понятно? И это всё читателям было ясно еще месяцы назад! Когда новичок начинает "изобретать велосипеды", как ты в теме про таймеры, то становится ясно,  что советовать что-то - бесполезно и дальше нужно читать, как "анекдот.ру". Уж прости.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Неистово плюсую. :) 

OK0
Offline
Зарегистрирован: 06.03.2020

wdrakula пишет:

[... этот модуль НИКАК СОВСЕМ не подойдет. Тебе реально долго учиться программировать, чтобы самому написать код для такого модуля с пропуском периодов. 

.......

Ну, справедливости ради... За модуль обидно. Вполне подойдет. Мне кажется, такие модули продают (покупают) именно что бы учиться. Вот Программа, с большой буквы "П" для управления пропусками полупериодов (периодов) для этого модуля, и для этого случая.

1. Если на пине детектора (обозначенном на плате Z-C)  LOW  (несколько раз подряд),  подаем  (или не подаем) HIGH  на управляющий пин (обозначено на плате PWM).

2. Пауза 1 мС.

3. Подаем LOW на управляющий пин.

И так по кругу:  два раза подряд подаем, потом два раза подряд не подаем.

Вполне себе учебная задачка для нулевого уровня.

 

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

OK0 пишет:

И так по кругу:  два раза подряд подаем, потом два раза подряд не подаем.

Вполне себе учебная задачка для нулевого уровня.

 

Кажется, с этого костыля я и начинал тут http://arduino.ru/forum/programmirovanie/dimmer-peremennogo-toka-ac-dimmer-rbddimmer#comment-559933

bwn
Offline
Зарегистрирован: 25.08.2014

andreykrasnodar пишет:

Так уж повелось, что на форум обращаются зелёные (специально, чтоб ни один зануда не придирался потом к словам, речь не о цвете, а о неопытности) новички. Обращаются за советом, а не послушать нравоучения от невежественного закомплексованного старика, который на форум ходит самоутвердиться.

И то что вас лично не макали в ваше невежество, не говорит о том, что вы шибко умный - это лишь некий показатель культурности ваших виртуальных собеседников.

Вот специально для "зеленых", в #3 посте песочницы собраны ссылки на разные полезные темы, одна из них про замену delay() на millis() от Лешака. Прочитав полсотни строк можно узнать, как это сделать, а бонусом, как не плодить гору переменных.

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

bwn пишет:

Вот специально для "зеленых", в #3 посте песочницы собраны ссылки на разные полезные темы, одна из них про замену delay() на millis() от Лешака. Прочитав полсотни строк можно узнать, как это сделать, а бонусом, как не плодить гору переменных.

Доступно, понятно, легко. Прям для чайников.

Но вот с утра не могу понять, как без ввода дополнительной переменной, например, пикнуть биппером трижды.

Можно сделать цикл от 0 до 2 внутри loop, но это задержит loop на время выполнения цикла, негоже.

Значит,

1. дополнительная переменная shortint = 0

2. вывод звукового сигнала если переменная меньше 3.

3. инкремент этой переменной.

Правильно мыслю?

b707
Offline
Зарегистрирован: 26.05.2017

Андрей, а как штаны застегивать вам консультация не нужна?
Зачем вы описываете код словами? Напишите на С, посмотрите как работает, потом перепишите раз, другой, третий. Глядишь, что-то и получится в итоге. Программы пишутся так, а не путем голосования на форумах.
А если вы так не можете и вам надо каждую строчку спрашивать - значит у вас нет склонности к самостоятельной работе и вы никогда не будете хорошо программировать

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

Это называется алгоритм

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

OK0 пишет:

Ну, справедливости ради... За модуль обидно. Вполне подойдет. Мне кажется, такие модули продают (покупают) именно что бы учиться. Вот Программа, с большой буквы "П" для управления пропусками полупериодов (периодов) для этого модуля, и для этого случая.

1. Если на пине детектора (обозначенном на плате Z-C)  LOW  (несколько раз подряд),  подаем  (или не подаем) HIGH  на управляющий пин (обозначено на плате PWM).

2. Пауза 1 мС.

3. Подаем LOW на управляющий пин.

И так по кругу:  два раза подряд подаем, потом два раза подряд не подаем.

Вполне себе учебная задачка для нулевого уровня.

LOW  (несколько раз подряд)???

Это бред, а не алгоритм.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

andreykrasnodar пишет:

bwn пишет:

Вот специально для "зеленых", в #3 посте песочницы собраны ссылки на разные полезные темы, одна из них про замену delay() на millis() от Лешака. Прочитав полсотни строк можно узнать, как это сделать, а бонусом, как не плодить гору переменных.

Доступно, понятно, легко. Прям для чайников.

Но вот с утра не могу понять, как без ввода дополнительной переменной, например, пикнуть биппером трижды.

Можно сделать цикл от 0 до 2 внутри loop, но это задержит loop на время выполнения цикла, негоже.

Значит,

1. дополнительная переменная shortint = 0

2. вывод звукового сигнала если переменная меньше 3.

3. инкремент этой переменной.

Правильно мыслю?

Все таки решил учиться? Похвально.

Не совсем так, но направление мысли верное. Есть еще временные параметры:

1.Сколько времени длится гудок?

2.Сколько длится пауза между ними?

3. Какое событие вызывает "три зеленых свистка"? ;))

Таким образом посчитать гудок свершившимся и увеличить счетчик нужно по завершении всего цикла гудка.

Вот пример, только вместо гудка светодиод. задано 5 повторов

const byte myLed = 2; //пин светодиода
const byte myButton = 4; //пин кнопки

const uint16_t onTime = 200; //время горения диода
const uint16_t offTime =600; //время между включениями

const byte repeat = 5; //количество повторов мигания


void setup() {
 pinMode(myLed, OUTPUT); //пин диода
 //кнопка подтянута к питанию, при нажатии дает ноль. так меньше помех
 pinMode(myButton,INPUT_PULLUP); 
}

void loop() {
  //тут мои привычки om это "old millis", nm - "new millis"
  static uint32_t om = millis(); //статик. инициализация ОДИН раз при первом вызове
  uint32_t nm = millis(); //текущее значение миллис

  static uint16_t interval = 0; //текщий интервал, либо onTime либо offTime

  static byte state = 0; //то самое хитрое состояние, как я написал, неудобно считать повторы, удобнее разделить на вкл/выкл и считать полуциклы

  // 0 - состояние ожидания нажатия
  // 1 - первый цикл горения
  // 2 - погасший диод между первы и вторым включениями
  // 3 - второе включение... и т.д.

  //если кнопка нажата в состоянии покоя ИЛИ истек интервал в активном состоянии
  if ((state ==0 && digitalRead(myButton)==LOW) ||
      (state && nm - om > interval)) {
    //перейдем с следующее состояние
    state++;
    //и запомним время. Есть вариант писать тут om+=interval; что важнее интервал между событиями или среднее к-во событий во времени?
    om = nm;
    
    //это "тернарный оператор" как маленький if(), но с строке
    //для нечетных состояний время вкл - для четных - время выкл
    interval = (state % 2) ? onTime : offTime;
    
    //переключим диод
    digitalWrite(myLed,!digitalRead(myLed));
  }
  
  //если отсчитали нужно количество циклов - пора на покой
  if (state == 2*repeat) state = 0; 

}

 

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

Собственно, разобрался, весь проект сделал.

На будущее (вдруг кто будет искать) логика тут простая: делаем нужное количество триггеров (boolean или byte переменные), приравниваем их к нулю и при необходимости сделать некое действие, не делаем это действие, а устанавливаем триггер в положение логической 1, а дальше проверяем наличие каждого триггера и делаем действие.

Дальше без кода, т.к. это будет запутанно.

В моём проекте несколько десятков триггеров, а дальше - банальная проверка:

если наличие объекта в поле зрения = 1, температура объекта = высокая, положение клапана = 0 и сервопривод задействован, переключить триггер подачи звука на 1.

Звук подаётся 3 раза, от 3 делается декремент и если достигли нуля, переключить триггер подачи звука на 0.

b707
Offline
Зарегистрирован: 26.05.2017

andreykrasnodar пишет:

Дальше без кода, т.к. это будет запутанно.

то есть до этой фразы было просто? и с кодом? :)

 

Боюсь что ваше "обьяснение" ни одному из новичков не пригодится...

 

Хорошо хоть сами поняли. Надеюсь убедились, что "таймеры" это совсем другое?

andreykrasnodar
Offline
Зарегистрирован: 04.10.2020

b707 пишет:

Хорошо хоть сами поняли. Надеюсь убедились, что "таймеры" это совсем другое?

Да, мне просто логика работы с ардуино не совсем была понятна. В принципе, хоти и mills правильнее, в некоторых случаях вполне можно оставить задержку без вреда для конечного продукта.