fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define M_PI 3.1415
  5. #define uint32_t int
  6. #define int32_t int
  7. #define KROK 0.1//mm
  8. #define STEPS_PER_MM (1 / KROK) // 10 kroków na 1 mm
  9. #define MAX_STEPS_PER_MS 4
  10.  
  11. uint32_t CheckMaxWysuwLen(uint32_t L, uint32_t T);
  12.  
  13. uint32_t L = 66;//mm
  14. uint32_t T = 500;//ms
  15.  
  16. uint32_t tim = 0;
  17.  
  18. int main(void) {
  19.  
  20. tim = CheckMaxWysuwLen(L, T);
  21.  
  22. //printf("%d \n", tim);
  23. if (tim > T) printf("OK %d \n", tim);
  24. else printf("Za duży wysuw %d \n", tim);
  25.  
  26. return 0;
  27. }
  28.  
  29. uint32_t CheckMaxWysuwLen(uint32_t L, uint32_t T)
  30. {
  31. float position;
  32. uint32_t steps;
  33. uint32_t currentPosition = 0;
  34. uint32_t targetPosition;
  35. int32_t delta;
  36. int t;
  37.  
  38. for (t = 0; t <= T; t++)
  39. {
  40. position = (L / 2) * (sin((2.0 * t / T) * M_PI - M_PI/2) + 1);
  41. steps = roundf(position * STEPS_PER_MM);
  42. targetPosition = steps;
  43. delta = targetPosition - currentPosition;
  44. //printf("delta=%d t=%d \n", delta, t);
  45. if( abs(delta) > MAX_STEPS_PER_MS)
  46. {
  47. break;
  48. }
  49. currentPosition = targetPosition;
  50. }
  51. return t;
  52. }
  53.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Za duży wysuw 114