Сделать Millis или использовать Thread

Здравствуйте
Не могу понять как будет более правильно сделать: необходимо по циклу посылать в кан 15 команд с интервалом 100мс, при этом когда идет 100мс ожидания надо опросить опять же по кану два адреса и если содержимое первых двух байт в посылке совпадет то зажечь на время жизни посылки светодиод. Изначально сделал вообще неправильно через делей, но потом дошло что система всегда занята и опросить уже кан она не сможет, начал разбираться вышел на две ветки решения этой проблемы задержки с помощью миллис либо организация двух потоков один для выдачи посылок, другой для опроса шины. В блоке выдачи посылок надо сделать как-то так чтобы одна посылка ушла потом управление передается на поток опроса, как 100мс прошло обратно в потом посылок, но запуститься уже следующая посылка (это наверное можно через if else только не совсем пойму как перескок на следующую посылку сделать)

1 лайк

@VladimirSh
какую ардуину используете ?

Nano c с каншилдом (но есть еще в запасах Uno)

Контроллер на плате Нано - однопотоковый. Все способы организации на нем многопоточности - программные, по сути основанные на той же миллис.

1 лайк

Почитай описание и примеры библиотеки от Деда.

1 лайк

И я всегда тут (пока не помер), спрашивай

1 лайк

Спасибо ребята! Попытаюсь разобраться чтобы по мелочам не беспокоить, если упрусь опять буду писать. Если ардуина не совсем подходит, может есп32 или стм32 посмотреть? или там еще сложнее к освоению будет?

Гайвера почитай, у него какие-то Task-и есть

1 лайк

Спасибо! Хорошо

Почему не подходит? По условиям задачи тебе два потока и не нужно - шина-то КАН у тебя все равно одна. А значит хоть 20 потоков заведи, два сообщения одновременно ты не никак не отправишь.

Родителей почитать надо! И Б…га! А не Гивера… :wink:

1 лайк

Да верно, и кан один и шилд одноканальный и запись или чтение может быть только одно.

В этой задаче никакие таски/потоки и т.д. не нужны.
“Blink w/o delay” и всё.

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

post #4

Железо UNO+Шилд2515.
Да я уже подумал, как выше подсказали наверное самое простое(возможно не самое изящное и правильное) будет так:
-Посылка в Кан n1
-Ссылка на подпрограмму опроса шины на предмет наличия нужной посылки и если да то зажигаем диод с периодом опроса, если нет то снова опрос.
-Посылка в кан n2
-Ссылка на подпрограмму опроса шины на предмет наличия нужной посылки и если да то зажигаем диод с периодом опроса, если нет то снова опрос.
……
….
-Посылка в кан n15
-Loop

Void подпрограмма опроса шины
10 опросов с периодом 10мс

Я отвечал на стартовый пост, еще не прочитав всю тему.

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

1 лайк

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

1 лайк

Но что-то же нужно делать, с чего-то начать. Пока на ум пришло такое решение.