|
基于電子積木arduino的G代碼解釋器原代碼,來源于http://arduino.cc/forum/搜CNC @# W2 Y8 l* u1 |
我去年收集了許多程序,經(jīng)過測試挑選出可以用,后來沒時間繼續(xù)研究學(xué)習(xí),現(xiàn)在發(fā)
# I. g0 H9 c- W1 h$ H" H4 [上來給有用的朋友參考0 h1 y: k7 ]! [2 b$ X
下面是其中的小段源碼
5 U- w/ t. t" N# X/ c. o//init our variables
* I' Q# ? K' G" p* ]+ \long max_delta;: z( V/ I* R7 Q& ^/ J; v
long x_counter;
% G8 w) b* e- x5 P" X7 Qlong y_counter;
8 e( @: E0 e4 t- t4 olong z_counter;0 l/ r* i1 U1 w' x; T0 q
bool x_can_step;4 P* n+ T) T" Q# l
bool y_can_step;
* N0 c, Q: P1 |' }% z) b5 bbool z_can_step;1 C6 t4 @4 x5 z3 m. S
int milli_delay;; s$ _5 {0 j% y& ?
void init_steppers()
1 {$ k8 K5 C- G# U; o{
( i) x6 y: r. ^+ Q; o9 Q //turn them off to start." @8 H- s% G; H6 k, _1 l
disable_steppers();1 d$ E7 F$ R( N, z1 H* e3 d% L
4 Y& [8 L! r& b //init our points. L2 A& n; p [! g* }9 G
current_units.x = 0.0;. u3 J, @/ D0 c( A
current_units.y = 0.0;. X, F5 `" \, k% Y* K3 p3 ?
current_units.z = 0.0;
d! h5 g+ k) l target_units.x = 0.0;- Y; i1 M2 M* u+ u v
target_units.y = 0.0;6 T2 x0 r) a+ W2 [
target_units.z = 0.0;$ P- _. Y+ U& |
, u* G- o$ n2 i$ |, ~! R
pinMode(X_STEP_PIN, OUTPUT);
$ Y; ?# y @9 c. u2 R pinMode(X_DIR_PIN, OUTPUT);
( v; W3 ]! T$ t5 f$ H) c% k- C pinMode(X_ENABLE_PIN, OUTPUT);6 _% F2 t6 X# D) W. ]
pinMode(X_MIN_PIN, INPUT);
. M, f; K1 ^) X; w pinMode(X_MAX_PIN, INPUT);
( Z* d0 |, n3 k. m1 J4 v+ o
, L% e6 f0 S! I pinMode(Y_STEP_PIN, OUTPUT);+ i/ U% s m& w! x( U
pinMode(Y_DIR_PIN, OUTPUT);
# p, S6 O, _8 d# p2 x- O pinMode(Y_ENABLE_PIN, OUTPUT);
: E6 c; V+ O0 r' n( ?# y7 Q' j* S pinMode(Y_MIN_PIN, INPUT);
- e9 \. u$ Y* R, X4 X0 A pinMode(Y_MAX_PIN, INPUT);+ N) F2 L- V) B6 l, M, `# x, ]
. V. P% M; |( Y; [- y( V pinMode(Z_STEP_PIN, OUTPUT);
$ E: c. N' ^- ]# e pinMode(Z_DIR_PIN, OUTPUT);
P3 B$ U* n7 d) y7 i pinMode(Z_ENABLE_PIN, OUTPUT);0 [& U/ { T3 c+ t$ V. ]
pinMode(Z_MIN_PIN, INPUT);* R6 q8 n6 d6 k$ r2 f
pinMode(Z_MAX_PIN, INPUT);/ [0 P- ^) N% |( O4 X
, U8 t6 y1 T {/ {! ]) E6 p- ~$ b //figure our stuff.
" D7 {- M, H8 m' }9 B/ q. a calculate_deltas();
+ u d6 J, p( T/ P0 J}
! ]1 M/ l9 f" E* {5 p7 j% R1 |void dda_move(long micro_delay)2 O5 Q+ N: e- B! n& F* ^5 Z1 ?
{8 [0 t# W5 @6 w. E& q% N0 F. T
//enable our steppers
. p% P ^1 K2 J* w digitalWrite(X_ENABLE_PIN, HIGH);
8 ]' C- n! ~* ?( K+ ]' \" v digitalWrite(Y_ENABLE_PIN, HIGH);
/ M5 a5 ?+ c% K2 H3 g% C# I- m: n, l digitalWrite(Z_ENABLE_PIN, HIGH);1 e" j& t2 S7 ^7 S5 A
% Z; ^) P8 D% n. z- D' A //figure out our deltas
+ u3 U% m& _$ u0 G3 W. B/ q5 \ max_delta = max(delta_steps.x, delta_steps.y);
, Y6 S( a: P# @/ f, ?* V: R max_delta = max(delta_steps.z, max_delta);
, q" f1 K5 y4 b& L7 M! ^ //init stuff.
6 o7 O1 O4 k" w& B5 i long x_counter = -max_delta/2;* l1 G8 P* W; f$ D l l6 e5 `
long y_counter = -max_delta/2;
1 F7 K# B7 q: p; V6 C0 o" E long z_counter = -max_delta/2;
% C5 [4 l% K2 I) v( O& a9 z" H. F/ L+ _
& H! z8 f, Q6 z0 O% ? //our step flags( D5 i, I/ T' `- S+ q& E l. V- c& D
bool x_can_step = 0;! p1 k( G0 z8 ]1 z" o7 _. S/ b
bool y_can_step = 0;
+ Z0 P' A" c* _ bool z_can_step = 0;9 k! L9 x+ C- E+ @3 N5 s
M+ s5 T0 s/ U
if (micro_delay >= 16383)
* g) ~5 p* A/ m. a/ {8 ^; C milli_delay = micro_delay / 1000;
9 x" S" }/ b9 O: Z" w else* ]" M3 D/ I% X2 ?7 Z
milli_delay = 0; E8 N% p6 k! g7 c r ~
5 S& c5 D, n+ Z* a |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有賬號?注冊會員
×
|