|
基于电子积木arduino的G代码解释器原代码,来源于http://arduino.cc/forum/搜CNC) P7 o/ L% c J$ q
我去年收集了许多程序,经过测试挑选出可以用,后来没时间继续研究学习,现在发
% q. `" F' W4 F/ E/ L( t. b7 y上来给有用的朋友参考4 }# t. o( y4 o
下面是其中的小段源码
+ p8 o u* b- @ C5 b0 O- [//init our variables
# B' v) v$ b2 U8 L4 [6 M" llong max_delta;
$ }2 @- D- S2 F# g) R8 ~6 Glong x_counter;
- P! `* I2 y6 `9 rlong y_counter;
" t4 j2 g1 m$ m. @ M% m' ulong z_counter;2 i g( e, y5 s6 v2 y
bool x_can_step;; I- d! \7 g- V
bool y_can_step;6 h5 n I# z7 ~# l$ ?
bool z_can_step;. l9 u: c6 E- v0 U5 z1 |
int milli_delay;6 `. C7 ~ m1 k+ C, Y m, U: @
void init_steppers()
# P$ E+ Y- d- Z. r q{
/ K- N* l3 V; q) x) b3 C( M: @ //turn them off to start.# O9 h. Q4 H6 `
disable_steppers();& X/ g0 D- x' y) E2 d2 X* }7 F* ?
) A0 U5 t7 t& Q, H+ K
//init our points.
7 x) M- L0 E* x/ D$ o# m current_units.x = 0.0;
0 r/ O: x/ b) Z' a current_units.y = 0.0;& y% {; S) D# Z/ R& ^
current_units.z = 0.0;
' x5 o. g9 U" P3 ] target_units.x = 0.0; D. v7 |# V! y- I7 O
target_units.y = 0.0;- X5 f5 F; z7 ]) z
target_units.z = 0.0;
# v% R& w5 e( }- Y+ Z 8 X/ \. T) f$ d0 b% v
pinMode(X_STEP_PIN, OUTPUT);
6 P; Y1 k; @1 m& S- o4 V0 v pinMode(X_DIR_PIN, OUTPUT);. ^/ x: v" f/ n! ^
pinMode(X_ENABLE_PIN, OUTPUT);! L7 _" q9 J/ T4 M/ G; e
pinMode(X_MIN_PIN, INPUT);0 _# o! r( p* i2 [% i
pinMode(X_MAX_PIN, INPUT);9 \4 r5 `1 u0 p
6 u2 R2 y1 U8 _& l* ]
pinMode(Y_STEP_PIN, OUTPUT);) j* G- k/ _2 i) U
pinMode(Y_DIR_PIN, OUTPUT);6 E" w3 K6 a& f; w% h, V* }# w5 G
pinMode(Y_ENABLE_PIN, OUTPUT);
1 k7 |6 n g6 E6 u. v" p pinMode(Y_MIN_PIN, INPUT);) \3 @( H0 w+ R# O; j
pinMode(Y_MAX_PIN, INPUT);9 [. ?4 K' y% P. ]4 e7 _; j% {0 w
$ @4 v- u3 O; W, ~- `' f) p& V3 t pinMode(Z_STEP_PIN, OUTPUT);
5 R; [) ~! D" r0 [ pinMode(Z_DIR_PIN, OUTPUT);( I, e2 a0 C, Y. |, x' S4 |5 q4 H
pinMode(Z_ENABLE_PIN, OUTPUT);
2 V" U, `: {+ Z) ~. J3 q1 z1 L. p pinMode(Z_MIN_PIN, INPUT);
$ X8 G4 x' d! v* g6 t L# ] pinMode(Z_MAX_PIN, INPUT);
+ O- X# c& \* K 5 _! A4 C2 C, N
//figure our stuff.9 {6 `- i/ g+ {0 c5 L
calculate_deltas();
4 D, L- n9 h# O1 ]0 b}5 {/ v, A- @4 B
void dda_move(long micro_delay)7 S3 V- W1 F4 d9 Y2 X* n
{ m# {' p* N$ r0 l
//enable our steppers
% p! J( Q: Z: i digitalWrite(X_ENABLE_PIN, HIGH);# h: K3 V* o% i$ f; N
digitalWrite(Y_ENABLE_PIN, HIGH);* V( E# ~5 z4 Y- b6 Y1 n4 O
digitalWrite(Z_ENABLE_PIN, HIGH); o6 c+ G/ v+ T$ t! s7 t0 ~
, D, o+ F! B' h5 E& U0 r4 \/ g
//figure out our deltas
$ |0 L% @" P) ^5 C6 R; u; z* | max_delta = max(delta_steps.x, delta_steps.y);
6 K+ G+ l" N- u5 n max_delta = max(delta_steps.z, max_delta);; S5 Y& c* N& P! `5 A- B
//init stuff.
5 Y1 F1 H6 M1 A6 V0 F long x_counter = -max_delta/2;+ `; M4 }5 A+ }( |2 _
long y_counter = -max_delta/2;( z) I& c; K: _1 t O
long z_counter = -max_delta/2;- S* C. m7 z8 O. K: O/ W% V- T
: e* h2 \2 i0 E+ t //our step flags1 a2 W- {+ E; z( M9 L+ o
bool x_can_step = 0;4 H S8 o9 O$ w. h4 @, p. R
bool y_can_step = 0;$ D# A" y5 [ S. O! Q; d+ c K
bool z_can_step = 0;
. S' J) f6 ?0 M
3 o) v+ |# M7 [: i8 o if (micro_delay >= 16383)
H* V! ^) w: H- e milli_delay = micro_delay / 1000;
# r3 V/ N; |- [* i" M else
) `+ N, Q& W7 S6 U0 K milli_delay = 0;$ F' d$ i2 K3 `5 k
j* g* E4 \7 j# ?3 v
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
|