|
基于电子积木arduino的G代码解释器原代码,来源于http://arduino.cc/forum/搜CNC( }7 S# [8 j. o; C' [
我去年收集了许多程序,经过测试挑选出可以用,后来没时间继续研究学习,现在发) p$ {- i9 o9 m- G6 F B' i
上来给有用的朋友参考
: `6 _) j/ b! Y: D下面是其中的小段源码: N) A V0 \6 c1 `7 T7 s5 r9 l7 G# s
//init our variables
. f* x8 e- Y" O% E1 Clong max_delta;( m; j& n- _# d3 n" P* J3 f- E
long x_counter;
5 l7 w1 ` k3 j0 s* ^% B8 Blong y_counter;* C' s4 E8 J" r9 j; }! D/ Y7 |
long z_counter;/ c5 f" g2 l7 o- V
bool x_can_step;, M; W6 a# d) j4 q
bool y_can_step;
$ ^) ] Q* L: }6 p4 e1 r* jbool z_can_step;
6 l+ I2 T7 V) y: d2 n, ]int milli_delay;$ k m" ?7 x- U
void init_steppers()/ P i U& j+ O: G* P) U" o9 {, |
{
4 P+ ]+ n. p9 G) r0 s# b //turn them off to start.; @. J* `8 P5 t$ T9 k/ {
disable_steppers();
! t1 K- u1 n- [( g3 B' g& O
0 K2 T, i+ A3 b8 _+ f) T+ m //init our points.- N6 f( R/ {1 G# S9 w
current_units.x = 0.0;
+ P, `8 s& j% X/ s; l current_units.y = 0.0;
& d( Y1 N% E3 K9 z& q9 D% N+ Q current_units.z = 0.0;6 D M) _, y, T; H2 [: h
target_units.x = 0.0;
+ |6 y4 `5 e4 [ target_units.y = 0.0;' r4 Z2 i1 U+ U
target_units.z = 0.0;) N3 a/ {; r) i4 ~% I" y. V
; U- a2 ~3 v) l pinMode(X_STEP_PIN, OUTPUT);
* b {5 j$ e# l# k9 K( ` pinMode(X_DIR_PIN, OUTPUT);
. u0 r/ `1 y8 @$ b% q z pinMode(X_ENABLE_PIN, OUTPUT);' w( n a9 l7 }$ E7 [3 L% `- p
pinMode(X_MIN_PIN, INPUT);' H3 e$ K/ @8 V L! [: P( ?
pinMode(X_MAX_PIN, INPUT);0 T5 r/ R* L% t. p! P! D7 X
0 O3 D" T1 X) R$ y4 j
pinMode(Y_STEP_PIN, OUTPUT);" ]' f# f' X" y5 z7 K3 |( a, S% w
pinMode(Y_DIR_PIN, OUTPUT);
2 r1 ^4 D. ]- Q5 ^% w. U/ }" R pinMode(Y_ENABLE_PIN, OUTPUT);+ X( m0 J; ~# S! n8 C8 {
pinMode(Y_MIN_PIN, INPUT);" G) l. i2 h2 g* O8 H
pinMode(Y_MAX_PIN, INPUT);
& `$ _ `) S+ y* e! z " k+ Y: D [* k% R
pinMode(Z_STEP_PIN, OUTPUT);
' [! N3 _- Z8 Q2 p6 o Z pinMode(Z_DIR_PIN, OUTPUT);
8 W$ C6 B* y% x, R& K0 i pinMode(Z_ENABLE_PIN, OUTPUT);, U5 Z: j, M3 e$ b6 M
pinMode(Z_MIN_PIN, INPUT);
3 x! s7 {% F0 k( K5 c& {- X" i" n pinMode(Z_MAX_PIN, INPUT);& c2 h% p$ O0 Q* V% `- c
8 q; @% {, K5 p1 V
//figure our stuff.
0 z; T; J8 p! H8 K calculate_deltas();$ A, O2 J$ K7 H7 @) `. E5 w
}
0 h' o: B0 k$ e8 F* k, D# v Zvoid dda_move(long micro_delay)# B' X g2 o0 x
{
/ z, x1 C7 z+ y& A0 j* u7 r- L //enable our steppers- b1 C6 s1 j& m Q6 A5 }7 ]
digitalWrite(X_ENABLE_PIN, HIGH);
" l a# t1 a2 B) e8 X digitalWrite(Y_ENABLE_PIN, HIGH);/ ~- }# H: b$ @9 h0 c
digitalWrite(Z_ENABLE_PIN, HIGH);' d4 k, g b( s0 L$ x* C
+ |) P+ m7 L, ?
//figure out our deltas r% }$ a! U" E2 R9 r
max_delta = max(delta_steps.x, delta_steps.y);/ ~3 ~2 J1 B, ^( u5 B& z5 H
max_delta = max(delta_steps.z, max_delta);1 F+ k) j6 S: t2 ^! k
//init stuff.: |, t$ ?3 a7 g6 d
long x_counter = -max_delta/2;! O7 L" k0 h# Z- X1 q0 n
long y_counter = -max_delta/2; f* h) ]0 x: O1 g
long z_counter = -max_delta/2;
# M: @7 p2 H" z) L' h 3 q) Z7 ?, }/ r7 M2 j
//our step flags
, h3 Z6 N" ?9 a% S* t9 H+ f bool x_can_step = 0;) U& ~! V' Y/ D, K
bool y_can_step = 0;' k2 x( H {( U* r" m
bool z_can_step = 0;
+ a0 u0 v2 T1 w$ p3 [: c$ n * c* n2 h6 H Q/ U: u" K' D F
if (micro_delay >= 16383)
" E, H" k6 f& I; y' X' a milli_delay = micro_delay / 1000;
/ V# o( {" O! `3 n, }- I2 { else" s6 i0 H' x$ Z
milli_delay = 0;' ]% t0 j8 ?' C' F, v/ v9 l$ W1 @3 u# J% n
# t# [/ F7 v) l |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
|