Технический форум по робототехнике.
Duhas » 29 мар 2011, 22:17
имхается мне что только добавляя сравнение мин-а и макс-а в условие...
setar » 29 мар 2011, 22:22
думаю должна быть функция возвращающая сначала максимум из пары (массива может быть), затем минимум из пары
Duhas » 29 мар 2011, 22:25
что то подсказывает что это 100% дольше по выполнению.. чем иф(задание больше мин и мин больше макс или задание больше макс и макс больше мин)
setar » 29 мар 2011, 22:42
ок, пока сделаю так,
если будут еще идеи - пишите.
спасибо
Добавлено спустя 11 минут 31 секунду:похоже ?
- Код: Выделить всё • Развернуть
if (servo_max_pwm[i]>servo_min_pwm[i]) {
if (servo_pwm[i]>servo_max_pwm[i]) servo_pwm[i]=servo_max_pwm[i];
if (servo_pwm[i]<servo_min_pwm[i]) servo_pwm[i]=servo_min_pwm[i];
} else {
if (servo_pwm[i]>servo_min_pwm[i]) servo_pwm[i]=servo_min_pwm[i];
if (servo_pwm[i]<servo_max_pwm[i]) servo_pwm[i]=servo_max_pwm[i];
}
Duhas » 29 мар 2011, 23:09
ну да, только я правда предлагал прям в условие.. но наверно если компилятор умный - то все равно.. а если туповат, то так быстрее )
setar » 31 мар 2011, 00:53
добавил контроль горизонта тела (пока ручной)
Виталий » 01 апр 2011, 12:18
- Код: Выделить всё • Развернуть
servo_pwm[i] = Math.Min(servo_pwm[i], servo_max_pwm[i]);
servo_pwm[i] = Math.Max(servo_pwm[i], servo_min_pwm[i]);
Тогда servo_pwm[i] будет в диапазоне servo_min_pwm[i]..servo_max_pwm[i].
Но лучше просто сразу функцию определить:
- Код: Выделить всё • Развернуть
int Bound(int v, int min, int max)
{
return Math.Max(Math.Min(v, max), min);
}
Как-то так...
setar » 01 апр 2011, 12:19
красиво, так и сделаю.
спасибо
boez » 01 апр 2011, 13:03
Стоп, а разве это работает в ситуации когда max<min?
Виталий » 01 апр 2011, 14:46
Не работает, но это идеологически неверная ситуация...
Можно вот так...
- Код: Выделить всё • Развернуть
int Bound(int v, int a, int b)
{
return Math.Max(Math.Min(v, Math.Max(a, b)), Math.Min(a, b));
}
setar » 01 апр 2011, 14:55
это идеологически нужно, min и max это углы, они могут быть достигнуты при большом PWM или маленьком PWM
Strijar » 01 апр 2011, 15:17
Виталий писал(а):- Код: Выделить всё • Развернуть
int Bound(int v, int a, int b)
{
return Math.Max(Math.Min(v, Math.Max(a, b)), Math.Min(a, b));
}
Жэсть... может все-ж при установке min и max один раз проверять на min < max, чем делать это при каждом шевелении суставом?
Виталий » 01 апр 2011, 16:31
Да, жесть. Потому что min всегда меньше max.
это идеологически нужно, min и max это углы, они могут быть достигнуты при большом PWM или маленьком PWM
Ну так проверяй угол, а не ШИМ...
setar » 01 апр 2011, 16:36
вариант в принципе...
wizard256 » 12 апр 2011, 06:01
Здравствуйте! Программер из меня никакой но я нашёл в инете вот ето
http://www.lynxmotion.net/viewtopic.php?t=4397 может кто разберётся?