dx=(Ax-Axprevious)/dt //dt - шаг времени между двумя измерениями показаний акселерометра, можно обойтись и без него, но тогда масштабы чисел другие будут
Axprevious=Ax
if (abs(dx)<50) then //50 - порог ускорения, при котором считается, что кубик находится в состоянии покоя
idlecount+=1//количество итераций кода, в которых ускорения не было
else
idlecount=0
end if
if idlecount>5 then //проверка на покой
if 8<abs(Ax+Ay+Az)<12 then //проверяем, остановился ли кубик
Side=round(Ax*1/9.8)+round(Ay*2/9.8)+round(Az*3/9.8) // здесь получится сторона куба в диапазоне от -3 до 3 без 0
end if
Ax=(Xinput-Ax)*dt/0.1+Ax //Xinput - значение с датчика, 0.1 - постоянная времени в секундах, чем больше, тем меньше помех будет и тем выше время реакции, 0.1 близко к балансу
//dt - шаг интегрирования, если сигнал снимаете с частотой 100 Гц, можно взять как 1/100