fork(1) 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. //const uint32_t Lmax = 2; //mm
  10. const float Lmax = 100;//42; //mm
  11. uint32_t T = 1000;//330; //ms
  12. // Tablica przechowująca pozycje (w mm) dla każdej milisekundy
  13. float positions[1000+1]; // 0-1000 ms
  14. uint32_t steps[1000+1]; // 0-1000 ms
  15. int32_t stepsToMove[1000+1]; // 0-1000 ms
  16. int32_t stepsToMoveLimit[1000+1]; // 0-1000 ms
  17. int32_t stepsToMovePamiec = 0;
  18. const uint32_t maxStepsPerMs = 4;//1000 / MIN_ODSTEP_MIEDZY_KOLEJNYMI_IMPULSAMI_US;
  19. uint32_t currentPosition = 0;
  20. uint32_t targetPosition = 0;
  21. int32_t delta = 0;
  22. //uint32_t stepsToMove = 0;
  23. // for(int k=0; k<20; k++){
  24. // Inicjalizacja tablicy przechowującej pozycje (w mm) dla każdej milisekundy
  25. int t = 0;
  26. int main(void)
  27. {
  28.  
  29.  
  30.  
  31. for (t = 0; t <= T; t++) {
  32. positions[t] = (Lmax / 2) * (sin((2.0 * t / T) * M_PI - M_PI/2) + 1);
  33. steps[t] = roundf(positions[t] * STEPS_PER_MM);
  34. targetPosition = steps[t];
  35. delta = targetPosition - currentPosition;
  36.  
  37.  
  38.  
  39. if( abs(delta) > maxStepsPerMs)
  40. {
  41. printf("Za dużo: %d \n", t);
  42. break;
  43. if( delta > 0)
  44. {
  45. stepsToMove[t] = maxStepsPerMs;
  46. }
  47. else
  48. {
  49. stepsToMove[t] = -1 * maxStepsPerMs;
  50. }
  51. }
  52. else
  53. {
  54. stepsToMove[t] = delta;
  55. }
  56.  
  57. // Generuj impulsy
  58. //for (int i = 0; i < abs(stepsToMove[t]); i++) {
  59. // // Ustaw kierunek
  60. // if( stepsToMove[t] > 0)
  61. // {
  62. // SerwoDirUp(&Serwo1);
  63. // }
  64. // else
  65. // {
  66. // SerwoDirDown(&Serwo1);
  67. // }
  68.  
  69. // SerwoImpSet(&Serwo1);
  70. // TurnOnLedSys();
  71. // TurnOffLedSys();
  72. // SerwoImpReset(&Serwo1);
  73. // TurnOnLedSys();
  74. // TurnOffLedSys();
  75.  
  76. //}
  77. // digitalWrite(PULSE_PIN, HIGH);
  78. // delayMicroseconds(50); // Minimalny czas trwania impulsu
  79. // digitalWrite(PULSE_PIN, LOW);
  80. // delayMicroseconds(50);
  81. // }
  82. stepsToMoveLimit[t] = stepsToMove[t] + stepsToMovePamiec;
  83. stepsToMovePamiec = stepsToMoveLimit[t];
  84. currentPosition = stepsToMoveLimit[t];//targetPosition;
  85.  
  86. }
  87. printf("%d", t);
  88. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
1001