unsigned char
+ выполняться это будет дольше. The function setitimer() sets the specified timer to the value in new_value. If old_value is non-NULL, the old value of the timer is stored there.
Timers decrement from it_value to zero, generate a signal, and reset to it_interval. A timer which is set to zero (it_value is zero or the timer expires and it_interval is zero) stops.
Ну и фильтрация, скажем, скользящей медианой тоже поможет (правда, нужно учитывать реальные возможности — вдруг ваш объект сможет мотаться со скоростью пару метров в секунду?).
Для обобщения на случай нескольких объектов придется выдумывать какой-нибудь протокол распознавания. Я бы взял недорогие приемники-передатчики на 315МГц и при их помощи посылал бы сначала сигнал объекту, что именно ему нужно будет сейчас реагировать на УЗ импульсы, а потом уже "пинговал" бы. Такой подход позволит упростить систему определения расстояний (т.е. фактически она будет работать как с одним объектом). Естественно, объекты должны быть достаточно небольшими, чтобы не создавать проблем (т.е. не поглощать УЗ).