|
基于電子積木arduino的G代碼解釋器原代碼,來源于http://arduino.cc/forum/搜CNC
* H7 C/ l( w: _0 f& o我去年收集了許多程序,經過測試挑選出可以用,后來沒時間繼續研究學習,現在發
* k% [$ \7 g2 z+ T, C上來給有用的朋友參考
# L2 R2 y( s; p$ a1 S$ u下面是其中的小段源碼7 G( F7 U& y. T: n; \; S
//init our variables
8 }( E+ E( `3 s" Z$ a9 qlong max_delta;
! O9 I* W3 M. b. ~, \8 Along x_counter;
/ J& P7 z" ?& B1 Clong y_counter;$ s# O8 j; u9 X5 [. b
long z_counter;
: Z- U, P9 o5 K2 X+ X( x) o- Z+ Hbool x_can_step;
0 h7 W. n4 w- e4 L5 W4 bbool y_can_step;6 L9 H( | d5 h# w: [
bool z_can_step; T. o/ C' W+ L* W: x
int milli_delay;3 k" ?! _0 A- Y& V' X# c
void init_steppers(): L0 E6 W$ n5 B* V- L5 Y
{
6 a0 h# B" L: t% h //turn them off to start.
2 t4 F% V+ C4 J$ \ ]' g& g/ j W disable_steppers(); ~! Z1 j) n2 S7 n Z
& V* H m. B( r( W
//init our points.
) _6 v+ _& U0 j+ b8 R current_units.x = 0.0;. e0 m# w, N+ D7 ~
current_units.y = 0.0;% Q* t8 R9 J2 w
current_units.z = 0.0;
8 ^ U) G) k _8 g1 N% a target_units.x = 0.0;
7 E# Q8 V" A: P {8 I4 U/ b4 C0 x target_units.y = 0.0;
5 T/ l; I( k5 K6 q8 t" e/ c' r, n2 ` target_units.z = 0.0;
/ J# w3 R m! b0 v! T. w! u ; F t3 o Y, j$ S+ S
pinMode(X_STEP_PIN, OUTPUT);
" J! U2 i( A0 J1 ^ pinMode(X_DIR_PIN, OUTPUT);+ K. o% p4 J; z' L% G: }" Y: x
pinMode(X_ENABLE_PIN, OUTPUT);
! f2 T1 Y6 z3 P0 ?' c7 j pinMode(X_MIN_PIN, INPUT);
+ c% t5 i+ o6 c' x0 Q1 O% L pinMode(X_MAX_PIN, INPUT);
8 L3 |/ P: f% P* ]" F+ m) p# | - t# F7 t& L. C; {+ _' T* s4 Y
pinMode(Y_STEP_PIN, OUTPUT);
5 k& A3 k& u6 x7 ?; h. M% V: J7 C pinMode(Y_DIR_PIN, OUTPUT);/ {; p, k# ?" ]2 c8 F, B, @0 j
pinMode(Y_ENABLE_PIN, OUTPUT);6 z! q+ b3 O: A( q! q; b
pinMode(Y_MIN_PIN, INPUT);. R$ s2 I' h& t" L1 K
pinMode(Y_MAX_PIN, INPUT);4 _+ l$ W9 {' ]3 D. Z
% s9 e. Z4 q: |( I! R/ V3 l/ |/ d
pinMode(Z_STEP_PIN, OUTPUT);8 v( T' F" x! X& B8 G
pinMode(Z_DIR_PIN, OUTPUT);2 I6 B3 j$ `( w3 ^
pinMode(Z_ENABLE_PIN, OUTPUT);0 w" `% D/ \( y, G: k# X
pinMode(Z_MIN_PIN, INPUT);1 p2 L" i4 X" K4 \5 V ~+ j: ?
pinMode(Z_MAX_PIN, INPUT);
4 e0 H. ~: W% c4 Q! I* c $ G4 ^% o6 G4 n
//figure our stuff.
- h5 a7 J- H; T calculate_deltas();
/ f& j; d3 o9 S2 E5 ~}+ E# N4 t! ^$ O# D- g
void dda_move(long micro_delay)
# X, }. I8 ]( W3 h{. y6 ~* E! i% h1 p5 k: L& Q
//enable our steppers. \1 f! R8 Y5 G& ~% V, X$ a
digitalWrite(X_ENABLE_PIN, HIGH);6 E& {2 N3 D- I* @0 P! M( [6 e" l
digitalWrite(Y_ENABLE_PIN, HIGH);
- Z) R) Z& I, \* z( l digitalWrite(Z_ENABLE_PIN, HIGH);
. B$ n6 e9 [% P
1 I; i% s8 C4 D: l1 B4 h# F r //figure out our deltas9 j& k, I0 o/ F
max_delta = max(delta_steps.x, delta_steps.y);8 K0 |% j/ H! W/ X" a# A' N1 K
max_delta = max(delta_steps.z, max_delta);/ x3 V3 u O2 q2 \* h2 w
//init stuff.9 M- O- g8 K/ F1 ^( O8 B' i+ J
long x_counter = -max_delta/2;
8 {2 @ g1 t7 Z5 z long y_counter = -max_delta/2;2 k' ~% x1 n. J* E; g
long z_counter = -max_delta/2;) o8 e/ x. @1 `- e/ Q
5 H9 |) U1 J5 U2 n- Q! P1 g X. ?- ]
//our step flags
3 X& U& G. ~3 b' G" ~, j: E; b- w# | bool x_can_step = 0;
$ W& T! B. Q r' k% P bool y_can_step = 0;
" g4 u& I5 }9 h6 I bool z_can_step = 0;
- Z2 b- ?; I6 r C5 N
' N8 B1 ]* O' E if (micro_delay >= 16383)
* C$ k) [& }/ d+ r/ ? milli_delay = micro_delay / 1000;
2 c; g2 M: u0 s! [ else+ F k9 ] j, e# w8 q. ~5 H2 C
milli_delay = 0;
7 K" d3 J! L4 v0 w9 N. M1 _
) \: G: ~3 m+ M. M& H5 C& H/ T( u |
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有賬號?注冊會員
×
|