Commit | Line | Data |
---|---|---|
88443c6b JM |
1 | /* |
2 | This file is part of Smoothie (http://smoothieware.org/). The motion control part is heavily based on Grbl (https://github.com/simen/grbl). | |
3 | Smoothie is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. | |
4 | Smoothie is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. | |
5 | You should have received a copy of the GNU General Public License along with Smoothie. If not, see <http://www.gnu.org/licenses/>. | |
6 | */ | |
7 | ||
8 | #ifndef ZPROBE_H_ | |
9 | #define ZPROBE_H_ | |
10 | ||
11 | #include "Module.h" | |
12 | #include "Pin.h" | |
13 | ||
ce9d2bda JM |
14 | #include <vector> |
15 | ||
f6efadb0 JM |
16 | // defined here as they are used in multiple files |
17 | #define zprobe_checksum CHECKSUM("zprobe") | |
18 | #define leveling_strategy_checksum CHECKSUM("leveling-strategy") | |
ce9d2bda | 19 | |
88443c6b | 20 | class StepperMotor; |
fc7b9a7b | 21 | class Gcode; |
681a62d7 | 22 | class StreamOutput; |
ce9d2bda | 23 | class LevelingStrategy; |
88443c6b JM |
24 | |
25 | class ZProbe: public Module | |
26 | { | |
27 | ||
28 | public: | |
29 | void on_module_loaded(); | |
30 | void on_config_reload(void *argument); | |
31 | void on_gcode_received(void *argument); | |
a157d099 | 32 | void acceleration_tick(void); |
88443c6b | 33 | |
fa7bcf7e | 34 | bool wait_for_probe(int& steps); |
681a62d7 | 35 | bool run_probe(int& steps, bool fast= false); |
36a21d48 | 36 | bool run_probe_feed(int& steps, float feedrate, float max_dist= -1); |
681a62d7 | 37 | bool return_probe(int steps); |
97832d6d | 38 | bool doProbeAt(int &steps, float x, float y); |
0e44e7d7 | 39 | float probeDistance(float x, float y); |
ce9d2bda | 40 | |
037c350d | 41 | void coordinated_move(float x, float y, float z, float feedrate, bool relative=false); |
681a62d7 | 42 | void home(); |
ce9d2bda | 43 | |
2f809c40 | 44 | bool getProbeStatus() { return this->pin.get(); } |
119114b4 JM |
45 | float getSlowFeedrate() const { return slow_feedrate; } |
46 | float getFastFeedrate() const { return fast_feedrate; } | |
47 | float getProbeHeight() const { return probe_height; } | |
48 | float getMaxZ() const { return max_z; } | |
57e927fa | 49 | float zsteps_to_mm(float steps); |
ce9d2bda JM |
50 | |
51 | private: | |
fa7bcf7e | 52 | void accelerate(int c); |
a2f1ce04 | 53 | void probe_XYZ(Gcode *gc, int axis); |
fa7bcf7e JM |
54 | |
55 | volatile float current_feedrate; | |
ce9d2bda JM |
56 | float slow_feedrate; |
57 | float fast_feedrate; | |
b469231e | 58 | float return_feedrate; |
ce9d2bda | 59 | float probe_height; |
f3b66360 | 60 | float max_z; |
fa7bcf7e JM |
61 | volatile struct { |
62 | volatile bool running:1; | |
ce9d2bda | 63 | bool is_delta:1; |
7d6fe308 | 64 | }; |
ce9d2bda JM |
65 | |
66 | Pin pin; | |
67 | uint8_t debounce_count; | |
68 | std::vector<LevelingStrategy*> strategies; | |
88443c6b JM |
69 | }; |
70 | ||
71 | #endif /* ZPROBE_H_ */ |