#include <stdio.h>
#include <math.h>
#define M_PI 3.1415
#define uint32_t int
#define int32_t int
#define KROK 0.1//mm
#define STEPS_PER_MM (1 / KROK) // 10 kroków na 1 mm
#define MAX_STEPS_PER_MS 4
uint32_t CheckMaxWysuwLen(uint32_t L, uint32_t T);
uint32_t L = 66;//mm
uint32_t T = 500;//ms
uint32_t tim = 0;
int main(void) {
tim = CheckMaxWysuwLen(L, T);
//printf("%d \n", tim);
if (tim
> T
) printf("OK %d \n", tim
); else printf("Za duży wysuw %d \n", tim
);
return 0;
}
uint32_t CheckMaxWysuwLen(uint32_t L, uint32_t T)
{
float position;
uint32_t steps;
uint32_t currentPosition = 0;
uint32_t targetPosition;
int32_t delta;
int t;
for (t = 0; t <= T; t++)
{
position
= (L
/ 2) * (sin((2.0 * t
/ T
) * M_PI
- M_PI
/2) + 1); steps = roundf(position * STEPS_PER_MM);
targetPosition = steps;
delta = targetPosition - currentPosition;
//printf("delta=%d t=%d \n", delta, t);
if( abs(delta
) > MAX_STEPS_PER_MS
) {
break;
}
currentPosition = targetPosition;
}
return t;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIE1fUEkgMy4xNDE1CiNkZWZpbmUgdWludDMyX3QJaW50CiNkZWZpbmUgaW50MzJfdAlpbnQKI2RlZmluZSBLUk9LCTAuMS8vbW0KI2RlZmluZSBTVEVQU19QRVJfTU0JKDEgLyBLUk9LKSAgLy8gMTAga3Jva8OzdyBuYSAxIG1tCiNkZWZpbmUgTUFYX1NURVBTX1BFUl9NUyAgNCAKCnVpbnQzMl90IENoZWNrTWF4V3lzdXdMZW4odWludDMyX3QgTCwgdWludDMyX3QgVCk7Cgp1aW50MzJfdCBMID0gNjY7Ly9tbQp1aW50MzJfdCBUID0gNTAwOy8vbXMKCnVpbnQzMl90IHRpbSA9IDA7CgppbnQgbWFpbih2b2lkKSB7CgkKCXRpbSA9IENoZWNrTWF4V3lzdXdMZW4oTCwgVCk7CgkKCS8vcHJpbnRmKCIlZCBcbiIsIHRpbSk7CglpZiAodGltID4gVCkgcHJpbnRmKCJPSyAlZCBcbiIsIHRpbSk7CgllbHNlIHByaW50ZigiWmEgZHXFvHkgd3lzdXcgJWQgXG4iLCB0aW0pOwoJCglyZXR1cm4gMDsKfQoKdWludDMyX3QgQ2hlY2tNYXhXeXN1d0xlbih1aW50MzJfdCBMLCB1aW50MzJfdCBUKQp7CglmbG9hdCBwb3NpdGlvbjsKCXVpbnQzMl90IHN0ZXBzOwoJdWludDMyX3QgY3VycmVudFBvc2l0aW9uID0gMDsKCXVpbnQzMl90IHRhcmdldFBvc2l0aW9uOwoJaW50MzJfdCBkZWx0YTsKCWludCB0OwoJCglmb3IgKHQgPSAwOyB0IDw9IFQ7IHQrKykgCgl7CgkgICAgcG9zaXRpb24gPSAoTCAvIDIpICogKHNpbigoMi4wICogdCAvIFQpICogTV9QSSAtIE1fUEkvMikgKyAxKTsKCSAgICBzdGVwcyA9IHJvdW5kZihwb3NpdGlvbiAqIFNURVBTX1BFUl9NTSk7CgkgICAgdGFyZ2V0UG9zaXRpb24gPSBzdGVwczsKCSAgICBkZWx0YSA9IHRhcmdldFBvc2l0aW9uIC0gY3VycmVudFBvc2l0aW9uOwoJICAgIC8vcHJpbnRmKCJkZWx0YT0lZCB0PSVkIFxuIiwgZGVsdGEsIHQpOwoJICAgIGlmKCBhYnMoZGVsdGEpID4gTUFYX1NURVBTX1BFUl9NUykKCSAgICB7CgkgICAgCWJyZWFrOwoJICAgIH0KCSAgICBjdXJyZW50UG9zaXRpb24gPSB0YXJnZXRQb3NpdGlvbjsKCX0KCXJldHVybiB0Owp9Cg==