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. #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];
  15.  
  16. uint32_t CheckMaxWysuwLen(uint32_t L, uint32_t T);
  17. void KlusMaxLenTable(uint32_t* KlusLenTable);
  18.  
  19.  
  20. int main(void) {
  21.  
  22. KlusMaxLenTable(KlusLenTable);
  23.  
  24. //printf("%d \n", tim);
  25. // if (tim > T) printf("OK %d \n", tim);
  26. // else printf("Za duży wysuw %d \n", tim);
  27.  
  28. return 0;
  29. }
  30.  
  31. uint32_t CheckMaxWysuwLen(uint32_t Lmax, uint32_t T)
  32. {
  33. float position;
  34. uint32_t steps;
  35. uint32_t currentPosition = 0;
  36. uint32_t targetPosition;
  37. int delta;
  38. int t, len = 0;
  39.  
  40. if (0 == T) return len;
  41.  
  42. for (len = 0; len <= Lmax; len++)
  43. {
  44. for (t = 0; t <= T; t++)
  45. {
  46. position = (len / 2) * (sin((2.0 * t / T) * M_PI - M_PI/2) + 1);
  47. steps = roundf(position * STEPS_PER_MM);
  48. targetPosition = steps;
  49. delta = targetPosition - currentPosition;
  50. if( abs(delta) > MAX_STEPS_PER_MS) break;
  51. currentPosition = targetPosition;
  52. }
  53. if (t < T ) return len-1;
  54. }
  55. return Lmax;
  56. }
  57. void KlusMaxLenTable(uint32_t* KlusLenTable)
  58. {
  59. int k = 0, t;
  60.  
  61. //tabela do wklejenia do kodu
  62. printf("KlusMaxLenTable[%d] = {", T_MAX/T_KROK);
  63. for (t = 0; t <= T_MAX; t += T_KROK, k++)//co 10mm
  64. {
  65. KlusLenTable[k] = CheckMaxWysuwLen(L_MAX, t);
  66. printf("%d, ", KlusLenTable[k]);
  67. }
  68. printf("}\n");
  69. //podglad
  70. for (k = 0; k <= T_MAX/T_KROK; k++)//co 10mm
  71. {
  72. printf("t=%d Lmax=%d, ", k*T_KROK, KlusLenTable[k]);
  73. }
  74.  
  75. }
  76.  
