設為首頁收藏本站

圓創力科技.MakeBlock TW

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

掃一掃,訪問微社區

查看: 1176|回復: 0

mBot Ranger 高速循線範例_

  [複製鏈接]
magiccar 發表於 2018-2-13 01:51 | 顯示全部樓層 |閱讀模式
3 p, g% E2 v- {/ E5 N
  1. #include <Arduino.h>7 J- L# Z5 m3 Y  l' p, k
  2. #include <MeAuriga.h># b. v5 m1 C! p+ _9 V& Z: o
  3. #include "MeLineFollowerArray.h". r( o( X3 ]4 ^) z% q2 u* h) g) C

  4. ' `* y6 Z- x- a0 d2 L9 ]
  5. MeEncoderOnBoard Encoder_1(SLOT1);! X) H' l0 L6 x! _- k2 Y! Q& q7 w
  6. MeEncoderOnBoard Encoder_2(SLOT2);
    ; Z3 X9 R" \) B. A
  7. MeLightSensor lightsensor_1(12);! q) h2 ~9 l1 ^, r+ z
  8. MeLightSensor lightsensor_2(11);0 x" _+ [" Z2 }
  9. MeBuzzer buzzer;8 [+ {* _, Y* Q! d, h
  10. MeLineFollowerArray linefollower(PORT_6);
    1 o/ x( P& R% K' |. c

  11. : f) X6 P6 [/ R2 o8 f$ m
  12. #define Error1 13 p/ S, n) d( u$ T
  13. #define Error2 2
    & f" Y0 N7 @, a
  14. #define Error3 3
    & y- P/ z, P4 e: d) J

  15. * E8 T9 L! c) ~1 q+ `' `2 ]# A5 I
  16. #define Kp 15
    4 |  h6 {/ x1 ^9 u
  17. #define Ki 0.15+ g  N1 {5 p" a* [5 S
  18. #define Kd 0.03
    # [# w; k& L' n0 t5 E8 h

  19. 1 g+ a. `9 Q% |& E% ?
  20. uint8_t sData;  L% h. r2 U8 Z, @. @, v! \
  21. uint8_t D1;
    - F4 v* I* r; S/ x; N3 o
  22. uint8_t D2;' U/ _) s- T! z; i
  23. uint8_t D3;. M! A" U5 ]* r, h7 f1 [
  24. uint8_t D4;
    " n1 c! G; D& G
  25. uint8_t D5;# {: P2 N( `! O: d# t
  26. uint8_t D6;
    0 h; x7 L: `# J: P' c

  27. " W. ]; h9 Z2 n) Z$ A$ b
  28. float previous_error = 0;
    $ P" w6 g7 L2 V1 J% f, l1 q
  29. float integral = 0;* D% |% G/ r6 \) [) {
  30. float derivative = 0;( g! u' C- [/ e5 h% K6 h0 ^7 Q) Z; r
  31. int  Speed  = 160;
    ! j9 h* j/ n* \4 c" l
  32. float output;
    ; j& f& h0 H/ x0 m6 ~
  33. 4 k( f8 ?1 e  H! x( Y  h. @- W
  34. byte Left;" ~% e3 m, _$ l) y  B, b: j' I6 m

  35. / W6 ~6 O+ V# ?! }8 d) i
  36. void setup() . a3 B5 M0 P0 ~/ I5 a; T
  37. {) W$ t/ {7 U2 ?5 l" o9 I- d
  38. //Set PWM 8KHz
    9 |  _& y! z4 Y. ?% v
  39.   TCCR1A = _BV(WGM10);6 e- Y* E: Y* u
  40.   TCCR1B = _BV(CS11) | _BV(WGM12);
    , i# |- }6 Q2 z% r0 e# S, G! D( c" W) y
  41.   TCCR2A = _BV(WGM21) | _BV(WGM20);: W1 k: V# a3 e! {, P/ U6 C
  42.   TCCR2B = _BV(CS21);
    : A3 w) e; o: w: U, D
  43.   Serial.begin(9600);1 D9 ~5 n7 f! h' f( k1 c4 L2 J9 Q5 [/ O
  44.   buzzer.setpin(45);& d" K! j% S, y0 |
  45. }& a# Z4 e  Q) m  N- p7 q

  46. / t" T& L, A. U1 S/ n
  47. void loop()+ Z( P4 N4 b( Y" y8 b$ C9 ]) J
  48. {
    # d3 c$ m' L) [, z' c/ K8 P' U2 Z
  49.   while(!((lightsensor_1.read()) < (10)));
    + R5 w% G/ V  N5 I) M( E( ^5 [
  50.   buzzer.tone(1047, 500);
    - Y; a4 {$ n$ k2 }9 l# l8 _; c  u
  51.   delay(500);" p8 `1 [$ Q, Y
  52.   do, e3 R) l- a  o7 y0 {- R3 {0 c
  53.   {+ r* Q; h5 E, L# g* [5 j
  54.    int Err = getErr();
      l5 D9 V2 \% ~* b' k$ O& e1 H
  55.    if(D1 == 1)$ S) W5 G3 C* H3 f. w2 T4 K
  56.    {* D( |. a, w$ ?* O9 ~8 g1 z
  57.      Left = 1;
    , E. ?, v# S6 Y9 q
  58.    }$ U* k3 p% s. I2 H4 w
  59.    if(D6 == 1)
    ) M! e; C/ ~* ^( Y
  60.    {
    4 d* o. W4 O6 s
  61.      Left = 0;
    1 a% X7 L6 J; t. s5 j; {/ g$ Y0 N
  62.    }1 b: J' A# ~5 [* a& W; u- _+ i
  63.    if(Err == 99)
    8 I; Z4 z; [( X
  64.    {3 ^8 W/ M4 R7 m
  65.      if(Left == 1)
    " l' v3 P7 Y* i
  66.      {  q0 d3 G* }$ H* G
  67.        Speed -= 5;
    $ Q/ C- U/ A( c: n5 h" @! l
  68.        moto(0,Speed);! l; X  |# Q1 g- _4 F( `' f6 w
  69.        do& ]3 M! s& h8 _/ `( S& {
  70.        {8 K7 `/ @7 P6 [! E
  71.          Err = getErr();3 G/ g: }% G5 _4 B2 F" i! l' l1 C/ K
  72.        }while((D1+D6) == 0);; W$ |, p9 n9 ~/ s  f: {
  73.      }
    # H4 f! c% E$ A8 p1 L$ @- a$ s
  74.      else
    6 y3 c+ l5 O+ V: Q" x- W& ?* D* j: s
  75.      {) H; z( S& S3 Q$ v. R( U
  76.        Speed -= 5;
    * U( M4 P7 j# J, F0 U+ I
  77.        moto(Speed,0); & N2 z& o$ D" X# y) G
  78.        do
    9 V( ^1 Y1 n8 T+ U8 A5 v! k5 a
  79.        {
    : R! I8 [1 O1 h, R4 j- N6 |
  80.          Err = getErr();
    & Y9 }% q  A8 M: }: j; W% c4 }
  81.        }while((D1+D6) == 0);
    4 x  h4 a& Y" r7 E9 Q% {5 K
  82.      }, }4 O! }: h- [1 D; f( p5 n# v
  83.    }
    6 K; f5 ]# ]+ K/ k
  84.    else
    / k5 b9 \/ E: \* G9 Y6 E
  85.    {9 P0 G) G4 W2 [$ p! Q
  86.      if((Speed < 160) & (Err < 2)) Speed+=1;   N7 n; ?0 k/ H. A# L
  87.      if((Speed > 100) & (Err > 2)) Speed-=2; 3 E6 d+ n' p1 W& \% A
  88.      integral = integral + Err;
    ( D* Q% `! u2 s  U5 q9 V0 z
  89.      derivative = Err - previous_error;
    & K0 Q( P, R6 ~* P% L6 [+ N
  90.      output = Kp*Err + Ki*integral + Kd*derivative;
    4 \6 @; }) K2 F& A8 @5 J- S+ g
  91.      moto(int(Speed-output),int(Speed+output));
    3 I; Y& {# W5 @4 `8 c
  92.      previous_error = Err;+ J- R8 y6 f- y$ }" n
  93.    }' z3 y$ M( X& `' X0 ]
  94.   }while(!((lightsensor_2.read()) < (10)));4 p/ C! L, Y! ]- B( g: k
  95.   moto(0,0);
    + G; |6 I" l$ a9 A( G
  96.   delay(500);
      Q1 U$ @! N5 T) R; X* K$ e' }: T
  97.   buzzer.tone(262, 500);; G) L# `$ W: e
  98. }
    7 ?: t+ H+ W7 v+ X; _+ o
  99. * f- g: o6 e, |
  100. int getErr()4 ]( q% ^6 _; I# \& A+ d+ ]! X
  101. {  
      v. ~5 t8 u; p/ D/ _6 X5 g
  102.    sData = linefollower.getValue();' N2 O9 H# N& Q8 ^2 z
  103.    D1 = ~(sData>>0)&1;
    6 F7 t- F: ]8 H# T5 Y8 N5 x; S
  104.    D2 = ~(sData>>1)&1;, m, w2 `( l8 r  [" A( U8 s
  105.    D3 = ~(sData>>2)&1;( F# X9 A/ D' o+ o- K, X
  106.    D4 = ~(sData>>3)&1;2 `# n7 V4 L& A( y% ?0 l+ A/ J3 t
  107.    D5 = ~(sData>>4)&1;5 u* [1 P; N  S9 P3 M
  108.    D6 = ~(sData>>5)&1;7 R- ?7 E7 P$ H. X8 [% f: x7 m
  109.    int downD = D1+D2+D3+D4+D5+D6;( M2 L1 `6 B4 ^/ \7 p% m$ X
  110.    int upD = D1*(Error3)+D2*(Error2)+D3*(Error1)+D4*(-Error1)+D5*(-Error2)+D6*(-Error3);
    0 D8 [* D: s# e( I5 ]
  111.    if(downD == 0)
    3 a$ A5 R0 o+ W" ]1 l7 z! J8 _
  112.    {, U  ~: j+ L& w& j2 g1 I
  113.      return 99;
    . M9 I/ h( R9 m- p" A% }
  114.    }# ~6 [8 {6 P) i( m3 k
  115.    else
    2 M" E  r$ u2 L# F( K; `$ s
  116.    {, o  b; ~! d6 O$ v# w. Q
  117.     return upD/downD;1 c( n! u+ ~$ v, |
  118.    }
    " U) u4 \+ x2 f/ ~% b
  119. }
    " |5 k* [) Q4 }: _2 F2 P  x
  120. : ?; E$ l2 b# O4 A7 r8 O
  121. void moto(int Speed_L,int Speed_R)! x& |4 a9 P( o8 V# P
  122. {
    + p! K! R- H& L8 l
  123.   Encoder_2.setMotorPwm(Speed_L);
    2 e0 Q$ p% B8 L8 I4 H
  124.   Encoder_1.setMotorPwm(-Speed_R);; c9 J$ r' D# _3 N9 ]6 M6 V8 Q
  125. }
複製代碼
) l2 K# e" Y! i
MeLineFollowerArray.cpp/ C! V2 R0 L( [0 k/ R3 K2 N
  1. #include "MeLineFollowerArray.h"
    7 L& q0 E" D$ R" U& S0 Z/ Z

  2. 8 s1 G  A  f- A; a/ F/ S
  3. #ifdef ME_PORT_DEFINED
    . f* j. s  X9 @- m) B
  4. MeLineFollowerArray::MeLineFollowerArray(void) : MePort(0)
    . ]; u( @" T5 y: x6 ~
  5. {
    , z; B. Z6 Y' T4 S1 Y' e
  6. ' y( @& y2 s% X9 K9 K( P) e
  7. }, L7 t0 y$ B6 [, r
  8. MeLineFollowerArray::MeLineFollowerArray(uint8_t port) : MePort(port)
    2 x. b! X( r% D2 }
  9. {
    " {0 z0 V; K3 P- f* i" g
  10.     _DataPin = mePort[port].s2;
    8 m; N& U3 {' J" |& B/ z+ ~5 ?
  11.     pinMode(_DataPin, OUTPUT); . i" N- w1 L, x3 K+ F3 A5 h5 g$ `' O
  12.     digitalWrite(_DataPin, HIGH);( d8 i- E! n) y- k$ S
  13. }) C7 R3 k; {/ x
  14. #else // ME_PORT_DEFINED7 h' a+ s0 T4 U6 @) o
  15. MeLineFollowerArray::MeLineFollowerArray(uint8_t pin)
    4 L' ?7 c5 [7 t: S, R5 V' _
  16. {0 n3 ^7 t. q. E
  17.     _DataPin = pin;
    ) n& `9 h  ?1 o& y( ~1 t& [# h
  18.     pinMode(_DataPin, OUTPUT);
    3 J- `$ p  c# h6 w
  19.     digitalWrite(_DataPin, HIGH);
    6 v* ?: A) t  x& d
  20. }
    % B/ \- c2 f7 g* {
  21. #endif // ME_PORT_DEFINED
    / O! W) t& S3 z2 s7 q  `' \3 X
  22.   t! H% |$ w$ h

  23. : a% x, ?$ M5 c, Z/ P
  24. void MeLineFollowerArray::setpin(uint8_t pin)" [- p- p; m* x9 d( y5 t# F
  25. {8 d# V  {+ }0 j  Z; w1 {7 m; G4 k
  26.     _DataPin = pin;$ \$ l$ \3 |9 }, ~) w
  27.     pinMode(_DataPin, OUTPUT);
    % q' m! X  j$ r* I' C
  28.     digitalWrite(_DataPin, HIGH);- y* M3 n3 ]/ T. w* S9 t/ }
  29. 8 n' F( s% V2 \
  30.     #ifdef ME_PORT_DEFINED
    $ M; a9 Q) i3 m. J
  31.     s2 = pin;
    2 M9 W  b" `8 Z0 b) f8 n! K  H
  32.     #endif
    * o& Z: f( L9 R: q0 r- N
  33. }
    , U2 ~0 p3 K3 x7 E5 w+ i) a

  34. ' g4 R8 T7 c* k& j* V: L  \  q: T
  35. uint8_t MeLineFollowerArray::getValue()
    5 P3 E. o6 [) I1 y
  36. {
    ( W6 c0 i# H* d
  37.     uint32_t LOW_level_read_time;
    / c* J  `* j- m8 T7 `% Y  R
  38.     uint32_t HIGH_level_read_time;
    2 l5 k2 S. M( P9 T5 L$ N, f
  39.     uint32_t time_out_flag;
    0 H9 P0 `: A2 t. ~4 A9 Y5 h
  40.     uint8_t Sensor_Data[3];* g5 Y; q; L7 E+ o7 B3 `
  41.     static uint8_t old_data = 0xff;9 E" O0 e% I) ^6 B1 U& O
  42. : d- }' p0 d2 l- Q1 ~! V2 t- p0 Y; }
  43.     pinMode(_DataPin, OUTPUT);
    7 C( K$ ?5 a, Z1 `) ^( @3 r
  44.     digitalWrite(_DataPin, LOW);
    ' ^* \2 U: X1 p. L  E1 j8 h
  45.     delayMicroseconds(980);$ p9 L5 `0 v9 i" j9 G% q% g
  46.     digitalWrite(_DataPin, HIGH);! Q! `/ m4 d( E  b
  47. . {4 H; s; G1 j2 ^  s" d( J- _3 d
  48.     pinMode(_DataPin, INPUT_PULLUP);, m6 k7 @/ I) d( `& z; k
  49.     delayMicroseconds(10);/ j9 S: L4 A% l/ _6 ?
  50. ; ^1 @1 l5 T6 t3 Y; R% G) V. X1 d
  51.     time_out_flag = millis();! u8 j" M+ v( \6 Q2 ~
  52.     while(digitalRead(_DataPin) == 1 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );% [" P3 Z% P! _
  53. 2 s& P; F0 |" Y$ G1 N5 |
  54.     LOW_level_read_time = micros();
    0 X7 {8 X) i2 _2 k. d% R8 O
  55.     if((millis() - time_out_flag) >= MeLineFollowerArray_Communication_Time_Out)   //time out9 V5 n! v- Z3 r* ~. W' t, @! |# N9 H% T7 G
  56.     {
    ! a2 K) @8 j3 p1 O6 o
  57.         return 0xff;
    * U. }7 H: \, e6 C& m( @
  58.     }- D. ^, h' v7 A# Q
  59. * ]/ x2 b8 T% N- R) _
  60.     while(digitalRead(_DataPin) == 0 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );
    2 h' Q: i+ J! ], a
  61. ; a9 g( |( t5 n  F* }/ m
  62.     HIGH_level_read_time = micros();  p, v! p6 V8 |% u, U
  63.     LOW_level_read_time  = micros() - LOW_level_read_time;    //read 100us LOW level
    # t' i( U: g1 ~* z# v

  64. 0 L- C! }# p3 L2 @* E  ?
  65.     if((millis() - time_out_flag) >= MeLineFollowerArray_Communication_Time_Out)   //time out
    9 o% @* x9 L8 G+ h- K
  66.     {
    8 b+ p& k1 i' c0 Y$ k& p2 ~
  67.         return 0xff;
    # n/ J, a0 D8 ]' a" ~# d, }
  68.     }
    5 c% o; ~( Z+ U* v0 q; s# }7 Q

  69. - N' M# O* }; P; [! J
  70.     if( (LOW_level_read_time < 90) && (LOW_level_read_time > 110))
    ' Z3 W4 V$ c: f$ O
  71.     {9 {2 x! c0 |* E- u) R( k, J
  72.         return 0xff;
    ; v$ K5 {+ o: P/ H' e) S7 X
  73.     }2 g, n4 o' W5 o  E
  74. 1 h" X# R& C& p3 i
  75.     while(digitalRead(_DataPin) == 1 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );/ b0 `) Y8 v/ {7 A9 f
  76.     LOW_level_read_time  = micros();
    ' L- g2 P% H6 F0 k- ]/ p$ a
  77.     HIGH_level_read_time = micros() - HIGH_level_read_time;    //read 50us HIGH level9 P( m* Y+ t$ I" b* ]

  78. # \& o3 B6 w' t7 v. Z0 X0 \9 C" u# }0 W$ m
  79.     if((millis() - time_out_flag) >= MeLineFollowerArray_Communication_Time_Out)   //time out" G5 p. k6 t. b- O
  80.     {! `2 C4 R0 q& |8 Y: Z8 @
  81.         return 0xff;2 h( [9 Y0 [1 X+ D- W
  82.     }
    5 o6 P$ \3 }& v6 N
  83. . g! B3 F, x: N) U5 p
  84.     if( (HIGH_level_read_time < 5) && (HIGH_level_read_time > 55))! g% m3 x- [. q1 _5 g. G
  85.     {
    0 K& A4 L8 R& P
  86.         return 0xff;: F/ [0 d) H! D: |& M$ Q. P9 o
  87.     }
    % p( K4 H. @$ z1 `$ I" }3 _
  88. * Q+ K" t* H+ O6 e8 n8 |
  89.     for(uint8_t k=0; k<3; k++)8 f0 G2 i) q  C6 M
  90.     {9 J" T  M/ i& }2 z) _( G/ {
  91.         Sensor_Data[k] = 0x00;4 g6 J# K5 W+ |7 q& a

  92. - W+ q1 ]& `- m9 b
  93.         for(uint8_t i=0;i<8;i++)
    , n; f" P3 w* ~& {
  94.         {
    , f; w& L9 e1 z1 n7 `$ i( r  z
  95.             while(digitalRead(_DataPin) == 0 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );   //read 50us LOW level/ U2 j4 t6 B: e- h! m$ \0 P# I
  96.             HIGH_level_read_time = micros();
    4 `3 V# J& P7 A# d% ?. K* ^
  97.             LOW_level_read_time  = micros() - LOW_level_read_time;
    ) v  d$ i( F/ l3 f. ~

  98. : b- ~' [1 P$ y. G. R0 \
  99.             if( (LOW_level_read_time < 5) && (LOW_level_read_time > 55) ), ~  E6 H* K9 E6 W7 Z% J
  100.             {
    4 O: S! G- [' l5 h5 a8 M
  101.                 return 0xff;
    + z5 k- M: d1 _1 C% a
  102.             }
    2 M5 D5 h2 U& J8 {# G& ?  a3 Q& G! J
  103. 3 c7 J! Y9 y9 B7 i+ z' x
  104.             while(digitalRead(_DataPin) == 1 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );* d9 l$ d0 A) r& I2 ^
  105.             LOW_level_read_time  = micros();
    9 R/ |( V0 [" M2 K1 i
  106.             HIGH_level_read_time = micros() - HIGH_level_read_time;    //read HIGH level
    1 N6 l* s+ q( o( N5 a# {
  107. ; V- N' f- M" {! w
  108.             if(HIGH_level_read_time > 50 && HIGH_level_read_time < 100)   //bit 1+ R# s2 v1 h' G2 S" u  Q7 ~3 g
  109.             {
    # Y  w4 c& ^5 M
  110.                 Sensor_Data[k] |= (0x80 >> i);
    " a8 V$ |! }* t; O/ n
  111.             }
      r/ i) l1 {9 N5 X# `
  112.             else if(HIGH_level_read_time >= 100), w# ?1 b$ M- ^( @* D: b: F. Y
  113.             {
    / _/ O1 y/ n" c# O; _$ i' s' z0 I
  114.                 return 0xff;8 b7 a* B( }! ^8 m1 Y# z1 S
  115.             }
    8 Y$ ~* \, W8 s3 G+ P: D( I+ [

  116. # N; v& ]- y2 B# m9 x9 c3 j
  117.             if((millis() - time_out_flag) >= MeLineFollowerArray_Communication_Time_Out)5 Q. d5 V/ `6 C" V. X% Y
  118.             {6 \+ J& u, U5 x
  119.                 return 0xff;
    ; b) X1 ^( x# m' H
  120.             }
    ! l1 B, p' f  w! A# r% }) k* z
  121.         }6 }, f/ ?* Y1 [. [
  122.     }. i9 K, o# ?! U
  123. + y" J/ _6 J4 h$ f5 m" o$ o! y  J
  124.     while(digitalRead(_DataPin) == 0 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );   //read 50us LOW level8 T6 A) h! d: X" h% y& y, P, v, d
  125.     HIGH_level_read_time = micros();$ S0 Z+ p% C3 p# b9 y
  126.     LOW_level_read_time  = micros() - LOW_level_read_time;1 ]- Y# P: {# A+ @6 ?

  127. 9 A' \. J- r9 d. ?5 B
  128.     if( (LOW_level_read_time < 5) && (LOW_level_read_time > 55) )
    # ?' h, q$ `/ {- x7 z# X
  129.     {
    # D. U* l5 _/ Q" p2 X
  130.         return 0xff;+ J( F) c. i; d3 h
  131.     }
    * d5 @7 }# @3 {) ^$ W0 E5 e1 X: P

  132. 6 D; p* i6 S% M6 y1 ~. D( _
  133.     pinMode(_DataPin, OUTPUT);+ C/ _9 i. q# Y5 y& t
  134.     digitalWrite(_DataPin, HIGH);
    1 }; q4 U% X! [" K6 v
  135. 4 Z' t2 T* @6 s7 S4 ~
  136.     if( (Sensor_Data[2] == (uint8_t)(Sensor_Data[1] - Sensor_Data[0])) && (Sensor_Data[1] == (uint8_t)(~(uint8_t)Sensor_Data[0])))
    & S/ `3 \* w7 I6 Z- M. y
  137.     {
    1 `, n: D# c  F+ o
  138.         old_data = Sensor_Data[0];( I  ?" |% ?" ^# p
  139.         return Sensor_Data[0];
    * y; G+ y* W+ Q- j" a0 i% Q" h
  140.     }' \! ~6 x2 K; x+ [1 ]
  141.     else
    0 r) S, i8 v2 O  j& @
  142.     {. P, ~4 a, v: K. H6 o
  143.         return old_data;
    ! G5 n8 e( Y8 f, \9 S) p
  144.     }9 r/ ^7 `. }4 L" |
  145. }
    / `$ C) O4 k" C1 v, D- [. J) O
複製代碼
% Q  O9 b) a* k) p
MeLineFollowerArray.h   MeLineFollowerArray.h (731 Bytes, 下載次數: 0, 售價: 100 個銅錢)
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

QQ|Archiver|手機版|小黑屋|圓創力科技有限公司 IOP Robotic Technology Co.,Ltd Tel: 07-3924582   

GMT+8, 2018-10-20 12:00 , Processed in 0.051572 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表