Как переместить робота на определенное расстояние и при этом управлять датчиками?

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

void loop(){

if (Obstacle==false){  // if no obstacles

forward(1000);  // move forward 1000 mm
backward(1000); // move backward 1000 mm

//...
}
}

Вперед функция:

void forward(int distance){  // distance in mm

int desiredRotationNumber= round(distance/circumference) ;

int desiredTicks = encoderResolution * desiredRotationNumber;

if (counter < desiredTicks) // variable counter counts the pulses from the encoder
{
analogWrite(motor,255);
}
else
{
analogWrite (motor,0);
}

}

Проблема в том, что если я использую условие «если», моя функция вперед будет выполняться только один раз, а затем программа переходит к следующей функции, но если я использую «цикл цикла», мои функции перемещения будут выполняться правильно, но я не буду в состоянии управлять датчиками или что-нибудь.

0

Решение

Что вы, вероятно, хотите, чтобы сократить ваши шаги с шагом, и проверить датчики между каждым из этих шагов:

while (distance > 0 && !Obstacle){
forward(step);
distance-=step;
check_sensors();
}

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

2

Другие решения


По вопросам рекламы [email protected]