|
基于電子積木arduino的G代碼解釋器原代碼,來源于http://arduino.cc/forum/搜CNC
- E1 `2 ?* O/ g& V: V6 Y9 {我去年收集了許多程序,經(jīng)過測試挑選出可以用,后來沒時(shí)間繼續(xù)研究學(xué)習(xí),現(xiàn)在發(fā)4 V% e5 z& O+ D% f8 E1 F
上來給有用的朋友參考
$ W. E8 I/ q; j l; P$ j下面是其中的小段源碼
7 n! c$ T0 K5 M" T3 M* ]* r* l//init our variables8 J2 W: y% r: c
long max_delta;
% `$ T1 _( e, K [long x_counter;& \8 ^6 F5 }6 _* u+ G& N
long y_counter;. m4 `. V2 O I) t" I: {, K4 h
long z_counter;: E' F; {3 o9 D, G( V* X6 I
bool x_can_step;+ B2 X# O1 K( X: x
bool y_can_step;
4 |; E: z! P% n: J2 w0 J. zbool z_can_step;3 G3 R; X- A7 u5 U$ |
int milli_delay;2 d; Q) t, q2 K! v5 K) |# b
void init_steppers()# R2 q4 B6 [6 L X }
{
5 \" p$ S- D2 r& F3 F. _ //turn them off to start.
, D$ B @# I. b V6 r2 x4 @ disable_steppers();
& v: i2 l: a5 h4 W9 L
1 ~: T; n/ L" \( U2 T //init our points.
. {1 g0 s4 ?9 ]( t current_units.x = 0.0;
1 s" ]0 P* n" ?, p current_units.y = 0.0;
( g6 ^' P6 f$ U current_units.z = 0.0;; `; h6 Q; k4 ~! r8 X6 z
target_units.x = 0.0;
- Y8 q1 i! |2 k! E- z target_units.y = 0.0;
1 ^* j9 R. M- l: d target_units.z = 0.0;
) q: b4 v, a0 S5 T9 ~ W2 q9 r , t( C0 F% |9 A, {% W; ?3 U
pinMode(X_STEP_PIN, OUTPUT);
! {8 b* A. c7 j pinMode(X_DIR_PIN, OUTPUT);
/ a4 A/ J5 w6 L' o" ` pinMode(X_ENABLE_PIN, OUTPUT);
6 Q$ z9 i; Z6 G! n. [# O# _" C7 | pinMode(X_MIN_PIN, INPUT);
7 B6 j. b" n: { pinMode(X_MAX_PIN, INPUT);4 f, v* u" Z' l7 k# I ~- v: ]. q) r
4 K2 Y& ~* Z' g7 Q3 I$ v, j! d pinMode(Y_STEP_PIN, OUTPUT);- C* t. M/ n/ ~* A& r6 K
pinMode(Y_DIR_PIN, OUTPUT);: O9 O4 t; o. }. h+ f+ a
pinMode(Y_ENABLE_PIN, OUTPUT);' A% d: u$ Z/ E8 R& i& l- P
pinMode(Y_MIN_PIN, INPUT);
9 S" {/ J. }' a( \% D pinMode(Y_MAX_PIN, INPUT);; Z& m3 ~' ]& M/ T
" M9 r" Z/ a' h! @# a) Q+ _
pinMode(Z_STEP_PIN, OUTPUT);+ J7 n# b2 O* ~7 B) z* Z( v
pinMode(Z_DIR_PIN, OUTPUT);
: H) b' }' f4 r- C( ?" s pinMode(Z_ENABLE_PIN, OUTPUT);, C$ f+ N8 Q- Q/ z% c' D
pinMode(Z_MIN_PIN, INPUT);
+ [/ i# O! b2 R4 Z3 `3 } pinMode(Z_MAX_PIN, INPUT);
0 d4 q. [& q b0 H% F) |- I * \1 X4 J5 t6 H7 l* y. B+ y6 R
//figure our stuff.3 x: Y9 B/ u9 F7 c+ G2 P$ r/ C
calculate_deltas();& R1 Y( F8 s. y
}
+ c- P* k% d" C5 Q+ ^& @$ _void dda_move(long micro_delay)
1 V( C/ n: P7 Q( z a, h: s" G3 z{4 \: D& u- {1 B \
//enable our steppers
3 ~' e* V `# q* g' D& B digitalWrite(X_ENABLE_PIN, HIGH);
( M- R1 B* k/ X3 ~$ L: F' | digitalWrite(Y_ENABLE_PIN, HIGH);
1 C- Z, u5 }7 _+ v% | a9 d6 N digitalWrite(Z_ENABLE_PIN, HIGH);
/ o2 F1 x- j, _3 x- \& Y* @- n! x/ k 0 B; [5 m! _5 t7 P
//figure out our deltas" b# G/ V: i& @3 c
max_delta = max(delta_steps.x, delta_steps.y);+ B _* V& ]8 ?& I4 F5 j
max_delta = max(delta_steps.z, max_delta);+ S- |0 ~/ P; b/ ^
//init stuff. S' B- v8 v" ?2 m
long x_counter = -max_delta/2;; i! z' ]& ]: w; D3 } @
long y_counter = -max_delta/2;2 F) I. x( g6 g# S9 ^* _. A
long z_counter = -max_delta/2;
8 y( U% ]& C1 Z( g: d
$ W" U U) j3 @2 E% T, K4 Z //our step flags
: S+ G& l/ J" S" P bool x_can_step = 0;, l& \( Z- O' i8 X. C, L# l) ]
bool y_can_step = 0;4 j( X! }+ s, E5 ^# h& ?9 h' | \" x
bool z_can_step = 0;/ ^" a/ Y v$ z, B ]
v; D, g/ Q! }' P8 V& A
if (micro_delay >= 16383)- F" O! L! |$ ~
milli_delay = micro_delay / 1000;
) l0 N& V7 ]: ] else
, G( x! D% H2 `* p milli_delay = 0;
+ }/ R+ ~0 A; N7 ^ r
% H8 b P/ J$ z |
|