Подождать с условием. Как?

Modsley
Offline
Зарегистрирован: 14.01.2018

Приветствую.

Задача состоит в том чтобы запустить поворот устройства, подождать, пока оно повернётся на заданный угол и выйти из функции, вернув true. 

Если же ему не удалось повернуться, выйти по таймауту и вернуть false. 

Во время поворота основной код не выполняется, ждёт результата поворота.

 

Так-то оно работает. 

Но почему-то как-то кажется не изящным. 

Успокойте меня, пожалуйста, ну или посоветуйте, как правильнее. 

 

Спасибо. 

 

boolean makeTurn(int turnDegree, int turnDirection){
	myOS.restartTask(imuGetData);
	unsigned long turnSafe = millis();
	int startAngle = zAngle;
	setMove(0, turnDirection, turnSharpness, speed);
	while (true){
		if ((zAngle-startAngle)*turnDirection > turnDegree) {setMove(0, 0, turnSharpness, speed); myOS.pauseTask(imuGetData); return true;}
		if ((millis() - turnSafe)>20000) {setMove(0, 0, turnSharpness, speed); myOS.pauseTask(imuGetData); return false; }
	}
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Да потянет для сельской местности. Если хочется меньше слов - из while выпрыгивайте через break с установкой переменной rc (например) в true/false, после while исполняйте обязательную программу и return rc.

5N62V
Offline
Зарегистрирован: 25.02.2016

параметр функции  направление куда вращать можно bool переменной описать. Не Бог весть какая экономия, но если вопрос принципа, то да :)