|
基于電子積木arduino的G代碼解釋器原代碼,來源于http://arduino.cc/forum/搜CNC; X' V/ C: t6 U% k' G, U
我去年收集了許多程序,經過測試挑選出可以用,后來沒時間繼續研究學習,現在發- j6 _& Y$ K9 h: C8 m
上來給有用的朋友參考
- @' Z1 V; p! b3 `% D) h. k下面是其中的小段源碼$ P8 J5 L) g7 c$ Z9 ~4 t p; ~: B
//init our variables
' }2 \; x# K; `long max_delta;( ?# K8 P) `: F7 T6 k: a/ a; m
long x_counter;
# F! z$ |/ J$ a( U& _4 ?, Along y_counter;
0 B. \4 s% B. \* _& @: p$ p, n9 w Nlong z_counter;
8 I7 {) [" t8 i! Vbool x_can_step;2 W( }" D) z: t0 l1 Y
bool y_can_step;
0 P+ {; ^, c% y! ybool z_can_step;
' S4 t- M1 N' x" ~) }& X+ t5 cint milli_delay;
/ x, D2 j% P8 k) N4 V- _7 J4 Rvoid init_steppers(): w$ u# d. H3 s$ }3 d- R5 P
{ J7 [1 d: l, ]4 p8 \0 O5 Z
//turn them off to start.! Y' _( j% z0 b8 Y
disable_steppers();
8 }+ Z. f" G' v$ m0 O: R
! x {( B' _/ q& N9 K x //init our points.
, t& H( [/ P5 P2 W% X1 e, ^2 P$ ~# w4 J current_units.x = 0.0;
* W" Q$ i, ^! C current_units.y = 0.0;9 z6 C. b( J1 H" c1 v2 J. h, o
current_units.z = 0.0;+ f& p( l4 m6 |* ?% G
target_units.x = 0.0;
# Z' c7 ?- {) k! ` target_units.y = 0.0;0 Y8 C3 k' \+ f, t
target_units.z = 0.0;7 l/ o& E9 R- F8 M, U
0 s( P4 b1 U$ y# Q& f5 A
pinMode(X_STEP_PIN, OUTPUT);: ], {. |$ v$ L) a: l6 V7 T& b+ M( O
pinMode(X_DIR_PIN, OUTPUT);; `: b5 A( } Y/ J @2 i- I
pinMode(X_ENABLE_PIN, OUTPUT);
% }6 U7 j% [! l& k$ @ pinMode(X_MIN_PIN, INPUT);
6 Y( F1 R% x. G2 Y2 ~1 Z pinMode(X_MAX_PIN, INPUT);3 M+ T: \9 H) E2 ]+ [3 F* B7 D
5 H# `7 t- L" f! w" x
pinMode(Y_STEP_PIN, OUTPUT);
" i. u0 B" \1 H8 I pinMode(Y_DIR_PIN, OUTPUT);
+ I" o; I! ?& T' F/ _% x5 y pinMode(Y_ENABLE_PIN, OUTPUT);
. r/ S1 I! K, i, p$ `; b, P pinMode(Y_MIN_PIN, INPUT);9 u s" V- }2 Y, b
pinMode(Y_MAX_PIN, INPUT);
4 \; ?) {( B4 `" Y5 n4 N) X b+ S 8 N) `# A( s, _' B5 m
pinMode(Z_STEP_PIN, OUTPUT);
9 I1 e5 R- n- r, U: N4 W. J6 H pinMode(Z_DIR_PIN, OUTPUT);
6 W. C2 e! A' j pinMode(Z_ENABLE_PIN, OUTPUT);
! _0 P& y" `. _. W$ q pinMode(Z_MIN_PIN, INPUT);
5 v" |# K, W( f% E7 x) L pinMode(Z_MAX_PIN, INPUT);' z5 C) s0 x+ a6 }0 s$ Z
: ]( }8 ]/ q8 f! C( X- m //figure our stuff.
3 R- l$ ^7 ~. ~: n& O" e" f# n calculate_deltas();
: e9 l* X9 R! b7 G: Z}2 I( L6 [) f* z! s7 V7 }" H
void dda_move(long micro_delay)( v1 {& c. W7 V6 q- S
{
7 B6 }* ?5 I" `8 j& L //enable our steppers; N# e5 m/ v, o% L! F
digitalWrite(X_ENABLE_PIN, HIGH);7 U J" v; L* P! L- d) R; t
digitalWrite(Y_ENABLE_PIN, HIGH);
) ]# k' ?+ ~7 C/ x0 Z' B$ e digitalWrite(Z_ENABLE_PIN, HIGH);! } M* K' C/ }4 S6 U a
& y: Z8 p/ h) x3 Y //figure out our deltas
' \5 n6 |- L) p& r4 D max_delta = max(delta_steps.x, delta_steps.y);! ~$ L' I9 D, ?& C" T8 v/ P' x
max_delta = max(delta_steps.z, max_delta);
. @1 w, p/ ~* r, a) H* W //init stuff.
' {8 V- a6 p5 d5 V# f long x_counter = -max_delta/2;
! F+ M+ ] t0 d- Z8 ~/ I" Z0 J long y_counter = -max_delta/2;( n3 D9 j" H0 u* S
long z_counter = -max_delta/2;% h. j' r( ]# l( P: ~% J( q8 k4 c
2 H$ S5 @6 |7 I4 Q //our step flags
. }) `- _8 g* F, _! Q bool x_can_step = 0;
$ L8 v% r* R9 L0 s3 ] bool y_can_step = 0; i l& R5 V- N; Y9 {$ A
bool z_can_step = 0;
& x! E6 y' Z& F4 g$ j7 m( Z 8 K; J; p: y7 s! C% ~6 ?: k" D; L; ~
if (micro_delay >= 16383)
+ J. V/ m2 p! V& B3 G: d. @ milli_delay = micro_delay / 1000;& Y. \, s7 i2 X/ N" M. a) P
else
" j" i3 v0 i% m* s7 _- Y milli_delay = 0;
8 C k7 |; U2 }$ m/ r$ ?: K; W/ h& l% E8 c* f: P
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?注冊會員
x
|