fork download
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4.  
  5. #define M_PI 3.1415
  6. #define uint32_t int
  7. #define int32_t int
  8. #define KROK 0.1//mm
  9. #define STEPS_PER_MM (1 / KROK) // 10 kroków na 1 mm
  10. //const uint32_t Lmax = 2; //mm
  11. const float Lmax = 65;//42; //mm
  12. uint32_t T = 500;//330; //ms
  13. // Tablica przechowująca pozycje (w mm) dla każdej milisekundy
  14. float positions[1000+1]; // 0-1000 ms
  15. uint32_t steps[1000+1]; // 0-1000 ms
  16. int32_t stepsToMove[1000+1]; // 0-1000 ms
  17. int32_t stepsToMoveLimit[1000+1]; // 0-1000 ms
  18. int32_t stepsToMovePamiec = 0;
  19. const uint32_t maxStepsPerMs = 4;//1000 / MIN_ODSTEP_MIEDZY_KOLEJNYMI_IMPULSAMI_US;
  20. uint32_t currentPosition = 0;
  21. uint32_t targetPosition = 0;
  22. int32_t delta = 0;
  23. //uint32_t stepsToMove = 0;
  24. // for(int k=0; k<20; k++){
  25. // Inicjalizacja tablicy przechowującej pozycje (w mm) dla każdej milisekundy
  26. int t, L;
  27. int main(void)
  28. {
  29.  
  30.  
  31.  
  32. //for (t = 0; t <= T; t+10) {
  33. t = 500;
  34.  
  35.  
  36. for (L = 0; L <= Lmax; L++) {
  37. positions[t] = (L / 2) * (sin((2.0 * t / T) * M_PI - M_PI/2) + 1);
  38. steps[t] = roundf(positions[t] * STEPS_PER_MM);
  39. targetPosition = steps[t];
  40. delta = targetPosition - currentPosition;
  41.  
  42.  
  43.  
  44. if( abs(delta) > maxStepsPerMs)
  45. {
  46. printf("Za dużo: %d \n", L);
  47. break;
  48. if( delta > 0)
  49. {
  50. stepsToMove[t] = maxStepsPerMs;
  51. }
  52. else
  53. {
  54. stepsToMove[t] = -1 * maxStepsPerMs;
  55. }
  56. }
  57. else
  58. {
  59. stepsToMove[t] = delta;
  60. }
  61.  
  62. stepsToMoveLimit[t] = stepsToMove[t] + stepsToMovePamiec;
  63. stepsToMovePamiec = stepsToMoveLimit[t];
  64. currentPosition = stepsToMoveLimit[t];//targetPosition;
  65.  
  66. }
  67.  
  68. if (L > Lmax) printf("OK %d", L);
  69.  
  70.  
  71.  
  72. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
OK 66