|
基于电子积木arduino的G代码解释器原代码,来源于http://arduino.cc/forum/搜CNC
; n+ B- T/ a6 Z1 Q! r: R2 v& h我去年收集了许多程序,经过测试挑选出可以用,后来没时间继续研究学习,现在发$ u4 E- p* T6 U: h% b/ J" k
上来给有用的朋友参考8 Q$ j+ ]' q% I/ A A
下面是其中的小段源码3 g- Y# F3 W4 ^6 m# Z% S; m
//init our variables. m2 |1 Q2 i: a6 S; s5 b
long max_delta;" j: B! g( N' M% B
long x_counter;- T+ j; C1 o9 C8 F& S- i
long y_counter;
* V' t, r- i0 {4 @3 H; Jlong z_counter;/ s9 u _& }# V9 e/ ^2 d
bool x_can_step;$ p: N8 m! g4 r; ]& R' y$ K0 W8 j
bool y_can_step;
4 B8 S6 o) O' w) E# a- B4 H# ~bool z_can_step;* N/ d6 A/ e2 n" B1 j
int milli_delay;
7 Y$ Y+ y* w% Jvoid init_steppers()" A& O5 i, O. ]7 O
{
6 E' _# d. T" `4 \2 G //turn them off to start.; m7 c1 z& y; D4 L! E, P$ z5 \+ X
disable_steppers();4 a% I( w- \6 m( ~. c# y- q6 R4 `
9 H; x0 u* |* d- q
//init our points.
% e$ r' m) f/ W current_units.x = 0.0;
6 Z/ X. a. }! x9 J5 O8 P4 j current_units.y = 0.0;
/ p* m% O2 _# d- h* I1 C5 F current_units.z = 0.0;5 x: g+ ~. F' j
target_units.x = 0.0;
) `# k1 G' Z! p/ c- q target_units.y = 0.0;1 E2 Y+ k5 E2 s4 }) r! j7 |+ w
target_units.z = 0.0;
* \; z6 K1 I$ w6 j0 s0 [7 n; o ' A0 z" Q0 e: f; q$ _( W
pinMode(X_STEP_PIN, OUTPUT);+ Q; F. H! I3 E( l7 Z+ w. H, r, F P6 f
pinMode(X_DIR_PIN, OUTPUT);
0 h: Q6 k% A3 O) A pinMode(X_ENABLE_PIN, OUTPUT);
, s/ d0 t/ B7 ?3 a pinMode(X_MIN_PIN, INPUT);
# {) k" f$ b! f! v" R' w8 k! A pinMode(X_MAX_PIN, INPUT);
! f% X3 o0 a J! q- O. }, ?+ o $ K$ i% W/ E: L. k
pinMode(Y_STEP_PIN, OUTPUT);' L, X5 S" w9 B" k: t& S
pinMode(Y_DIR_PIN, OUTPUT);% `% W: ~- `: w* W1 K
pinMode(Y_ENABLE_PIN, OUTPUT);. j5 I7 W" F) k5 N
pinMode(Y_MIN_PIN, INPUT);9 s. s J& c- p* c8 {" u
pinMode(Y_MAX_PIN, INPUT);
/ f/ T! B! n8 ~
* Q* Z/ b4 T/ L" i9 U/ O) M pinMode(Z_STEP_PIN, OUTPUT);9 f( U6 @: v% f
pinMode(Z_DIR_PIN, OUTPUT);4 `" J, l8 Q" f. t% n/ A
pinMode(Z_ENABLE_PIN, OUTPUT);7 c# h3 h5 b9 T9 c" f
pinMode(Z_MIN_PIN, INPUT);
6 \5 w- X* b* @5 }' r' g! z& M* R6 r6 G pinMode(Z_MAX_PIN, INPUT);
: N2 k- u4 Z* }% E4 ], s
. R8 u; Z( A' ^) n+ V _ //figure our stuff.3 a0 t; U) r3 {0 c+ W6 z
calculate_deltas();( e. o C$ r/ r/ V8 P: A: g& G/ U
}
3 b" s$ L" w4 |, a# {! [void dda_move(long micro_delay)
2 W6 C# |: m2 Q2 E{7 ^ T0 o* H" }) o9 h
//enable our steppers
- e9 E% J& m f digitalWrite(X_ENABLE_PIN, HIGH);& o p y2 t# e7 y5 d. i" O
digitalWrite(Y_ENABLE_PIN, HIGH);
/ W9 b0 }5 c8 o$ v. ~* f N) ? digitalWrite(Z_ENABLE_PIN, HIGH);
* ?; H6 h. K' f& l
" @) ?4 K9 q/ d0 Z m //figure out our deltas! R. n9 [. N; @2 E4 A' n9 K" o
max_delta = max(delta_steps.x, delta_steps.y);
7 U& _8 a- u& f# b' D5 A4 K max_delta = max(delta_steps.z, max_delta);
) ^* E2 X V/ T- A, {3 Q //init stuff.
0 i) I4 f2 h' p& F6 a1 d: J' Y long x_counter = -max_delta/2;' [9 C) p2 a; `: r1 M
long y_counter = -max_delta/2;/ @* W) H8 }1 T- W
long z_counter = -max_delta/2;
& F5 J+ H: F; A
; n1 N- s+ ^' ]% ] //our step flags
8 t" C2 Q% O; O( b) I, V' B' L bool x_can_step = 0;# z- H4 N0 a, q1 c4 _( G
bool y_can_step = 0;5 i( n" |1 Z4 `* e+ {
bool z_can_step = 0;$ K' r; t M$ ]+ F4 q3 N& e0 m
7 A. D0 t f% K
if (micro_delay >= 16383)
( d7 F" l/ Q6 j6 d milli_delay = micro_delay / 1000;
) m z, F# I, X6 @ else6 ]3 e- |( i6 }. u, M2 r: V1 u
milli_delay = 0;
% H; o! X0 N4 s, F: Q$ ^$ y
' `1 h( x5 C9 {' R+ b: R; @; [ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
|