|
基于电子积木arduino的G代码解释器原代码,来源于http://arduino.cc/forum/搜CNC$ J3 r: G$ |1 F& F# V3 }
我去年收集了许多程序,经过测试挑选出可以用,后来没时间继续研究学习,现在发
; ]8 f1 [. R4 w$ o& Y8 N上来给有用的朋友参考
1 q3 Z/ L* Y; J V9 }, i5 x- |下面是其中的小段源码
- t! l$ R# z; N) s//init our variables& A$ Y E1 T) [$ ]" [
long max_delta;
) Q/ \* q! ~. S" j2 glong x_counter;
. t; g+ x/ p& A& k d, `5 Hlong y_counter;. s- }8 k2 O* X7 h& p6 T
long z_counter;( l% E' D8 o6 L! K( m) u# I
bool x_can_step;
2 n+ D4 x8 `3 z2 f. P+ Wbool y_can_step;! s* Z$ {5 v0 x* ~' r* g) s) u
bool z_can_step;
0 p: d$ h9 C' Tint milli_delay;; Y7 m" K- s) ]0 N' H: y
void init_steppers()1 X" t9 T; x# l+ A3 C" F
{* o y. u# ~, u+ Z9 A0 O9 \
//turn them off to start.
2 ]$ y1 \1 k- ~7 E disable_steppers();5 ^7 C3 x! r! R& p+ ]% @) S
* F0 F3 X' I% O: J, [' x0 C# w6 i //init our points.
% {) u, @/ v* K7 K& F6 s1 `* u" E7 V; X current_units.x = 0.0;( R, ]. `" I3 [
current_units.y = 0.0;
" y. X7 z! y- h5 G7 J1 D# v current_units.z = 0.0;
/ l; r5 n) m- s target_units.x = 0.0;" B9 R5 N& g5 P' j
target_units.y = 0.0;$ R8 f6 h8 m b, ]& A
target_units.z = 0.0;
: {2 F' Q6 W Y/ g K }* c% j e# j! G
pinMode(X_STEP_PIN, OUTPUT);% F+ D5 H+ H4 ]# W" v
pinMode(X_DIR_PIN, OUTPUT);. @3 m# A$ H4 W
pinMode(X_ENABLE_PIN, OUTPUT);
! ]! f- G7 [! V: `; A$ M( ?3 x4 x pinMode(X_MIN_PIN, INPUT);
# c3 b% p% o9 _' c* F0 Y pinMode(X_MAX_PIN, INPUT);
# d, E& Q* Y, i+ d z" b- b # `3 c/ o$ s3 f- N( i
pinMode(Y_STEP_PIN, OUTPUT);5 P5 ~& z- a9 V& e
pinMode(Y_DIR_PIN, OUTPUT);
) X3 x/ k4 z* U; J pinMode(Y_ENABLE_PIN, OUTPUT);
) v' j( j7 r# M pinMode(Y_MIN_PIN, INPUT);& c) S( F# `: f9 z6 ^4 @
pinMode(Y_MAX_PIN, INPUT);
3 z3 L( o8 A8 `4 g6 ? W' ]
. d9 `3 T8 b; s" Y8 s8 O h pinMode(Z_STEP_PIN, OUTPUT);
2 [% E3 r# [# @2 z/ L pinMode(Z_DIR_PIN, OUTPUT);, w; I7 l! \ g
pinMode(Z_ENABLE_PIN, OUTPUT); a! E9 q& T$ p1 b0 g1 i7 v% G
pinMode(Z_MIN_PIN, INPUT);
7 a. N& n7 b$ b A) ?$ ? pinMode(Z_MAX_PIN, INPUT);
* v! [; n! k5 E! L/ n/ x I8 T
. }% d0 N! n2 `1 X0 p4 o' k7 p8 j //figure our stuff.
8 t6 Z7 f6 S: l' j3 }$ @ calculate_deltas();( {' i/ }% {$ k
}# h" p' F4 |5 U, F
void dda_move(long micro_delay)& @; D- y% ]8 C% H6 ?
{! a8 r9 s( J5 D z2 \8 d6 k
//enable our steppers
( m* n& B% Z3 A0 y" @ digitalWrite(X_ENABLE_PIN, HIGH);! [! J- X. r/ c) E1 @5 j& b% B5 U8 M
digitalWrite(Y_ENABLE_PIN, HIGH);+ o$ ]9 I' D0 }# |
digitalWrite(Z_ENABLE_PIN, HIGH);
4 M9 a. p- B7 e4 T! ^; n5 d 4 p* L. W/ D- t X+ n
//figure out our deltas# N* }' _- X, f- O2 c6 s8 k
max_delta = max(delta_steps.x, delta_steps.y);0 R. l& U! l- \7 h
max_delta = max(delta_steps.z, max_delta);
8 c& X9 U1 H. o //init stuff. r2 r1 J* t! @$ f8 v7 `
long x_counter = -max_delta/2;: A! {9 h+ ~7 J
long y_counter = -max_delta/2;& _$ e) a- b |. F h- _: j) O
long z_counter = -max_delta/2;
; h# |; [' P% f' e- b' @, ?
9 e5 U T0 i. D. a/ O6 Q9 ?& F //our step flags
6 s! _8 v9 E# O5 L bool x_can_step = 0;, X5 j" M7 {2 J
bool y_can_step = 0;& d7 L: k b: Z% }9 n
bool z_can_step = 0;, O% C# V8 E; p, w$ \
( \6 @# d/ _; r5 D7 z/ r" @
if (micro_delay >= 16383)# B* ]- ?4 P* o
milli_delay = micro_delay / 1000;3 P8 S$ j, n& L- [7 a* U
else
3 ?! Y! l( \# U/ @+ O; e milli_delay = 0;
v; M$ p2 e6 Z5 H7 h' k
/ Y( ~# ]5 D' s: {3 {9 h |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
|