+7 (900) 029-50-10 ДЮТТ
+7 (904) 808-60-10 Кванториум Челябинск
+7 (3519) 33-07-37 Кванториум Магнитогорск
+7 (351) 369-08-13 Кванториум Златоуст
+7 (35163) 2-45-85 Кванториум Троицк
+7 (351) 394-33-03 Кванториум Копейск
+7 (35160) 2-25-76 Кванториум Пласт
+7 (35134) 4-22-81 IT-Куб Южноуральск
+7 951 806 3486 IT-Куб Сатка
+7 (3519) 33-08-08 IT-Куб Магнитогорск
+7 951-787-67-82 IT-Куб Кыштым
+7 (35146) 92 716 IT-Куб Снежинск
+7 9000 670 186 IT-Куб Миасс
+7 (351) 218-11-16 IT-Куб Челябинск
+7 (919) 111-20-76 IT-Куб Трехгорный

Как организовать многопоточность на Arduino? Мастер-класс

Как организовать многопоточность на Arduino? Мастер-класс

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

Подключим потенциометр и сервопривод как на картинке ниже. И напишем код, который будет заставлять вращаться серво от 0 до 180 градусов и обратно тем быстрее, чем больше выкручен потенциометр.

Как организовать многопоточность на Arduino? Мастер-класс

Вероятнее всего, первая идея реализации кода будет следующая:

Как организовать многопоточность на Arduino? Мастер-класс

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

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

Как организовать многопоточность на Arduino? Мастер-класс

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

Как организовать многопоточность на Arduino? Мастер-класс

Теперь код работает так, как и требовалось. Эти и другие знания можно получить, записавшись на занятия по программированию и IT в челябинский технопарк «Кванториум».

Написать сообщение

Оцените от 1 до 5
Людмила 29 января 2021, 13:30

Простите, но это не есть многопоточность!
Это один поток с проверкой условия и переключением по нему.

Алексей 29 января 2021, 17:12

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

Иван 30 января 2021, 21:10

Алексей, есть еще одна прикольная штука - прерывания. Можете рассказать о них?

Вам понравилось? Расскажите о своем опыте своим друзьям в социальных сетях. Пусть им понравится тоже!

Подпишитесь на нашу рассылку

Подписаться

Остались вопросы по качеству обучения?

Вы можете задать их любым удобным для вас способом:

Приемная директора

Обратиться

Позвонив по телефону +7 9000 295 020

Отправить на e-mail pismadir@robo74.ru

Анкета по оценке удовлетворенности качеством оказания образовательных услуг общеобразовательной организацией

Оценить качество

Нажимая кнопку «Подписаться», я даю согласие на обработку моих персональных данных согласно 152-ФЗ

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