Success #stdin #stdout 3.21s 5288KB
stdin
Standard input is empty
stdout
KlusMaxLenTable[300] = {0, 1, 3, 5, 5, 7, 9, 9, 11, 11, 13, 15, 15, 17, 19, 19, 21, 23, 23, 25, 27, 27, 29, 29, 31, 33, 33, 35, 37, 37, 39, 41, 41, 43, 45, 45, 47, 47, 49, 51, 51, 53, 55, 55, 57, 59, 59, 61, 61, 63, 65, 65, 67, 69, 69, 71, 73, 73, 75, 77, 77, 79, 79, 81, 83, 83, 85, 87, 87, 89, 91, 91, 93, 93, 95, 97, 97, 99, 101, 101, 103, 105, 105, 107, 107, 109, 111, 111, 113, 115, 115, 117, 119, 119, 121, 121, 123, 125, 125, 127, 129, 129, 131, 133, 133, 135, 137, 137, 139, 139, 141, 143, 143, 145, 147, 147, 149, 151, 151, 153, 153, 155, 157, 157, 159, 161, 161, 163, 165, 165, 167, 167, 169, 171, 171, 173, 175, 175, 177, 179, 179, 181, 181, 183, 185, 185, 187, 189, 189, 191, 193, 193, 195, 195, 197, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, }
t=0 Lmax=0, t=10 Lmax=1, t=20 Lmax=3, t=30 Lmax=5, t=40 Lmax=5, t=50 Lmax=7, t=60 Lmax=9, t=70 Lmax=9, t=80 Lmax=11, t=90 Lmax=11, t=100 Lmax=13, t=110 Lmax=15, t=120 Lmax=15, t=130 Lmax=17, t=140 Lmax=19, t=150 Lmax=19, t=160 Lmax=21, t=170 Lmax=23, t=180 Lmax=23, t=190 Lmax=25, t=200 Lmax=27, t=210 Lmax=27, t=220 Lmax=29, t=230 Lmax=29, t=240 Lmax=31, t=250 Lmax=33, t=260 Lmax=33, t=270 Lmax=35, t=280 Lmax=37, t=290 Lmax=37, t=300 Lmax=39, t=310 Lmax=41, t=320 Lmax=41, t=330 Lmax=43, t=340 Lmax=45, t=350 Lmax=45, t=360 Lmax=47, t=370 Lmax=47, t=380 Lmax=49, t=390 Lmax=51, t=400 Lmax=51, t=410 Lmax=53, t=420 Lmax=55, t=430 Lmax=55, t=440 Lmax=57, t=450 Lmax=59, t=460 Lmax=59, t=470 Lmax=61, t=480 Lmax=61, t=490 Lmax=63, t=500 Lmax=65, t=510 Lmax=65, t=520 Lmax=67, t=530 Lmax=69, t=540 Lmax=69, t=550 Lmax=71, t=560 Lmax=73, t=570 Lmax=73, t=580 Lmax=75, t=590 Lmax=77, t=600 Lmax=77, t=610 Lmax=79, t=620 Lmax=79, t=630 Lmax=81, t=640 Lmax=83, t=650 Lmax=83, t=660 Lmax=85, t=670 Lmax=87, t=680 Lmax=87, t=690 Lmax=89, t=700 Lmax=91, t=710 Lmax=91, t=720 Lmax=93, t=730 Lmax=93, t=740 Lmax=95, t=750 Lmax=97, t=760 Lmax=97, t=770 Lmax=99, t=780 Lmax=101, t=790 Lmax=101, t=800 Lmax=103, t=810 Lmax=105, t=820 Lmax=105, t=830 Lmax=107, t=840 Lmax=107, t=850 Lmax=109, t=860 Lmax=111, t=870 Lmax=111, t=880 Lmax=113, t=890 Lmax=115, t=900 Lmax=115, t=910 Lmax=117, t=920 Lmax=119, t=930 Lmax=119, t=940 Lmax=121, t=950 Lmax=121, t=960 Lmax=123, t=970 Lmax=125, t=980 Lmax=125, t=990 Lmax=127, t=1000 Lmax=129, t=1010 Lmax=129, t=1020 Lmax=131, t=1030 Lmax=133, t=1040 Lmax=133, t=1050 Lmax=135, t=1060 Lmax=137, t=1070 Lmax=137, t=1080 Lmax=139, t=1090 Lmax=139, t=1100 Lmax=141, t=1110 Lmax=143, t=1120 Lmax=143, t=1130 Lmax=145, t=1140 Lmax=147, t=1150 Lmax=147, t=1160 Lmax=149, t=1170 Lmax=151, t=1180 Lmax=151, t=1190 Lmax=153, t=1200 Lmax=153, t=1210 Lmax=155, t=1220 Lmax=157, t=1230 Lmax=157, t=1240 Lmax=159, t=1250 Lmax=161, t=1260 Lmax=161, t=1270 Lmax=163, t=1280 Lmax=165, t=1290 Lmax=165, t=1300 Lmax=167, t=1310 Lmax=167, t=1320 Lmax=169, t=1330 Lmax=171, t=1340 Lmax=171, t=1350 Lmax=173, t=1360 Lmax=175, t=1370 Lmax=175, t=1380 Lmax=177, t=1390 Lmax=179, t=1400 Lmax=179, t=1410 Lmax=181, t=1420 Lmax=181, t=1430 Lmax=183, t=1440 Lmax=185, t=1450 Lmax=185, t=1460 Lmax=187, t=1470 Lmax=189, t=1480 Lmax=189, t=1490 Lmax=191, t=1500 Lmax=193, t=1510 Lmax=193, t=1520 Lmax=195, t=1530 Lmax=195, t=1540 Lmax=197, t=1550 Lmax=199, t=1560 Lmax=199, t=1570 Lmax=200, t=1580 Lmax=200, t=1590 Lmax=200, t=1600 Lmax=200, t=1610 Lmax=200, t=1620 Lmax=200, t=1630 Lmax=200, t=1640 Lmax=200, t=1650 Lmax=200, t=1660 Lmax=200, t=1670 Lmax=200, t=1680 Lmax=200, t=1690 Lmax=200, t=1700 Lmax=200, t=1710 Lmax=200, t=1720 Lmax=200, t=1730 Lmax=200, t=1740 Lmax=200, t=1750 Lmax=200, t=1760 Lmax=200, t=1770 Lmax=200, t=1780 Lmax=200, t=1790 Lmax=200, t=1800 Lmax=200, t=1810 Lmax=200, t=1820 Lmax=200, t=1830 Lmax=200, t=1840 Lmax=200, t=1850 Lmax=200, t=1860 Lmax=200, t=1870 Lmax=200, t=1880 Lmax=200, t=1890 Lmax=200, t=1900 Lmax=200, t=1910 Lmax=200, t=1920 Lmax=200, t=1930 Lmax=200, t=1940 Lmax=200, t=1950 Lmax=200, t=1960 Lmax=200, t=1970 Lmax=200, t=1980 Lmax=200, t=1990 Lmax=200, t=2000 Lmax=200, t=2010 Lmax=200, t=2020 Lmax=200, t=2030 Lmax=200, t=2040 Lmax=200, t=2050 Lmax=200, t=2060 Lmax=200, t=2070 Lmax=200, t=2080 Lmax=200, t=2090 Lmax=200, t=2100 Lmax=200, t=2110 Lmax=200, t=2120 Lmax=200, t=2130 Lmax=200, t=2140 Lmax=200, t=2150 Lmax=200, t=2160 Lmax=200, t=2170 Lmax=200, t=2180 Lmax=200, t=2190 Lmax=200, t=2200 Lmax=200, t=2210 Lmax=200, t=2220 Lmax=200, t=2230 Lmax=200, t=2240 Lmax=200, t=2250 Lmax=200, t=2260 Lmax=200, t=2270 Lmax=200, t=2280 Lmax=200, t=2290 Lmax=200, t=2300 Lmax=200, t=2310 Lmax=200, t=2320 Lmax=200, t=2330 Lmax=200, t=2340 Lmax=200, t=2350 Lmax=200, t=2360 Lmax=200, t=2370 Lmax=200, t=2380 Lmax=200, t=2390 Lmax=200, t=2400 Lmax=200, t=2410 Lmax=200, t=2420 Lmax=200, t=2430 Lmax=200, t=2440 Lmax=200, t=2450 Lmax=200, t=2460 Lmax=200, t=2470 Lmax=200, t=2480 Lmax=200, t=2490 Lmax=200, t=2500 Lmax=200, t=2510 Lmax=200, t=2520 Lmax=200, t=2530 Lmax=200, t=2540 Lmax=200, t=2550 Lmax=200, t=2560 Lmax=200, t=2570 Lmax=200, t=2580 Lmax=200, t=2590 Lmax=200, t=2600 Lmax=200, t=2610 Lmax=200, t=2620 Lmax=200, t=2630 Lmax=200, t=2640 Lmax=200, t=2650 Lmax=200, t=2660 Lmax=200, t=2670 Lmax=200, t=2680 Lmax=200, t=2690 Lmax=200, t=2700 Lmax=200, t=2710 Lmax=200, t=2720 Lmax=200, t=2730 Lmax=200, t=2740 Lmax=200, t=2750 Lmax=200, t=2760 Lmax=200, t=2770 Lmax=200, t=2780 Lmax=200, t=2790 Lmax=200, t=2800 Lmax=200, t=2810 Lmax=200, t=2820 Lmax=200, t=2830 Lmax=200, t=2840 Lmax=200, t=2850 Lmax=200, t=2860 Lmax=200, t=2870 Lmax=200, t=2880 Lmax=200, t=2890 Lmax=200, t=2900 Lmax=200, t=2910 Lmax=200, t=2920 Lmax=200, t=2930 Lmax=200, t=2940 Lmax=200, t=2950 Lmax=200, t=2960 Lmax=200, t=2970 Lmax=200, t=2980 Lmax=200, t=2990 Lmax=200, t=3000 Lmax=200,