Решение задачи по робототехнике
Написать программу,
состоящую из 3-х потоков, которая управляет движением робота: 1-ый поток управляет
таймером, 2-ой управляет прямым движением, записывая шаги в 1-ый список, 3-ий -
обратным движением, записывая шаги во 2-ой список. В программе задается время
движения в прямом и обратном движении и отслеживается с помощью таймера.
Применить в программе механизмы синхронизации с помощью mutex, добавив
переменную в mutex. Синхронизирующим событием будет изменение направления
движения.
1-ый поток (управление таймером). Алгоритм написания 1-ой программы:
- Для начала необходимо создать переменные: deltat, time1, time2, mutex, t21.
- Вначале программы следует поставить перезапуск таймера, чтобы при каждом запуске программы таймер начинал работать с 0.
- Далее deltat приравниваем единице, time1 и time2 присаиваем первоначальное значение таймера, mutex присваиваем 0.
- Открываем цикл "Всегда". Внутри цикла time2 присваиваем значение таймера, т.е. данной переменной присваиваем следующие показания таймера. Переменной t21 присваиваем разность переменных time2 и time1.
- Далее внутри цикла "Всегда" открываем цикл с условием "Если t21 > deltat", т.е. сравниваем значение t21 и deltat. Далее time1 присваиваем значение time2, т.е. time1 присваиваем новое значение. Данный цикл позволяет отмерять шаги робота.
- Далее внутри цикла "Если t21 > deltat" открываем цикл "Если mutex=1", то mutex присваиваем значение 0 или (Если mutex=0) mutex присваиваем значение 1. Когда mutex присваиваем значение 0, робот движется вперед, когда mutex присваиваем значение 1, робот движется назад.

2-ой поток (управление прямым движением). Алгоритм написания 2-ой программы:
- Создаем список "Вперед". В него будут записываться шаги робота при движении вперед.
- Создаем переменную х. Она будет служить счетчиком, записывающим шаги робота в список.
- Программа начинается с функции "Удалить все из Вперед": перед каждым запуском программы список "Вперед" очищается.
- х присваиваем значение 0.
- Открываем цикл "Всегда". В него ставим условие "Если mutex=0", то пишем функции "мотор в сюда": робот поедет вперед; "включить мотор на 0.2 сек": робот проедет вперед 0.2 сек; "добавить х к Вперед": шаг записываем в список "Вперед"; "изменить х на 1"; счетчик (шаг) увеличиваем на единицу.
- Таким образом, при mutex = 0, робот движется вперед.
3-ий поток (управление обратным движением). Алгоритм написания аналогичен со 2-ой программой.