|
基于电子积木arduino的G代码解释器原代码,来源于http://arduino.cc/forum/搜CNC
" U" X! [/ [6 L6 [% h5 a* y A6 l我去年收集了许多程序,经过测试挑选出可以用,后来没时间继续研究学习,现在发
, E1 A; l3 Y; y d! j O: I! N上来给有用的朋友参考
& T4 @2 B7 s, |; p% b7 E. k" h% {下面是其中的小段源码0 ~/ O! p1 d, l k8 ~9 ?
//init our variables
; p) O* U0 r& R3 f( }' slong max_delta;4 b/ ^# F* @! ^" @! e
long x_counter;
3 h) b5 j9 d. q6 W a. ?7 ^& J7 S# ^ jlong y_counter;
/ x. P* g0 t; X1 W) }7 Jlong z_counter;/ J- o" Q9 S8 d( S
bool x_can_step;
9 W1 O q: U+ {$ V- E: }bool y_can_step;% U! r% a# K3 H' p1 c6 e
bool z_can_step;' H8 C" e) j l4 d6 }
int milli_delay;
& x% ]1 @6 M# S1 P0 R, k: n3 [void init_steppers()1 F0 Y8 h [; a& x% d9 k. M+ S, |0 v8 r; S; I
{; T) M, w# j* S% ]0 Q1 j
//turn them off to start./ s4 \ O3 C$ d# m" j5 N9 j& `
disable_steppers();- S0 j2 E0 c/ ^5 N; J
4 y1 m( E- }, N8 U3 P2 h //init our points.
; V0 g- z* e; _/ T current_units.x = 0.0;3 H' {% e4 A, i3 I# V) }* y; O
current_units.y = 0.0;) n: |8 G* m4 {, j* J$ L7 i3 A3 Q; Q
current_units.z = 0.0;
8 x z) A. J- K) S4 @ target_units.x = 0.0;. }; _' [8 d# e/ Z& B9 D' m9 B
target_units.y = 0.0;
/ y1 C9 _' ^( I* P$ s target_units.z = 0.0;
" S; l' L3 q1 u V, K - u6 @) y4 E0 N6 J
pinMode(X_STEP_PIN, OUTPUT);' i& ]2 y, H# b8 Y; p
pinMode(X_DIR_PIN, OUTPUT);; |" @, u& {6 j/ {5 u5 a( ?
pinMode(X_ENABLE_PIN, OUTPUT);
4 W6 N) x# Y/ H. k, Z9 N: E pinMode(X_MIN_PIN, INPUT);
8 {- _1 A3 W( A& f9 P" m pinMode(X_MAX_PIN, INPUT);
; z5 m' ]3 q3 i7 F2 x1 j
0 C" m8 q( A9 n X% g5 N/ Z pinMode(Y_STEP_PIN, OUTPUT);
( r! s# f# @+ a! O/ R* g pinMode(Y_DIR_PIN, OUTPUT);
. p% E# O$ I- s' { pinMode(Y_ENABLE_PIN, OUTPUT);/ {: r% }+ Z% k2 a. {; T
pinMode(Y_MIN_PIN, INPUT);
" c; s$ z3 ?8 { pinMode(Y_MAX_PIN, INPUT);6 E1 x1 |; N4 |$ _. H( D& u; Y6 k
3 _5 t8 ]% j" A8 `8 l
pinMode(Z_STEP_PIN, OUTPUT);. w; Z( ^) t" Q& Z' B' D
pinMode(Z_DIR_PIN, OUTPUT);; g9 T5 R2 W8 l" Z) L8 `
pinMode(Z_ENABLE_PIN, OUTPUT);' R) |8 d! [7 Y a/ C
pinMode(Z_MIN_PIN, INPUT);
" f) o" s6 }) H: `: ]" l pinMode(Z_MAX_PIN, INPUT);' Z( q) t9 p5 ~" u
+ n I) D7 n+ \
//figure our stuff.
1 R3 ?4 w: P' {& S. O calculate_deltas();, k% G$ [% C4 ~) r
}
. |* S2 X+ ] c) T1 zvoid dda_move(long micro_delay)
+ q7 N9 T& {" J6 o# r{
' Z4 @/ Z& a; N- `3 K2 r" O/ K //enable our steppers
: o1 N, q8 w* b& R# H/ t# b7 w+ N! [ digitalWrite(X_ENABLE_PIN, HIGH);
* I8 S7 J2 Z4 Y& g+ o digitalWrite(Y_ENABLE_PIN, HIGH);
- z+ @$ T0 D8 N% \' n/ M+ z9 m1 u4 G) [2 B digitalWrite(Z_ENABLE_PIN, HIGH);
/ _+ M! O1 a$ k% @/ |1 C ; }4 Q/ v5 L, Y7 s& d9 _6 a
//figure out our deltas: a J7 V% v( Z0 C
max_delta = max(delta_steps.x, delta_steps.y);- O2 m$ G: M* W# s; e$ l+ |7 P8 m
max_delta = max(delta_steps.z, max_delta);; i) {8 L& }& U6 c3 ^" F
//init stuff.
) o: i# u q- I( _# r; [9 M long x_counter = -max_delta/2;
9 Z$ W6 w& a" z2 y- k/ V" D$ B long y_counter = -max_delta/2;
8 _7 c t& x: E0 R |7 w long z_counter = -max_delta/2;
3 H' A) @% ], \$ |. J( g; t: n/ c7 N : B3 E5 X& C0 D7 j2 I6 F' m" g
//our step flags8 ]& E M0 u$ w" |0 I% p# ~
bool x_can_step = 0;; o# T0 H% o' g
bool y_can_step = 0;
" J" R* @- r- Q bool z_can_step = 0;+ k8 c* H9 \ x
+ s8 \+ ]( D6 A& R6 m5 [1 p if (micro_delay >= 16383)
- y! ~( S2 }7 a" r+ g+ v* M milli_delay = micro_delay / 1000;
# U9 n' {) h1 g% v, C2 S4 L+ I; Q else) Z3 s- L0 n6 T7 a8 U
milli_delay = 0;' @$ }4 M( l! u1 W2 q
/ a9 k# \0 }) o2 l
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
|