Delay() и опрос датчика - есть какая-то многопоточность?

Dimanoss
Offline
Зарегистрирован: 29.05.2016

День добрый,

вопрос, наверное, больше о философии железяки, нежели о программировании.  А как у микроконтроллеров с мультипоточностью?  Ну, например, есть у меня примитивнейший проектик: LED-лента и датчик движения.  

1. Датчик засекает движение и контроллер врубает свет.
2. Контроллер делает паузу (например - минутную) и вырубает свет.
.......... пока всё понятно, да? ...........
2а. Контроллер свет гасит плавно, секунд за 6-8, в это время в зоне видимости датчика что-то происходит.  Или движение было во время паузы между включением и выключением... В идеале нужно, чтобы при движении контроллер опять врубил свет по максимуму и перезавёл таймер.

Как ардуина работает?  Могу ли я (насколько вижу - не могу!) прописать что-то для датчика;  датчик сработал - меняется, например, переменная, которая потом переодически опрашивается программой?  Или надо всё же delay (пауза между включением и выключением и микропаузы при плавном уменьшении свечения диодов) рвать, вклинивая туда опросы датчика?

Спасибо заранее.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Examples->BlinkWithoutDelay

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

День сурка?

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

Dimanoss пишет:

Могу ли я ....


 

Этого кроме Вас никто не знает. Одни люди могут, другие не могут, но быстро учатся, а третьи не могут генетически, от слова "никогда". А можете ли Вы ... время покажет :)

Dimanoss
Offline
Зарегистрирован: 29.05.2016

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

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

Dimanoss пишет:

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

ну, запускаешь все четыре ядра - делов-то.

void setup() {}
void loop0() {}
void loop1() {}
void loop2() {}
void loop3() {}

 

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Dimanoss, настоящей многопоточности нет. Но можно реализовать некую псевдомногопоточность. Про поиск Вам уже сказали, эта тема поднималась не раз и не два. Можете ещё почитать книжки по микроконтроллерам AVR.

Про delay() забудьте, используйте millis() как в примере BlinkWithoutDelay.

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

Dimanoss пишет:

 я сам программист, вот и хотелось узнать ...

Ну, тогда всё проще. Вы, к сожалению. не написали что у Вас за ардуино, поэтому сделам так: вот здесь есть полная документация по всем контроллерам. Выбираете свой, кликаете и смотрите. Например, если у Вас UNO/Nano и подобное, то вот прямая ссылка на полное описание.

Если Вы программист, то больше Вам ничего не нужно.

Celestron
Offline
Зарегистрирован: 13.04.2016

А еще есть портированый на ардуино FreeRTOS. Пищу от восторга. Очень много на ней построено.