#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
#define L_MAX 200//mm
#define T_MAX 3000//3s
#define T_KROK 10//co 10ms
uint32_t KlusLenTable[(T_MAX / T_KROK) + 1];
uint32_t CheckMaxWysuwLen(uint32_t L, uint32_t T);
void KlusMaxLenTable(uint32_t* KlusLenTable);
//
#define G 10//m/s2
uint32_t g_time = 40;
//uint32_t GTable[g_time +1];
uint32_t droga, velocity;
int main(void) {
for(int i=0; i<=g_time; i++) {
droga = 5*i*i;
velocity = G*i;
printf("droga=%d prędkość=%d\n", droga
, velocity
); }
// KlusMaxLenTable(KlusLenTable);
//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 Lmax, uint32_t T)
{
float position;
uint32_t steps;
uint32_t currentPosition = 0;
uint32_t targetPosition;
int delta;
int t, len = 0;
if (0 == T) return len;
for (len = 0; len <= Lmax; len++)
{
for (t = 0; t <= T; t++)
{
position
= (STEPS_PER_MM
* len
/ 2) * (sin((2.0 * t
/ T
) * M_PI
- M_PI
/2) + 1); steps = roundf(position);// * STEPS_PER_MM);
targetPosition = steps;
delta = targetPosition - currentPosition;
if( abs(delta
) > MAX_STEPS_PER_MS
) break; currentPosition = targetPosition;
}
if (t < T ) return len-1;
}
return Lmax;
}
void KlusMaxLenTable(uint32_t* KlusLenTable)
{
int k = 0, t;
//tabela do wklejenia do kodu
printf("KlusMaxLenTable[%d] = {", T_MAX
/T_KROK
+ 1); for (t = 0; t <= T_MAX; t += T_KROK, k++)//co 10mm
{
KlusLenTable[k] = CheckMaxWysuwLen(L_MAX, t);
printf("%d, ", KlusLenTable
[k
]); }
//podglad
for (k = 0; k <= T_MAX/T_KROK; k++)//co 10mm
{
printf("t=%d Lmax=%d, ", k
*T_KROK
, KlusLenTable
[k
]); }
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CgojZGVmaW5lIE1fUEkgMy4xNDE1CiNkZWZpbmUgdWludDMyX3QJaW50CiNkZWZpbmUgaW50MzJfdAlpbnQKI2RlZmluZSBLUk9LCTAuMS8vbW0KI2RlZmluZSBTVEVQU19QRVJfTU0JKDEgLyBLUk9LKSAgLy8gMTAga3Jva8OzdyBuYSAxIG1tCiNkZWZpbmUgTUFYX1NURVBTX1BFUl9NUyAgNCAKCiNkZWZpbmUgTF9NQVgJMjAwLy9tbQojZGVmaW5lIFRfTUFYCTMwMDAvLzNzCiNkZWZpbmUgVF9LUk9LCTEwLy9jbyAxMG1zCnVpbnQzMl90IEtsdXNMZW5UYWJsZVsoVF9NQVggLyBUX0tST0spICsgMV07Cgp1aW50MzJfdCBDaGVja01heFd5c3V3TGVuKHVpbnQzMl90IEwsIHVpbnQzMl90IFQpOwp2b2lkIEtsdXNNYXhMZW5UYWJsZSh1aW50MzJfdCogS2x1c0xlblRhYmxlKTsKCgovLwojZGVmaW5lIEcJMTAvL20vczIKdWludDMyX3QgZ190aW1lID0gNDA7Ci8vdWludDMyX3QgR1RhYmxlW2dfdGltZSArMV07CnVpbnQzMl90IGRyb2dhLCB2ZWxvY2l0eTsKCmludCBtYWluKHZvaWQpIHsKCQoJZm9yKGludCBpPTA7IGk8PWdfdGltZTsgaSsrKSB7CgkJZHJvZ2EgPSA1KmkqaTsKCQl2ZWxvY2l0eSA9IEcqaTsKCQlwcmludGYoImRyb2dhPSVkIHByxJlka2/Fm8SHPSVkXG4iLCBkcm9nYSwgdmVsb2NpdHkpOwoJfQoJCgkKCQovLwlLbHVzTWF4TGVuVGFibGUoS2x1c0xlblRhYmxlKTsKCQoJLy9wcmludGYoIiVkIFxuIiwgdGltKTsKLy8JaWYgKHRpbSA+IFQpIHByaW50ZigiT0sgJWQgXG4iLCB0aW0pOwovLwllbHNlIHByaW50ZigiWmEgZHXFvHkgd3lzdXcgJWQgXG4iLCB0aW0pOwoJCglyZXR1cm4gMDsKfQoKdWludDMyX3QgQ2hlY2tNYXhXeXN1d0xlbih1aW50MzJfdCBMbWF4LCB1aW50MzJfdCBUKQp7CglmbG9hdCBwb3NpdGlvbjsKCXVpbnQzMl90IHN0ZXBzOwoJdWludDMyX3QgY3VycmVudFBvc2l0aW9uID0gMDsKCXVpbnQzMl90IHRhcmdldFBvc2l0aW9uOwoJaW50IGRlbHRhOwoJaW50IHQsIGxlbiA9IDA7CgoJaWYgKDAgPT0gVCkgcmV0dXJuIGxlbjsKCglmb3IgKGxlbiA9IDA7IGxlbiA8PSBMbWF4OyBsZW4rKykKCXsKCQlmb3IgKHQgPSAwOyB0IDw9IFQ7IHQrKykKCQl7CgkJCXBvc2l0aW9uID0gKFNURVBTX1BFUl9NTSAqIGxlbiAvIDIpICogKHNpbigoMi4wICogdCAvIFQpICogTV9QSSAtIE1fUEkvMikgKyAxKTsKCQkJc3RlcHMgPSByb3VuZGYocG9zaXRpb24pOy8vICogU1RFUFNfUEVSX01NKTsKCQkJdGFyZ2V0UG9zaXRpb24gPSBzdGVwczsKCQkJZGVsdGEgPSB0YXJnZXRQb3NpdGlvbiAtIGN1cnJlbnRQb3NpdGlvbjsKCQkJaWYoIGFicyhkZWx0YSkgPiBNQVhfU1RFUFNfUEVSX01TKSBicmVhazsKCQkJY3VycmVudFBvc2l0aW9uID0gdGFyZ2V0UG9zaXRpb247CgkJfQoJCWlmICh0IDwgVCApIHJldHVybiBsZW4tMTsKCX0KCXJldHVybiBMbWF4Owp9CnZvaWQgS2x1c01heExlblRhYmxlKHVpbnQzMl90KiBLbHVzTGVuVGFibGUpCnsKCWludCBrID0gMCwgdDsKCQoJLy90YWJlbGEgZG8gd2tsZWplbmlhIGRvIGtvZHUKCXByaW50ZigiS2x1c01heExlblRhYmxlWyVkXSA9IHsiLCBUX01BWC9UX0tST0sgKyAxKTsKCWZvciAodCA9IDA7IHQgPD0gVF9NQVg7IHQgKz0gVF9LUk9LLCBrKyspLy9jbyAxMG1tCgl7CgkJS2x1c0xlblRhYmxlW2tdID0gQ2hlY2tNYXhXeXN1d0xlbihMX01BWCwgdCk7CgkJcHJpbnRmKCIlZCwgIiwgS2x1c0xlblRhYmxlW2tdKTsKCX0KCXByaW50ZigifVxuIik7CgkvL3BvZGdsYWQKCQlmb3IgKGsgPSAwOyBrIDw9IFRfTUFYL1RfS1JPSzsgaysrKS8vY28gMTBtbQoJewoJCXByaW50ZigidD0lZCBMbWF4PSVkLCAiLCBrKlRfS1JPSywgS2x1c0xlblRhYmxlW2tdKTsKCX0KCn0K