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. #define MAX_STEPS_PER_MS 4
  10.  
  11. #define L_MAX 200//mm
  12. #define T_MAX 3000//3s
  13. #define T_KROK 10//co 10ms
  14. uint32_t KlusLenTable[(T_MAX / T_KROK) + 1];
  15.  
  16. uint32_t CheckMaxWysuwLen(uint32_t L, uint32_t T);
  17. void KlusMaxLenTable(uint32_t* KlusLenTable);
  18.  
  19.  
  20. //
  21. #define G 10//m/s2
  22. uint32_t g_time = 40;
  23. //uint32_t GTable[g_time +1];
  24. uint32_t droga, velocity;
  25.  
  26. int main(void) {
  27.  
  28. for(int i=0; i<=g_time; i++) {
  29. droga = 5*i*i;
  30. velocity = G*i;
  31. printf("droga=%d prędkość=%d\n", droga, velocity);
  32. }
  33.  
  34.  
  35.  
  36. // KlusMaxLenTable(KlusLenTable);
  37.  
  38. //printf("%d \n", tim);
  39. // if (tim > T) printf("OK %d \n", tim);
  40. // else printf("Za duży wysuw %d \n", tim);
  41.  
  42. return 0;
  43. }
  44.  
  45. uint32_t CheckMaxWysuwLen(uint32_t Lmax, uint32_t T)
  46. {
  47. float position;
  48. uint32_t steps;
  49. uint32_t currentPosition = 0;
  50. uint32_t targetPosition;
  51. int delta;
  52. int t, len = 0;
  53.  
  54. if (0 == T) return len;
  55.  
  56. for (len = 0; len <= Lmax; len++)
  57. {
  58. for (t = 0; t <= T; t++)
  59. {
  60. position = (STEPS_PER_MM * len / 2) * (sin((2.0 * t / T) * M_PI - M_PI/2) + 1);
  61. steps = roundf(position);// * STEPS_PER_MM);
  62. targetPosition = steps;
  63. delta = targetPosition - currentPosition;
  64. if( abs(delta) > MAX_STEPS_PER_MS) break;
  65. currentPosition = targetPosition;
  66. }
  67. if (t < T ) return len-1;
  68. }
  69. return Lmax;
  70. }
  71. void KlusMaxLenTable(uint32_t* KlusLenTable)
  72. {
  73. int k = 0, t;
  74.  
  75. //tabela do wklejenia do kodu
  76. printf("KlusMaxLenTable[%d] = {", T_MAX/T_KROK + 1);
  77. for (t = 0; t <= T_MAX; t += T_KROK, k++)//co 10mm
  78. {
  79. KlusLenTable[k] = CheckMaxWysuwLen(L_MAX, t);
  80. printf("%d, ", KlusLenTable[k]);
  81. }
  82. printf("}\n");
  83. //podglad
  84. for (k = 0; k <= T_MAX/T_KROK; k++)//co 10mm
  85. {
  86. printf("t=%d Lmax=%d, ", k*T_KROK, KlusLenTable[k]);
  87. }
  88.  
  89. }
  90.  
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
droga=0 prędkość=0
droga=5 prędkość=10
droga=20 prędkość=20
droga=45 prędkość=30
droga=80 prędkość=40
droga=125 prędkość=50
droga=180 prędkość=60
droga=245 prędkość=70
droga=320 prędkość=80
droga=405 prędkość=90
droga=500 prędkość=100
droga=605 prędkość=110
droga=720 prędkość=120
droga=845 prędkość=130
droga=980 prędkość=140
droga=1125 prędkość=150
droga=1280 prędkość=160
droga=1445 prędkość=170
droga=1620 prędkość=180
droga=1805 prędkość=190
droga=2000 prędkość=200
droga=2205 prędkość=210
droga=2420 prędkość=220
droga=2645 prędkość=230
droga=2880 prędkość=240
droga=3125 prędkość=250
droga=3380 prędkość=260
droga=3645 prędkość=270
droga=3920 prędkość=280
droga=4205 prędkość=290
droga=4500 prędkość=300
droga=4805 prędkość=310
droga=5120 prędkość=320
droga=5445 prędkość=330
droga=5780 prędkość=340
droga=6125 prędkość=350
droga=6480 prędkość=360
droga=6845 prędkość=370
droga=7220 prędkość=380
droga=7605 prędkość=390
droga=8000 prędkość=400