|
基于電子積木arduino的G代碼解釋器原代碼,來源于http://arduino.cc/forum/搜CNC% Z4 p4 n" o! ^6 v! L
我去年收集了許多程序,經過測試挑選出可以用,后來沒時間繼續(xù)研究學習,現在發(fā)* h! y" ~. F# `5 ~2 i$ R( d
上來給有用的朋友參考; W2 Q8 d3 k( h$ K1 |1 K
下面是其中的小段源碼
9 u# U+ \+ b# ~# R4 H/ S5 |//init our variables
, h4 w0 L6 E2 h6 @long max_delta;
8 K8 w1 r! x! n5 ^1 blong x_counter;
9 G( o8 J7 j. S4 b2 ^2 e$ Elong y_counter;$ K: ^ m& w- H/ d# l) s% @3 V
long z_counter;
3 Y5 b" s% f. m7 q! Pbool x_can_step;( [+ `) b8 U! k
bool y_can_step;' f7 K9 f; @$ `& E0 i# q1 P
bool z_can_step;, O9 Q- _1 x$ ?6 P* |
int milli_delay;
& T) O; w( s' y, V2 Q( ~1 Vvoid init_steppers()
7 d+ b- g" w, Z+ }6 E$ O, e{
% Q, N! G" p. x. [5 s- g //turn them off to start.* k5 [, k' f' U# Z2 G
disable_steppers();
4 |, n( M1 D" L . e6 `7 e; q F6 B5 c3 K0 u
//init our points.
7 h* f) `; `, {5 g6 ^1 i current_units.x = 0.0;. m3 w2 S. |& }
current_units.y = 0.0;
& I r2 P U1 d* C0 D- o" s1 X6 ? current_units.z = 0.0;6 S% x h& u0 c7 ~+ A
target_units.x = 0.0;, ]7 q: J/ E, ~, R8 J/ [
target_units.y = 0.0;7 l1 W. p! b; {8 i h; G
target_units.z = 0.0;
9 F0 u* @2 e- f- |& w& D * z: h0 x( M) K. @. k; X2 A
pinMode(X_STEP_PIN, OUTPUT);
0 w% x& p+ l& {5 j! K. w pinMode(X_DIR_PIN, OUTPUT);
( N5 Z3 x, d- N2 [3 y) T: R) A pinMode(X_ENABLE_PIN, OUTPUT);
" m8 X$ R7 S, j8 o pinMode(X_MIN_PIN, INPUT);
/ O3 W( d4 `+ m6 z2 y- C pinMode(X_MAX_PIN, INPUT);
b" c+ X# e' o" W 7 J* {. ]& p9 S8 P; q3 E: b
pinMode(Y_STEP_PIN, OUTPUT);" z# R7 [7 b/ M/ b m0 w, ~0 `
pinMode(Y_DIR_PIN, OUTPUT);* I! ]# `' G, r/ V9 m# N8 _
pinMode(Y_ENABLE_PIN, OUTPUT);# r$ N6 v$ y3 g: _: g
pinMode(Y_MIN_PIN, INPUT);
6 W* o- ^+ U2 H; L, a pinMode(Y_MAX_PIN, INPUT);
/ o, \2 D% j: _
5 {" z* e( j7 C3 }6 z9 a) J pinMode(Z_STEP_PIN, OUTPUT);
) i" T5 d% {# @4 o pinMode(Z_DIR_PIN, OUTPUT);$ F5 O6 O/ F" O+ g/ J6 X+ r
pinMode(Z_ENABLE_PIN, OUTPUT);, [. [" s/ R3 S6 h
pinMode(Z_MIN_PIN, INPUT);
6 X: q3 X9 L) w' O+ T: q* K pinMode(Z_MAX_PIN, INPUT);+ r$ d) m& Y u g5 s% N3 }0 U
/ {' J4 r- R2 x% I& R' C p //figure our stuff.. V$ l+ e; u% W3 S( ?
calculate_deltas();
5 R/ v7 x% ]& w6 d. S' o' U}. z9 j8 {( N V) @* m
void dda_move(long micro_delay)
1 J! l4 c0 M5 T, i; J{
' J5 a: u5 {6 a //enable our steppers
) {2 @" u/ n0 W: K% Z digitalWrite(X_ENABLE_PIN, HIGH);. r! [1 y9 N5 c+ x) l) K
digitalWrite(Y_ENABLE_PIN, HIGH);
8 C0 Z( ^ @! q7 u* v! y2 ? digitalWrite(Z_ENABLE_PIN, HIGH);8 B* T2 |- q2 U1 E- Y. ^$ l
9 g4 Z+ ~4 n5 m% B. o1 e //figure out our deltas: J* e Z( k! X( B; ]. E
max_delta = max(delta_steps.x, delta_steps.y);
, G# `: |" y6 Q1 Y0 s- r max_delta = max(delta_steps.z, max_delta);
+ V; u3 g$ b* j" ^# k& {; |; n7 S //init stuff.
5 t: |! z2 z: `! k long x_counter = -max_delta/2;
+ i; O; a; e! J& y4 u; J long y_counter = -max_delta/2;
6 A$ Q0 Y7 f% n* v& n8 h long z_counter = -max_delta/2;; ~, U* [1 ^9 L* I6 y5 F( g- L) V
9 S: w+ t! g H6 B //our step flags
f, j6 `2 G! ]# w% I9 T bool x_can_step = 0;
+ Y4 |7 h/ ~- Z bool y_can_step = 0;
: S; m; t: K! H+ l bool z_can_step = 0;
3 z0 W; q7 |, } 6 ?0 q0 I8 j; C( W0 g( f& l
if (micro_delay >= 16383)( d) B9 ^' @8 V7 ^
milli_delay = micro_delay / 1000;
$ \! I0 V/ c7 F4 Q else7 i, Q" f w) [0 }1 ]- A* Z6 x
milli_delay = 0;7 _( v8 `- k4 G( m, W. C
) C8 x! e' k2 T- Z
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有賬號?注冊會員
×
|