|
基于电子积木arduino的G代码解释器原代码,来源于http://arduino.cc/forum/搜CNC& W1 s& h8 G- ~" g' |3 {+ y2 G
我去年收集了许多程序,经过测试挑选出可以用,后来没时间继续研究学习,现在发
: [2 q' L& E' X! Z4 C7 l上来给有用的朋友参考
0 ~# ]# s, G, K) N4 v; {下面是其中的小段源码
; O# K; q- z- K3 K//init our variables' u/ h" G A- C" V+ T4 R6 l
long max_delta;
6 V/ M% T- ^, z$ l& l- d! Glong x_counter;! j- |5 ^" p3 D ]7 [& T2 u+ I9 @
long y_counter;: V/ V2 t s* z& g
long z_counter;' Y/ w ~- D5 w) X, R
bool x_can_step;
g# `7 u r* x# G6 d/ ~bool y_can_step;
( ]) [: o _& @8 |# Z; b& Q% {bool z_can_step;. O$ j6 _/ W1 Y# ^- C7 D {
int milli_delay;
& k" X/ j: V4 y4 S$ X& Cvoid init_steppers()
9 R0 Q+ h, ^4 P" k7 S6 u+ O{
( `" x' v' ]+ {) ~% s# W //turn them off to start.
) M4 R" L9 F, ~' H- E( @0 F1 \ disable_steppers();
. q6 y; }5 l( C, {1 n! G1 Z p % x, m |* f+ i8 H% V, {8 ]7 G: A
//init our points.) T- d# I8 d! J: t# E6 O
current_units.x = 0.0;
/ N8 y" o' G1 T+ z current_units.y = 0.0;$ _0 }0 f7 d% M. ~, v$ S3 n% t
current_units.z = 0.0;
0 }9 O* {: A, t0 P6 v target_units.x = 0.0;- T% ?% T) D+ s
target_units.y = 0.0;1 n& k7 Q6 J! q
target_units.z = 0.0;
2 @& T' q% {4 B: C+ m, l4 D0 ]
8 r: V9 @; B/ y. d6 O pinMode(X_STEP_PIN, OUTPUT);
& _$ T: i( D; a& \. N$ A$ ]( \ pinMode(X_DIR_PIN, OUTPUT);- r# W8 ^ u/ P2 W4 e% y. W
pinMode(X_ENABLE_PIN, OUTPUT);3 B+ {6 P$ q; m2 z+ s; Q$ M
pinMode(X_MIN_PIN, INPUT);
2 C+ [" H9 C p- S0 ~2 v pinMode(X_MAX_PIN, INPUT);
5 h5 t4 w# R g& L
: @9 F) h& i& ~* ~& S8 n7 e& C pinMode(Y_STEP_PIN, OUTPUT);9 h' v3 C+ R; F4 S. Z1 {
pinMode(Y_DIR_PIN, OUTPUT);3 i: O5 U' k2 H& w! t% V
pinMode(Y_ENABLE_PIN, OUTPUT);$ f6 U! s. `, s- k: N% }, R/ S4 c" _
pinMode(Y_MIN_PIN, INPUT);
9 \+ z6 s' E( } pinMode(Y_MAX_PIN, INPUT);
; c% x" \( D/ c; w% U : G& s' r& ^% p
pinMode(Z_STEP_PIN, OUTPUT);( t/ O2 E5 T. U% ^2 I, n" v% u
pinMode(Z_DIR_PIN, OUTPUT);' t% ]* B* s* g
pinMode(Z_ENABLE_PIN, OUTPUT);0 a. E0 f+ b' l2 H
pinMode(Z_MIN_PIN, INPUT);
" r! D0 p4 P1 j. U' o. b pinMode(Z_MAX_PIN, INPUT);- Z. [0 K0 N+ p& P$ E
; o; p& d- j, p* h' | //figure our stuff.9 [! n) P2 `) U/ J* z
calculate_deltas();
4 |3 f/ ~! a# R& f) G; W3 O}
1 @3 w9 r; t# i! H" {void dda_move(long micro_delay)3 d/ O1 M, v2 i& w7 h2 `1 ^ E
{
" L7 z# z2 Z7 J* s8 h6 m$ X- V //enable our steppers
8 f5 s) D: `0 J R3 @) A" H+ ]/ L digitalWrite(X_ENABLE_PIN, HIGH);; d" p5 r0 L" G( L+ M0 J3 `9 M' f
digitalWrite(Y_ENABLE_PIN, HIGH);
) o/ m+ j( J2 L2 d8 G8 q5 x digitalWrite(Z_ENABLE_PIN, HIGH);6 }, ?: Z9 ]1 g, z1 v
, P& F# S6 x8 u5 r! w6 g
//figure out our deltas
7 I% N1 d3 ~3 _ max_delta = max(delta_steps.x, delta_steps.y);% p, P; y* p2 z) H, ?5 w8 J, D6 n/ W
max_delta = max(delta_steps.z, max_delta);- }6 G+ t, A- e3 ~7 O- X8 ^
//init stuff.
8 k8 v0 m( x9 \7 l' Y long x_counter = -max_delta/2;
T/ b% h/ O5 M1 M; i long y_counter = -max_delta/2;
9 D7 Y& n6 Y+ [2 t! \9 H long z_counter = -max_delta/2;
& Y( j" f! w, I+ _5 e 9 K w" f* Z1 ~; o+ ?7 E
//our step flags
+ a: M3 u2 B! `, l, ] w bool x_can_step = 0;
" g% u1 I& e9 `9 ?* k- a; F bool y_can_step = 0;6 G- u" f1 L& J
bool z_can_step = 0;
( S( q5 ? Q. j8 C; i 3 {; q! C- U$ _6 q+ J
if (micro_delay >= 16383)
$ Y1 J% t; b4 {" r7 k; M* v' H4 D milli_delay = micro_delay / 1000;/ \- f6 ~5 @2 p6 q
else
: M i' F& |% T6 O1 q2 E milli_delay = 0;
) P: D: h5 [+ l g( `; Q8 r1 U5 R1 u+ j
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
|