|
基于電子積木arduino的G代碼解釋器原代碼,來源于http://arduino.cc/forum/搜CNC( H8 r5 n0 y' T, A
我去年收集了許多程序,經過測試挑選出可以用,后來沒時間繼續研究學習,現在發* F2 e; E: H7 r+ X! U2 ~& c
上來給有用的朋友參考& s5 H: `6 {8 i5 u+ s
下面是其中的小段源碼7 q+ a e5 ]& A' L5 {3 K
//init our variables
+ }) |, |# @* Nlong max_delta;& k: R! X( q# P2 ^8 D3 T4 c8 y
long x_counter;0 X0 s! z3 p9 r1 A$ J M X, `
long y_counter;+ m' l) T; f5 t$ \2 \
long z_counter;
7 r: R7 V- u, k0 ^5 g/ lbool x_can_step;
# M3 P1 _0 E/ D% x' Q4 jbool y_can_step;
8 [2 p v# m2 ~/ [bool z_can_step;! x. a. Y4 j, J5 i
int milli_delay;
/ q5 ^8 M; }: q- Vvoid init_steppers()' z |: j/ `. L. r; z
{
3 o* w6 Z' W2 K //turn them off to start.
1 P) [, Q8 k- C; i2 i1 I disable_steppers();
) B9 b- z- a0 s" r# ] ( V$ d/ T4 s5 ~" u) S/ {! V
//init our points.0 `2 h* d! C9 k% a5 E
current_units.x = 0.0;
2 b/ P# W4 @# i; T& x current_units.y = 0.0;4 W* J; N' j; {* `; a
current_units.z = 0.0;
T3 Z5 i1 v0 O target_units.x = 0.0;
! ?' |& l1 |% u# s- f9 k target_units.y = 0.0;
" a: M& i0 I% ^; ]3 B6 v) B8 w- n target_units.z = 0.0;3 ]# v5 F- k( x3 V [1 E+ e' {
& e. d: Z* p4 Y
pinMode(X_STEP_PIN, OUTPUT);; A% A t, M* @' H9 X8 R
pinMode(X_DIR_PIN, OUTPUT);$ q# g9 g* v( [1 Q* e5 D' E
pinMode(X_ENABLE_PIN, OUTPUT);
7 V) ~; T! i; w6 x- r pinMode(X_MIN_PIN, INPUT);+ @# ^5 s" V( ^4 m
pinMode(X_MAX_PIN, INPUT);
6 b0 }: X0 P9 B- @0 j4 Q7 F5 a ; l I& l" ^0 ~. }7 M5 w+ l
pinMode(Y_STEP_PIN, OUTPUT);
/ i# O- N" u0 m0 c+ U: _ pinMode(Y_DIR_PIN, OUTPUT);
0 P" B7 f* s5 L: u9 T pinMode(Y_ENABLE_PIN, OUTPUT);) B2 L5 J, l9 f8 i( g5 y; p' N, {
pinMode(Y_MIN_PIN, INPUT);
; b+ x) b8 I( {& n; o# v4 ~. x pinMode(Y_MAX_PIN, INPUT);" y4 J9 ~3 z6 |3 \
) S' D. h& p1 m' v, `
pinMode(Z_STEP_PIN, OUTPUT);; o6 m; x) H2 j: m
pinMode(Z_DIR_PIN, OUTPUT);0 J6 g! h/ j* U
pinMode(Z_ENABLE_PIN, OUTPUT);
2 _9 S7 L- k6 E9 |5 N# {& i g+ m( L pinMode(Z_MIN_PIN, INPUT); h; P: e3 z% Q, o
pinMode(Z_MAX_PIN, INPUT);
3 ]5 e% U8 R7 ]( M
5 p3 J( T5 N* W //figure our stuff.- l! ?( l2 K9 x4 L7 G
calculate_deltas();+ _- E9 q) x; E" V4 u9 J
}' q' n0 m* p* p2 e
void dda_move(long micro_delay)
* C8 x* y1 w/ u{2 m- d1 _" l2 I2 D! n
//enable our steppers7 B' S# p, v9 t. v. c
digitalWrite(X_ENABLE_PIN, HIGH);
0 ?( ] i% ~" e: @" q digitalWrite(Y_ENABLE_PIN, HIGH);
0 q+ W, w* E% A" b8 K; m) [: X0 M. t( E digitalWrite(Z_ENABLE_PIN, HIGH);
: \: l/ g" _+ ], i- _5 m% |" p * _$ S) n& B* M/ v9 w. i
//figure out our deltas" N. D8 @* o5 s# E2 C* W, m4 D; @
max_delta = max(delta_steps.x, delta_steps.y);
- f, a/ E! x( j2 g- ?/ J, B max_delta = max(delta_steps.z, max_delta);
. y0 } N4 v3 _ //init stuff.6 L3 Y& r7 \8 m8 y, e9 C
long x_counter = -max_delta/2;2 K w, S5 [% A
long y_counter = -max_delta/2;0 u) x& ~+ R$ q/ p. H
long z_counter = -max_delta/2;
5 w2 G- b, r: l: _0 F) p" J l
4 w. \+ Z. h: L @* ^ //our step flags2 e" ]3 J& O+ c2 x% a" E
bool x_can_step = 0;2 @* w. ?7 ?* p% B! U \
bool y_can_step = 0;
4 k7 H# f8 g) J: n( n* B* W bool z_can_step = 0;
3 M- U- F+ V K9 }& G- L4 d7 T. P
9 M3 p# ?2 q& @ if (micro_delay >= 16383)% B; k, I7 y; G; m
milli_delay = micro_delay / 1000;
2 p7 S+ d+ m0 y+ r else
' |1 z( ^+ {3 W0 Z0 c' Q; Q( V( X milli_delay = 0;. S' @( I- F& ?* ?5 d. u
+ e3 _" F: V' U& K# R( {- f |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有賬號?注冊會員
×
|