|
基于電子積木arduino的G代碼解釋器原代碼,來(lái)源于http://arduino.cc/forum/搜CNC
5 I9 A& c. d r1 h6 \/ x7 g我去年收集了許多程序,經(jīng)過(guò)測(cè)試挑選出可以用,后來(lái)沒(méi)時(shí)間繼續(xù)研究學(xué)習(xí),現(xiàn)在發(fā)
- c; \ |+ n8 a- U8 D- e2 y3 P上來(lái)給有用的朋友參考
4 C8 o* N; A) a4 a# Q下面是其中的小段源碼) D6 ^5 R& a* K4 W. K* T. m
//init our variables
3 @9 g1 Y. z+ n- R) q; [long max_delta;7 \8 u* V2 `# @6 I
long x_counter;
5 e) O& x0 H2 @3 G, Ulong y_counter;- K1 O9 c3 ]1 @+ t" D3 H
long z_counter;
; j" O* k' M. o6 ]- vbool x_can_step;
0 _/ p3 p [7 m% Hbool y_can_step;! T. q% ^/ ^+ H$ Y& `' o
bool z_can_step;" a6 d, [/ d6 W2 z6 |! x- m
int milli_delay;; @1 m4 [3 ^# l/ H: Y1 i# {9 n2 w
void init_steppers(). c& [% d% |; M
{# y$ z, {4 k+ m' B" J
//turn them off to start.
9 M3 n) S4 o. T7 g' r# V disable_steppers();
; c# q j1 F6 U. A
$ q" z) c; s/ G9 P! {4 c //init our points.0 G* Q/ i. m: h& U" N2 n
current_units.x = 0.0;1 N1 \+ n0 c$ b
current_units.y = 0.0;
7 Z) ]0 Y; P2 j a: H% } L current_units.z = 0.0;
" z7 n8 _& s6 z% P) ^- n/ f target_units.x = 0.0;; K, i* k1 E# `" V, W
target_units.y = 0.0;
( \: B9 k: Y. t- `2 r* U3 I0 s target_units.z = 0.0;
2 O: j! Q% S: s# S4 @# A
9 ^1 J6 {7 s7 Z& \, b7 i pinMode(X_STEP_PIN, OUTPUT);; @3 x) `, x+ ^" m
pinMode(X_DIR_PIN, OUTPUT);( l$ e6 B! }, ~; E' j9 i
pinMode(X_ENABLE_PIN, OUTPUT);
! e: U6 U+ d0 n) ] pinMode(X_MIN_PIN, INPUT);
( o7 ?6 K* F4 `/ Y! D pinMode(X_MAX_PIN, INPUT);
8 A! h& m' s2 ^( z' b, L% W
0 ]* n. s) ~' k( u: X6 ~5 ]# f pinMode(Y_STEP_PIN, OUTPUT);9 L, d5 C" \5 ^) [
pinMode(Y_DIR_PIN, OUTPUT);# h. M% B( i( N8 t3 M
pinMode(Y_ENABLE_PIN, OUTPUT);, E# F* }( s: n. _+ Z- U
pinMode(Y_MIN_PIN, INPUT);; H0 @* u; y2 O3 ` K0 s
pinMode(Y_MAX_PIN, INPUT);1 ?7 G; _# ]8 c" _ q
0 C; v4 B Z2 v" s; r, P0 s pinMode(Z_STEP_PIN, OUTPUT);9 J& k2 p E( m" O0 d
pinMode(Z_DIR_PIN, OUTPUT);! K4 l8 R5 A6 d. a
pinMode(Z_ENABLE_PIN, OUTPUT);! _+ Y5 c) u! }5 v
pinMode(Z_MIN_PIN, INPUT);! A7 C& ]1 L/ f1 l) \" ]
pinMode(Z_MAX_PIN, INPUT);
! p5 r) H- ?3 r1 k, ^ ! U' L. r* V5 B; E( D$ o5 x
//figure our stuff.
& w+ `' I5 P( V6 y calculate_deltas();
/ v: L0 F% g$ S4 m% R2 Y- }}2 h# a- k, y0 f$ t$ y% ?
void dda_move(long micro_delay)
# {7 g9 B3 `" N/ J/ X. `{4 `1 \" D2 _8 Q) p+ S
//enable our steppers
' s" b0 R6 k: r0 v( W. O digitalWrite(X_ENABLE_PIN, HIGH);
9 a4 s2 `' \( r( u" U' R5 `1 Z digitalWrite(Y_ENABLE_PIN, HIGH);
, @, j* R: u; m, D+ B digitalWrite(Z_ENABLE_PIN, HIGH);
% N! F- s3 b( K1 v5 H " I9 x' d, S) ]
//figure out our deltas$ ~+ H! c( ~ H7 r* _: e
max_delta = max(delta_steps.x, delta_steps.y);( B, N+ z: D% C; r. ?
max_delta = max(delta_steps.z, max_delta);
# f/ {0 G" \) T9 X //init stuff.; e* b2 N% d* r W% G! Q6 |
long x_counter = -max_delta/2;5 {9 Q9 K; K) q/ f% [( f7 e2 b
long y_counter = -max_delta/2;
, K. S! w$ g9 }+ e long z_counter = -max_delta/2;
, j$ p& Z4 ]" Y& _4 V! j1 y4 d7 [ * Z4 ^; z, S5 `; g: C
//our step flags) R8 o) L( I- T
bool x_can_step = 0;5 A% ~& j1 W- k/ B0 }: T; r
bool y_can_step = 0;. R/ n( L8 W& _
bool z_can_step = 0;) h0 ]6 Q/ |7 ^! H G. H
% \, V2 |. a% N+ W; G if (micro_delay >= 16383)9 G( o8 x. [' M. B7 ?8 e
milli_delay = micro_delay / 1000;
2 K, x$ ~& f. a( ^; M else( D, x. P8 w1 k4 _; ~0 M
milli_delay = 0;
# t8 H& D1 M+ q" |/ F! V; B& K, x
|
|