Как написать программу для выполнения двух разных циклов | Задача?
Я хочу написать программу для радиоуправляемой навигации
Самолет должен пройти к 2 путевым точкам waypoint_1 & путевая точка_2 Когда он достигнет waypoint_1 (с промахом =< 5), перейдите к waypoint_2
Но у меня проблема.
Взгляните сначала на это:
void loop(){
if (distance-to-waypoint_1 > 5 meters) {
Navigate to waypoint_1
if distace-to-waypoint_1 < 5 meters :
Navigate-to-waypoint_2
Если я использую такой код, самолет направится к waypoint_1, и когда он достигнет места, которое находится на расстоянии менее 5 метров от waypoint_1, он направится к waypoint_2, но если самолет улетит, и расстояние между его местоположением и waypoint_1 проходит более 5 м, самолет возвращается к предыдущей навигации и снова направляется к waypoint_1, игнорируя навигацию к waypoint_2
Итак, мне нужна форма программы, чтобы сначала выполнить цикл для навигации, чтобы провести самолет к waypoint_1, а когда он достигнет waypoint_1, сделать еще один цикл, чтобы провести самолет к waypoint_2
Спасибо
1 ответ
Лучший ответ:
Я думаю, вам следует использовать другую логику, используя переменную для хранения текущей целевой путевой точки и разделяя код для достижения путевой точки и ее изменения.
Что-то вроде этого (в псевдокоде):
declare variable target_waypoint and set it to waypoint1
loop
Fly towards target waypoint
if distance to target waypoint lower than 5
change target_waypoint to waypoint 2
Вы можете легко расширить это для большего количества путевых точек, используя массив путевых точек и переменную, содержащую индекс следующей путевой точки:
declare waypoints as array
declare index variable, initialize with zero
set target_waypoint to waypoints[index]
loop
Fly towards target waypoint
if distance to target waypoint lower than 5
increment index
if index greater than max index
Either set to zero to loop through all waypoints again
or do whatever you want to do after the waypoints
set target_waypoint to waypoints[index]
Код, который перемещает вас к путевой точке, не заботится о том, какая путевая точка будет следующей. Это только делает эту одну работу. И когда вы достигли путевой точки, вы просто перемещаете цель этого кода в другую позицию.
Так же, как если бы вы сами ходили между разными путевыми точками. Установите первую путевую точку в качестве цели, идите к ней, пока не достигнете ее, установите следующую путевую точку в качестве цели и повторите ходьбу.
- оператор if не работает с дробью, но работает с десятичным эквивалентом
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- Асинхронные вызовы функций в скетче ардуино
- Двигатель постоянного тока шумит, но не вращается
- Цикл While не прерывается
- как отправить аргумент объектам ESP8266WebServer в функции
- Реализовать связь Visible Light с помощью Arduino
- Скетч мигания ESP8266 не мигает светодиодом
Когда расстояние между положением самолета и путевой точкой_1 будет равно или меньше 5 метров, будет осуществляться навигация к путевой точке_2, но проблема в том, что когда самолет удаляется от путевой точки_1, чтобы перейти к путевой точке_2, его расстояние от путевой точки_1 будет более 5 метров, и первое условие if будет установлено снова, и он снова перейдет к waypoint_1., @Hamid 'Smith' Salehi
Из-за проблемы с условием if, если условие не будет работать для этой цели и будет установлено снова из-за расстояния, @Hamid 'Smith' Salehi
Хорошо, скажем, я хочу использовать расстояние в качестве критерия, чтобы узнать, где я нахожусь, а где нет, каким-то образом я измеряю расстояние между моей позицией и домом Боба, и если оно будет больше 5 метров, я знаю, что я не добрался до дома Боба, поэтому я воспользуюсь направлением, чтобы добраться до дома Боба. Когда расстояние (единственный критерий, который я использую) между моей позицией и домом Боба будет равно или меньше 5 метров, я знаю, что тогда я достиг дома Боба, я буду использовать другое направление, чтобы добраться до дома Мэри, но когда я уйду от Дом Боба, чтобы пойти в дом Мэри, расстояние между, @Hamid 'Smith' Salehi
Моя позиция и дом Боба будут больше 5 метров (поскольку единственным критерием, который я использую, является расстояние между моей позицией и домами), поэтому я буду использовать новое направление, чтобы снова вернуться к дому Боба., @Hamid 'Smith' Salehi
Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/140415/discussion-between-curious-guy-and-jsotola)., @Hamid 'Smith' Salehi