#include <stdio.h>
#include <math.h>
#include <stdlib.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
//const uint32_t Lmax = 2; //mm
const float Lmax = 65;//42; //mm
uint32_t T = 500;//330; //ms
// Tablica przechowująca pozycje (w mm) dla każdej milisekundy
float positions[1000+1]; // 0-1000 ms
uint32_t steps[1000+1]; // 0-1000 ms
int32_t stepsToMove[1000+1]; // 0-1000 ms
int32_t stepsToMoveLimit[1000+1]; // 0-1000 ms
int32_t stepsToMovePamiec = 0;
const uint32_t maxStepsPerMs = 4;//1000 / MIN_ODSTEP_MIEDZY_KOLEJNYMI_IMPULSAMI_US;
uint32_t currentPosition = 0;
uint32_t targetPosition = 0;
int32_t delta = 0;
//uint32_t stepsToMove = 0;
// for(int k=0; k<20; k++){
// Inicjalizacja tablicy przechowującej pozycje (w mm) dla każdej milisekundy
int t, L;
int main(void)
{
//for (t = 0; t <= T; t+10) {
t = 500;
for (L = 0; L <= Lmax; L++) {
positions
[t
] = (L
/ 2) * (sin((2.0 * t
/ T
) * M_PI
- M_PI
/2) + 1); steps[t] = roundf(positions[t] * STEPS_PER_MM);
targetPosition = steps[t];
delta = targetPosition - currentPosition;
if( abs(delta
) > maxStepsPerMs
) {
break;
if( delta > 0)
{
stepsToMove[t] = maxStepsPerMs;
}
else
{
stepsToMove[t] = -1 * maxStepsPerMs;
}
}
else
{
stepsToMove[t] = delta;
}
stepsToMoveLimit[t] = stepsToMove[t] + stepsToMovePamiec;
stepsToMovePamiec = stepsToMoveLimit[t];
currentPosition = stepsToMoveLimit[t];//targetPosition;
}
if (L
> Lmax
) printf("OK %d", L
);
}