MegaJohn (04.07.2012 14:37, просмотров: 90) ответил mazur на Посоветуйте алгоритмы. Делаю девайс с шаговым двигателем и датчиками периметра. Сработка датчиков вызывает поворот вала ШД на угол соответствующий сработанному датчику. Есть сработанный датчик, есть вектор. Застрял на вот каком моменте. Вал может
типа такого ?
//------------------------------------------------------------------------------
// есть циклические величины, которые достигают какого то значения, переполнятся и становятся нулем ( к примеру секунды,минуты,часы,угол поворота вала )
// и в некоторых задачах возникает вопрос: имеется опопорная точка, и имеется текущая точка. Нужно понять кто кого опережает и на сколько
// эта функция собсвенно это и делает.
// к примеру есть опорное время 55мин (каждый час нужно поливать цветы в 55 мин )
// и есть текущее время X мин, нужно знать сколько времени осталось до поливки
// тогда s16 diff = dif_vals_linear2round( curr_time, 55, 60 );
// получили diff = -10 осталось 10 мин и сейчас 45мин,
// получили diff = +10, то это время прошло 10 мин назад и сейчас 5мин
s16 PREFIX dif_vals_linear2round( u16 target, u16 refer, u16 size )
{
u16 diff;
if( target <= refer )
{
diff = refer - target;
if( diff < ( size / 2 ) )
return target - refer;
else
return size - diff;
}
else
{
diff = target - refer;
if( diff < ( size / 2 ) )
return target - refer;
else
return diff - size;
}
}