My Marlin configs for Fabrikator Mini and CTC i3 Pro B
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

mesh_bed_leveling.h 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "Marlin.h"
  2. #if defined(MESH_BED_LEVELING)
  3. #define MESH_X_DIST ((MESH_MAX_X - MESH_MIN_X)/(MESH_NUM_X_POINTS - 1))
  4. #define MESH_Y_DIST ((MESH_MAX_Y - MESH_MIN_Y)/(MESH_NUM_Y_POINTS - 1))
  5. class mesh_bed_leveling {
  6. public:
  7. float z_values[MESH_NUM_Y_POINTS][MESH_NUM_X_POINTS];
  8. mesh_bed_leveling() {
  9. reset();
  10. }
  11. void reset() {
  12. for (int y=0; y<MESH_NUM_Y_POINTS; y++) {
  13. for (int x=0; x<MESH_NUM_X_POINTS; x++) {
  14. z_values[y][x] = 0;
  15. }
  16. }
  17. }
  18. float get_x(int i) { return MESH_MIN_X + MESH_X_DIST*i; }
  19. float get_y(int i) { return MESH_MIN_Y + MESH_Y_DIST*i; }
  20. void set_z(int ix, int iy, float z) { z_values[iy][ix] = z; }
  21. int select_x_index(float x) {
  22. int i = 1;
  23. while (x > get_x(i) && i < MESH_NUM_X_POINTS-1) {
  24. i++;
  25. }
  26. return i-1;
  27. }
  28. int select_y_index(float y) {
  29. int i = 1;
  30. while (y > get_y(i) && i < MESH_NUM_Y_POINTS-1) {
  31. i++;
  32. }
  33. return i-1;
  34. }
  35. float calc_z0(float a0, float a1, float z1, float a2, float z2) {
  36. float delta_z = (z2 - z1)/(a2 - a1);
  37. float delta_a = a0 - a1;
  38. return z1 + delta_a * delta_z;
  39. }
  40. float get_z(float x0, float y0) {
  41. int x_index = select_x_index(x0);
  42. int y_index = select_y_index(y0);
  43. float z1 = calc_z0(x0,
  44. get_x(x_index), z_values[y_index][x_index],
  45. get_x(x_index+1), z_values[y_index][x_index+1]);
  46. float z2 = calc_z0(x0,
  47. get_x(x_index), z_values[y_index+1][x_index],
  48. get_x(x_index+1), z_values[y_index+1][x_index+1]);
  49. float z0 = calc_z0(y0,
  50. get_y(y_index), z1,
  51. get_y(y_index+1), z2);
  52. return z0;
  53. }
  54. };
  55. extern mesh_bed_leveling mbl;
  56. #endif // MESH_BED_LEVELING