|
基于電子積木arduino的G代碼解釋器原代碼,來源于http://arduino.cc/forum/搜CNC
, T9 r+ Y; j: ~; z$ _7 ~: k b+ f我去年收集了許多程序,經(jīng)過測試挑選出可以用,后來沒時間繼續(xù)研究學(xué)習,現(xiàn)在發(fā)9 T1 r) e3 j( {+ U
上來給有用的朋友參考6 }9 K1 Q& W4 [
下面是其中的小段源碼; Q9 f* i0 i; \
//init our variables
$ t: \# |- P" @# w6 hlong max_delta;
: n3 D6 e. M6 blong x_counter;( C+ r% Y' Z3 o9 f) {7 W
long y_counter;/ F9 g7 m) h2 w! P. [
long z_counter;
2 t' V. W+ O& m+ ^( Y* Z. lbool x_can_step;
; t% X, z0 [, Y; l4 Q4 I h8 ~8 pbool y_can_step;5 r w* p" n+ P. [; c
bool z_can_step;
6 t7 l. v5 d% f/ K5 c# rint milli_delay;
. o! m3 Q6 V3 f# y6 hvoid init_steppers()) S1 m. F" P2 M
{
" T. F; U# j) V: G0 B //turn them off to start.
7 T! ]: A0 H# r2 U& l: y7 h disable_steppers();
9 S$ j3 W: I5 i4 O% E/ _0 i
& ]4 o% `9 S! Q9 t //init our points.
: K7 g/ ~" @5 _- c+ A' F8 J: }& ` current_units.x = 0.0;
: A3 o- j# p# z( ?( R, l: n current_units.y = 0.0; b: q9 H0 C6 A8 P: U8 m
current_units.z = 0.0;1 y# f4 B5 G9 y* K7 G! i" L
target_units.x = 0.0;
/ d% d; }" P# ?$ ^6 _( Z6 ^ target_units.y = 0.0;
% K! r1 c. w! S( T5 O target_units.z = 0.0;, V% u& |9 Q1 e, I
& g4 S2 [. ]8 @/ w/ \: ?' A' ^ pinMode(X_STEP_PIN, OUTPUT);3 J6 R/ H7 D. B( g- }
pinMode(X_DIR_PIN, OUTPUT);
' v* i! r$ r' E+ \& ?- o pinMode(X_ENABLE_PIN, OUTPUT);( [' `- w$ N) `5 T: ^( X
pinMode(X_MIN_PIN, INPUT);
" } e2 G6 ^1 c, ?+ D pinMode(X_MAX_PIN, INPUT);; Y' l5 n7 P8 H _1 \# u6 d9 w% X) V
+ v0 @5 v: ^+ R
pinMode(Y_STEP_PIN, OUTPUT);
* _% Y0 K0 K( `6 F pinMode(Y_DIR_PIN, OUTPUT);, ? G% Z$ Y% W$ L* h) e0 Q
pinMode(Y_ENABLE_PIN, OUTPUT);
/ d7 @. l- a# y5 r# h pinMode(Y_MIN_PIN, INPUT);
X0 ?1 q8 C4 U/ ?- X I pinMode(Y_MAX_PIN, INPUT);
: G" t7 Z0 t; |
! T2 U, K/ r3 s: r8 X3 f o pinMode(Z_STEP_PIN, OUTPUT);- Y# d% X- }% P) x6 f* ~2 n
pinMode(Z_DIR_PIN, OUTPUT);
/ W# n7 F* f* L8 f& Z; |, O pinMode(Z_ENABLE_PIN, OUTPUT);
8 y5 x$ t1 J+ T! o/ c pinMode(Z_MIN_PIN, INPUT);" ]6 ^# O) c& N+ A
pinMode(Z_MAX_PIN, INPUT);
5 r7 o/ r* |* d1 l/ I" w 9 a) S4 F( o5 W* `7 y
//figure our stuff.5 Y" Q' m# G# x; J. y
calculate_deltas();
; E" l" r& Q* Q$ T}
7 `0 ?) }& M. W7 B3 u1 D% A4 M' ~void dda_move(long micro_delay): P, p5 @& s/ ?
{
9 j; }2 O9 k+ Q; O //enable our steppers
4 \' e/ u. k$ ^/ l& V7 \0 a, Y/ k- Z: o digitalWrite(X_ENABLE_PIN, HIGH);5 m" b: N5 t+ g, `. `8 a
digitalWrite(Y_ENABLE_PIN, HIGH);
7 g5 C, Y, @) I7 k _6 ?9 k* \ digitalWrite(Z_ENABLE_PIN, HIGH);
$ C3 a& }9 n( E" ~0 O1 x9 ] 7 [) [$ {( z/ K _ Z5 B
//figure out our deltas
7 \: T1 V% Y" h, h& F max_delta = max(delta_steps.x, delta_steps.y);
/ I8 L$ [! x/ ^0 E5 P. Z max_delta = max(delta_steps.z, max_delta);
* @% u! ^! E) u& [1 Q //init stuff.
9 x& A* o+ v* D, G6 E. b! d long x_counter = -max_delta/2;
9 x, D- ?# v$ c: B) e$ F long y_counter = -max_delta/2;. w2 f9 _! y; C0 \0 [
long z_counter = -max_delta/2;
$ M, G g5 F+ C1 \ . B: r7 f) |+ A$ X% [3 G
//our step flags
3 K: v* U8 C6 P! I2 @* W: X; i bool x_can_step = 0;- \' [1 V" K$ {& ~) \; f% D
bool y_can_step = 0;
: |8 S( d! R% q/ _3 |( ~% t! h bool z_can_step = 0;
' `7 ~- J5 C+ J8 p4 d" z , J) f0 y# C8 ?5 a3 r. l" ^
if (micro_delay >= 16383)" w& g8 s8 F7 D- T. @# R
milli_delay = micro_delay / 1000;0 L @: B' o0 r5 {2 Q
else' `7 @/ E2 f- v- ~
milli_delay = 0;/ z, N+ I2 r+ O, }+ R6 Q6 M
+ n8 |' q9 o) Y3 P$ v" t* ? |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有賬號?注冊會員
×
|