|
基于電子積木arduino的G代碼解釋器原代碼,來源于http://arduino.cc/forum/搜CNC
8 ^; O# ^$ |6 _- @! b- v我去年收集了許多程序,經(jīng)過測試挑選出可以用,后來沒時間繼續(xù)研究學(xué)習(xí),現(xiàn)在發(fā)
; F1 H7 l; D. c上來給有用的朋友參考
7 g1 s# W9 O) K6 [9 ]+ _下面是其中的小段源碼# n- p& e, i- l+ R; ]6 i
//init our variables
5 q4 b9 ]1 \# |5 Ilong max_delta;
& l( r. V6 N elong x_counter;
. Z" o% i* s- w" {* Hlong y_counter;. [5 }5 b7 c8 z
long z_counter;
! G; N6 s" u' ^# I5 I$ Ybool x_can_step;
' ?3 d0 c: K1 d% A3 t$ Fbool y_can_step;
6 H" r, V4 w: y A- D! |bool z_can_step;
5 T8 x6 _0 u- jint milli_delay;+ e' `- Z- e6 V& N& Z
void init_steppers(): |9 g9 S, T; r( ?
{
/ p) ]# }; s0 k6 _7 u- X) W* R$ D* i //turn them off to start.
1 l' L& q% H9 b. E% V disable_steppers();
- X }! S; A& [
. x9 ]7 p4 X+ {. s //init our points.& r) v& A; m5 i8 e: l
current_units.x = 0.0;
) W% O6 R9 z; F) K5 F6 d6 {3 n( K current_units.y = 0.0;
, r: ~) p' C' H' k current_units.z = 0.0;9 @1 W3 G; S4 p; e6 a
target_units.x = 0.0;
2 A: g( L$ c7 p5 \& D6 P0 b; [ target_units.y = 0.0;* v/ F) w; Y' L; p
target_units.z = 0.0;7 f+ n i7 B, x/ `
q0 S1 `) V! m0 l
pinMode(X_STEP_PIN, OUTPUT);
, j7 k- I. D$ o: f# U W pinMode(X_DIR_PIN, OUTPUT);
& q& `$ m6 L4 T5 E pinMode(X_ENABLE_PIN, OUTPUT);- ~) g' [0 y) ]+ N' _& E
pinMode(X_MIN_PIN, INPUT);
2 J+ c, }7 x( o! @6 @' B pinMode(X_MAX_PIN, INPUT);. R4 D6 D# h2 W6 u
' V2 H3 k( M" g- J( A pinMode(Y_STEP_PIN, OUTPUT);; p' w# y. K3 x$ v( F }
pinMode(Y_DIR_PIN, OUTPUT);0 \/ b! F# w) \+ h$ A
pinMode(Y_ENABLE_PIN, OUTPUT);
( u. k: U3 C1 s) J9 Y pinMode(Y_MIN_PIN, INPUT);
* t' Y& t1 ?+ d; B, p' | pinMode(Y_MAX_PIN, INPUT);0 Q, J" u& W2 {* c
# J) C. S4 n, B, U$ g/ f1 x7 y
pinMode(Z_STEP_PIN, OUTPUT);
; x( Q* n$ F& ~% z, G0 C/ R pinMode(Z_DIR_PIN, OUTPUT);
6 e* B/ `7 ]/ | pinMode(Z_ENABLE_PIN, OUTPUT);
3 a/ }4 H: t3 f# i8 Y' z pinMode(Z_MIN_PIN, INPUT);8 b! @7 h' V8 ?& l) V5 r
pinMode(Z_MAX_PIN, INPUT); p3 A1 L0 p$ A7 ?
5 [. l6 l3 b8 x- z! a
//figure our stuff.
- h1 |% C P$ u7 p, D8 N calculate_deltas();) k$ l' ]* n6 X# G4 m4 Q
}4 q3 e( R. ?7 F/ Z
void dda_move(long micro_delay)
: w) S# ?) t, E Y% z7 {{
$ m2 h4 h. w. G. X& t. z3 u# y1 M //enable our steppers+ x. d* o! l) H W, E! u7 K
digitalWrite(X_ENABLE_PIN, HIGH);
: S2 d/ E; q: ~# F& T( m8 \, Z2 U digitalWrite(Y_ENABLE_PIN, HIGH);# O) M% A0 H& j7 K3 F
digitalWrite(Z_ENABLE_PIN, HIGH);: {" a3 Y) ?( C
2 l q- S8 t. R& R8 A
//figure out our deltas7 f/ O: p+ H" W- L
max_delta = max(delta_steps.x, delta_steps.y);
: Y# c* E7 m. G" ?& Y& i% m max_delta = max(delta_steps.z, max_delta);* ]+ ^2 z; `' r. M! y4 F
//init stuff.
- p6 M* e( U" q3 T6 ?9 B- f long x_counter = -max_delta/2;, O( k8 `1 R) p. P% h
long y_counter = -max_delta/2;& s: l3 O( _7 r) a: o
long z_counter = -max_delta/2;- h6 L5 H3 y9 e B$ x3 N: M
. j: {- b$ f5 c" ~6 a/ i ]' s, C //our step flags
4 X, m$ V3 h/ o7 R+ d9 ? bool x_can_step = 0;) I @* A W b& h( `1 m0 d+ ~
bool y_can_step = 0;$ ?/ ?: e0 n' t9 c2 A( w( `' Z1 d
bool z_can_step = 0;5 y0 o% l% M9 O/ H
: k A& K8 V4 ]# _ if (micro_delay >= 16383), ]# ]5 z# G4 d$ r A
milli_delay = micro_delay / 1000;
; h, C: Q4 N2 A e% q& N1 \ else
G! c8 |9 ~6 o milli_delay = 0;2 Q# L$ g# w ^; S3 }9 J7 U4 ?6 \
6 I! v$ ~6 [* M6 n* V) R( ~+ d
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有賬號?注冊會員
×
|