|
基于电子积木arduino的G代码解释器原代码,来源于http://arduino.cc/forum/搜CNC6 C1 e3 C7 a0 ?
我去年收集了许多程序,经过测试挑选出可以用,后来没时间继续研究学习,现在发" N# a+ u+ n" B8 b! w! q
上来给有用的朋友参考
: f9 k' p h6 E1 K9 g下面是其中的小段源码
" g3 a1 p# U Z8 \7 W//init our variables
2 ~ n! { [3 l) d4 ylong max_delta; c7 _9 R5 J& U# y/ F% v* _+ ?) w5 B
long x_counter;
; t) x" ^/ X# U- Elong y_counter;
' j' \, d4 y# h) d/ B5 Tlong z_counter;
7 O1 Z* u9 y+ D* kbool x_can_step;
* n, C+ U1 h0 [% {% ?) w8 ?bool y_can_step;: B+ Q$ k) e/ d- f7 p: \
bool z_can_step;
/ K# b7 F$ N$ Kint milli_delay;
# F$ o& A/ I* qvoid init_steppers()0 [, l, q: d$ M" ^2 k- X$ {
{( j+ l$ g7 T1 N3 F! L& Y
//turn them off to start.
2 X! @; P2 P# z9 w! z3 p disable_steppers();
' ~* y! I \% _1 k
6 O2 p3 j C, ^2 v //init our points.
6 z) |& ?2 v S- Z( H2 W current_units.x = 0.0;
& D4 ? h$ X( ^; ]( H4 B# f+ z current_units.y = 0.0;: l7 v/ |- K9 x$ N8 {6 D) A
current_units.z = 0.0;9 ?, n$ J N; Z9 i5 m% O
target_units.x = 0.0;# Q- L+ [+ e2 F2 _. K- o! y9 R1 L
target_units.y = 0.0;
9 ^; a0 U& I z target_units.z = 0.0;& u {6 u! }, F5 L9 S
& a* i( \ d2 X9 u! U) ?. G pinMode(X_STEP_PIN, OUTPUT);. L/ d" p, e4 K( j2 ]7 W# Q
pinMode(X_DIR_PIN, OUTPUT);
9 Z' q7 g) F V5 d pinMode(X_ENABLE_PIN, OUTPUT);
6 M0 U B9 ?6 m0 x# K: Y pinMode(X_MIN_PIN, INPUT);4 X7 Z- D4 n/ n) @) v/ H
pinMode(X_MAX_PIN, INPUT);
2 [) a& h4 b/ b8 D$ f6 B A3 |
- V3 Q/ \: w- K; D pinMode(Y_STEP_PIN, OUTPUT);# ?6 u- y, J* F1 M1 q8 |
pinMode(Y_DIR_PIN, OUTPUT);! |4 k& e6 w% o: N# [' O3 H) Z
pinMode(Y_ENABLE_PIN, OUTPUT);- e- j# V3 z" n4 q. v& d% r
pinMode(Y_MIN_PIN, INPUT);
: n7 s {9 \9 `) `0 n: @" I5 T i pinMode(Y_MAX_PIN, INPUT);6 y- w# o8 Y, b% ]
) o' k2 e& Y, r5 f# Q+ x$ G
pinMode(Z_STEP_PIN, OUTPUT);! D4 U# @1 }5 l& R6 s
pinMode(Z_DIR_PIN, OUTPUT);
9 G }4 l0 C6 {! W pinMode(Z_ENABLE_PIN, OUTPUT);1 w3 U% J8 d2 Q* I- u9 b1 O
pinMode(Z_MIN_PIN, INPUT);
6 m6 [+ J F( `7 z. ^7 G- f5 b pinMode(Z_MAX_PIN, INPUT);
- ~4 L& ^9 F! C3 Q; ~ G; F
0 a$ o* @& Q/ R0 {4 r' R //figure our stuff.( U- c1 z( c' c p2 c8 e- R5 z' j. S
calculate_deltas();7 i& V8 P+ ?# [7 v- p
}: Z1 T Z; C2 h9 n3 }
void dda_move(long micro_delay): Q6 g# B" ?9 w% V2 @
{
! f4 t6 W3 Y2 F2 t //enable our steppers
- G6 u6 f) Y' g2 M digitalWrite(X_ENABLE_PIN, HIGH);
, _% L m( o- o1 ^ digitalWrite(Y_ENABLE_PIN, HIGH);4 ]- @2 q# s/ R0 G
digitalWrite(Z_ENABLE_PIN, HIGH);9 K1 M2 {) r0 x& m8 T$ F6 l8 t
" X" G" N" T4 d
//figure out our deltas" L- W6 h& p( l: {* ~( g5 c
max_delta = max(delta_steps.x, delta_steps.y);
0 E4 \( b( d7 q- u3 Z/ S max_delta = max(delta_steps.z, max_delta);4 O+ ]* G4 i5 A7 o( x
//init stuff." n2 r- q' E- ~" v
long x_counter = -max_delta/2;
3 d) O* q9 ^" [& ]+ e0 f% M/ B long y_counter = -max_delta/2;
0 b% X1 R$ R; S3 P. c long z_counter = -max_delta/2;% F1 S: p0 i7 u6 H J5 D
! _& e& _8 F/ f4 }. Q9 s2 o
//our step flags) y+ j' j. C$ d+ s0 Q
bool x_can_step = 0;
$ \% P" D, U2 p% T5 I! r9 k [% l bool y_can_step = 0;' g% p0 U. D: |. w8 F) T+ d; [
bool z_can_step = 0;9 `9 \; ^+ D2 c" ~+ x! i
; R8 ]3 c, E8 u1 \
if (micro_delay >= 16383)
0 p4 S0 C; {& s; g, R! z# @: H milli_delay = micro_delay / 1000;% {# c( ]: x/ K7 W' O: \
else
1 n J4 }$ e2 j! w9 f o8 X milli_delay = 0;
) v( e, b0 k+ E8 B! W4 Q# s8 h# @% o1 Q3 n7 t. B, G
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
|