設為首頁收藏本站

圓創力科技.MakeBlock TW

 找回密碼
 立即註冊

QQ登錄

只需一步,快速開始

掃一掃,訪問微社區

查看: 778|回復: 0

mBot Ranger 高速循線範例_

  [複製鏈接]
magiccar 發表於 2018-2-13 01:51 | 顯示全部樓層 |閱讀模式
# q% u: ^7 @& ^: i0 O* h7 ^$ X
  1. #include <Arduino.h>
    % m+ o% G2 c4 P6 Q9 ~1 ]
  2. #include <MeAuriga.h>
    2 ?7 q& I$ G* E9 D6 F: X- s
  3. #include "MeLineFollowerArray.h"
    8 A" B9 _; p9 J) \
  4. 9 h' U: B5 H! S/ q
  5. MeEncoderOnBoard Encoder_1(SLOT1);
    : N" P5 E  r3 n1 A* B  Q
  6. MeEncoderOnBoard Encoder_2(SLOT2);
    ; r; d  z0 b- l) V9 {
  7. MeLightSensor lightsensor_1(12);0 H8 Z$ _* \6 ?, _2 Z9 p* w1 q3 F% G
  8. MeLightSensor lightsensor_2(11);
    ! b) i- v& {0 Q8 a
  9. MeBuzzer buzzer;
    " ~' X6 F9 U+ K& G
  10. MeLineFollowerArray linefollower(PORT_6);7 H! R- _( K9 z- k/ H, w. L" k  g

  11. 9 w7 b! C5 ^/ R% T' g
  12. #define Error1 1
    / D/ n; \2 J5 X+ c0 f: x7 n
  13. #define Error2 20 o8 P' o! o! ]
  14. #define Error3 3
    : A* d; T" s( L6 H9 c& G5 m- C
  15. , X8 y) @$ s% E9 y0 Z1 J  D
  16. #define Kp 15
    1 v( @9 U% T) c
  17. #define Ki 0.15
    $ u8 K1 P/ G: k8 T) z
  18. #define Kd 0.03  W3 C. v7 C1 ?2 @

  19. 0 N1 U0 G4 c8 b1 c( t$ N
  20. uint8_t sData;
    ' i3 M" B7 ^. ?) k+ G9 Z
  21. uint8_t D1;
      M" w+ T% C3 c" R3 j4 i
  22. uint8_t D2;
    ! f7 F9 D/ O  T7 e+ |
  23. uint8_t D3;+ {/ B" `$ j! E- V8 M0 e
  24. uint8_t D4;
    ! y6 C* L. G. P2 X
  25. uint8_t D5;7 K* _) r. p& \% `$ x3 c, i
  26. uint8_t D6;2 `5 c: t8 t0 L' {1 a& a5 {: X

  27. # Q0 M# u* J; v
  28. float previous_error = 0;: h9 ?1 [" Q( ~' ]- c* j
  29. float integral = 0;
    ' Z+ q) h9 G3 N5 {8 J
  30. float derivative = 0;
    8 |9 p2 g! D' x7 M
  31. int  Speed  = 160;
    8 P0 C+ h, O5 x% K6 I
  32. float output;7 s- d/ w0 j0 O% i$ P  ~

  33. 0 j1 p: i: J9 p% K0 N9 b
  34. byte Left;
    1 x1 _( R6 `2 ]5 {- K5 q- e

  35. 1 T( G- l$ D+ R  T3 }
  36. void setup() 6 I5 h% _& j& }8 ^5 q9 ^) Y
  37. {1 m, x- Y4 Z1 C
  38. //Set PWM 8KHz
    1 p! s3 @/ M& p- `; t- Q" N
  39.   TCCR1A = _BV(WGM10);/ A  M0 r  @; m7 r- _
  40.   TCCR1B = _BV(CS11) | _BV(WGM12);0 l; w2 K. O  A
  41.   TCCR2A = _BV(WGM21) | _BV(WGM20);
    7 \9 T% K' b( w
  42.   TCCR2B = _BV(CS21);
    + k$ t) t& V, X5 G
  43.   Serial.begin(9600);
    # j% d% q' m8 K! m
  44.   buzzer.setpin(45);
    8 l) O2 U5 y2 O3 W
  45. }
    - V8 `) e) I2 m, g
  46. $ X) ?: L* y) S
  47. void loop()/ x' u' J: q3 p1 q, Y0 S" `
  48. {
    ( ^; W! k) F+ Y. ~5 i
  49.   while(!((lightsensor_1.read()) < (10)));4 M& D5 T% V9 }' Z: C
  50.   buzzer.tone(1047, 500);
    ; D' [+ h  Z( H. a6 {$ i$ f
  51.   delay(500);
    * g* p/ k$ S* e* Q! R
  52.   do
    " V1 M7 p9 u1 K& e3 }/ r5 I6 a
  53.   {: i7 o( E, F/ N* f) B
  54.    int Err = getErr();
    9 e, O4 v, J- e9 i- W* ]
  55.    if(D1 == 1)& i; f' P2 h6 m( z! @2 `
  56.    {% u, h* Z; e% n7 l' S& F* j3 f( u
  57.      Left = 1;
    / V: R+ q" X* B+ V/ d+ K$ v$ V
  58.    }3 V' Q. Y; U+ h* e" p  p, B) @* \% `
  59.    if(D6 == 1)
    ; \; D. b' k+ H/ t" \
  60.    {
    : q1 U1 s% K" S& s+ M
  61.      Left = 0;8 P5 G" F: f: c
  62.    }
    # T# z$ P5 H( t5 X
  63.    if(Err == 99)$ ?' `0 Z, A2 S- i& C
  64.    {
    % }" ]% A, d! b* s% E; n$ `
  65.      if(Left == 1)% J" f8 N8 Z$ d( b" a# ^
  66.      {
    + a. h5 T# G' J: w/ h' W$ v1 J
  67.        Speed -= 5;
    ) d% O6 o/ H. K* a& n8 L$ {8 J
  68.        moto(0,Speed);
    4 U, _* h* m, k0 k& Q
  69.        do
    & `8 N! ]3 V+ H; L2 W  b" {2 M
  70.        {
    " o7 ^  d+ u$ E0 q4 d' _
  71.          Err = getErr();
    $ D9 m; y0 i3 ]4 \$ j7 u
  72.        }while((D1+D6) == 0);: {6 a( _. w! I% \4 O
  73.      }
    " z( c* ^3 I, Q
  74.      else1 S5 C: w/ E2 O: _* O
  75.      {1 U% o8 c5 r& `  [
  76.        Speed -= 5;
    4 o5 ]! d: ]3 T9 Y7 Y, ]
  77.        moto(Speed,0); 6 i4 g0 P$ X* y$ o6 C1 Z
  78.        do7 u0 ~+ \' e2 I$ F9 t+ e0 Y
  79.        {9 P9 o! S3 o! n, E5 J/ R: L0 f
  80.          Err = getErr();* ?  `5 U2 u9 {6 Y
  81.        }while((D1+D6) == 0);" E# _9 x- l2 |1 w8 U
  82.      }
    ! h/ _* O2 _9 ^. e2 f$ a' C' }3 _; h
  83.    }
    # i) g4 C0 E4 z4 V4 n
  84.    else& f" j, D2 X* `; o
  85.    {
    0 b8 a% U/ x- V+ y/ z0 u) U
  86.      if((Speed < 160) & (Err < 2)) Speed+=1;
    ( N2 Y) r" ^# z. K9 k  \& ^% e& k
  87.      if((Speed > 100) & (Err > 2)) Speed-=2;
    . m9 A# w" h! _! k" b' O
  88.      integral = integral + Err;
    , q  E+ c( K) m6 w! b4 G6 M
  89.      derivative = Err - previous_error;
    $ X+ E* a! O8 L
  90.      output = Kp*Err + Ki*integral + Kd*derivative;) g9 \% X& S5 h9 e% [7 Y
  91.      moto(int(Speed-output),int(Speed+output));0 S( U" S, Z+ W' C" X
  92.      previous_error = Err;
    * U% ~7 U" H2 A6 p" a) {- d
  93.    }+ W9 v+ [' }$ l3 c( [6 \2 h. }
  94.   }while(!((lightsensor_2.read()) < (10)));
    . ~$ R: Q2 p% i( c4 ]2 `
  95.   moto(0,0);
    $ ^5 j5 Q$ K. G' d
  96.   delay(500);, W8 R# n: e/ Z8 I
  97.   buzzer.tone(262, 500);
    ( [% f% B6 U7 R6 [8 l4 K1 n$ r
  98. }8 e4 j! F% j1 o0 t  n: V) v) R8 s
  99. " x7 N# _' E8 \
  100. int getErr()
    7 D2 E- I8 D2 R( a
  101. {  4 `1 `8 [) B6 G+ {/ ?; E
  102.    sData = linefollower.getValue();2 T6 O3 O& s: s4 d' U7 P
  103.    D1 = ~(sData>>0)&1;; Y& |' X1 d. c6 f1 I7 Q1 _
  104.    D2 = ~(sData>>1)&1;
    , A$ u. @/ M# H( j) U* a
  105.    D3 = ~(sData>>2)&1;2 X" H5 b( ?0 E3 w
  106.    D4 = ~(sData>>3)&1;0 {* j- r& |! a; N
  107.    D5 = ~(sData>>4)&1;: x9 ^2 e1 o  R) n0 i
  108.    D6 = ~(sData>>5)&1;+ H4 u1 ^' N- K' o) \
  109.    int downD = D1+D2+D3+D4+D5+D6;
    5 j. M7 J3 l% Y
  110.    int upD = D1*(Error3)+D2*(Error2)+D3*(Error1)+D4*(-Error1)+D5*(-Error2)+D6*(-Error3);( a6 F. o5 _& |
  111.    if(downD == 0)+ |; v: W6 t' z3 l+ C( c. }
  112.    {2 `/ j) n2 j3 s* T: ]' Y7 L9 s
  113.      return 99;9 o- v* l( t0 {/ A" I5 B' x/ U
  114.    }
    % M' d' t; _  u+ ?: y
  115.    else
    2 F' n3 q! ]. C& A3 i9 U8 x
  116.    {8 j. w7 V3 q( Z* R
  117.     return upD/downD;
    9 u/ R& R. m2 [8 A7 [- S6 |
  118.    }
    0 x# X9 i- [" ^  d
  119. }
    * R; D( `8 ?4 o  y
  120. 8 Y7 Y. Z; a/ K' K5 w# Q& j
  121. void moto(int Speed_L,int Speed_R)+ }$ O+ y" T1 R% `* w& [
  122. {5 m8 B  H5 A! [! f+ }/ {
  123.   Encoder_2.setMotorPwm(Speed_L);( a  z; \, t7 e; @# r
  124.   Encoder_1.setMotorPwm(-Speed_R);7 ^0 u! U% p3 y8 d  u0 ?) ~2 C
  125. }
複製代碼
! W  X, U4 g. z% x
MeLineFollowerArray.cpp
2 @5 G" X" h' K4 H* V+ s6 v& _" Q
  1. #include "MeLineFollowerArray.h"
    : s: p& c8 V6 Y3 K

  2. 6 o) u  M+ _1 n; ?2 W& n
  3. #ifdef ME_PORT_DEFINED
    ( _8 Q2 U$ k' ?
  4. MeLineFollowerArray::MeLineFollowerArray(void) : MePort(0)
    8 c% s" `& Z3 ^# k$ W8 p
  5. {
    8 G( M# T- O  O
  6. 5 e4 _' y# Q: U' D
  7. }" N/ G+ s0 G- L1 W
  8. MeLineFollowerArray::MeLineFollowerArray(uint8_t port) : MePort(port)
    5 }7 g, V' Y4 @6 v/ n& q) x# a
  9. {7 n3 C+ T2 j+ F$ D  b' l  e
  10.     _DataPin = mePort[port].s2;; U- h- z- G; Y1 r
  11.     pinMode(_DataPin, OUTPUT); - a( P% U4 K  r% C9 r
  12.     digitalWrite(_DataPin, HIGH);+ w2 v$ M+ R& N% p0 C
  13. }
    5 u4 g% x0 B8 k5 V: x5 ?3 {
  14. #else // ME_PORT_DEFINED$ c1 r/ q. m. @; _6 Q& J/ D/ r: g3 J
  15. MeLineFollowerArray::MeLineFollowerArray(uint8_t pin)
    : m' h  R" Z2 x6 ?& D" z
  16. {
    % m0 M0 ]# Z6 i1 j7 o' _8 b
  17.     _DataPin = pin;3 P: V8 Q  Y3 o  i
  18.     pinMode(_DataPin, OUTPUT);
    2 Y0 ]: _' e4 N4 m$ K5 H3 a
  19.     digitalWrite(_DataPin, HIGH);: F6 A/ B  J2 i' g; x6 t
  20. }
    & ^# `- P- v1 C
  21. #endif // ME_PORT_DEFINED
    4 l" T3 A8 _8 V5 p0 S
  22. 0 v3 b5 ~8 \0 J1 Y% R& s+ {5 o
  23. 2 f9 T, k3 X6 b, A+ T# h/ ]2 J
  24. void MeLineFollowerArray::setpin(uint8_t pin)
    1 \3 E+ v; ~( ?; e; L
  25. {4 y/ Z/ |3 Q7 q6 R
  26.     _DataPin = pin;
    8 j/ a# t7 N# S+ O; g1 {* |" |, s, k
  27.     pinMode(_DataPin, OUTPUT); 0 b* m. l1 B* P; a2 r' E( G( }
  28.     digitalWrite(_DataPin, HIGH);
    % v; d* V/ Q  F6 d; r, a8 S* Y

  29. ( O& f# D5 N  {( |- {( e* g+ I1 l
  30.     #ifdef ME_PORT_DEFINED# Z9 R0 o$ V3 @" V8 E0 P3 V
  31.     s2 = pin;" C) l0 _' u" `3 Q
  32.     #endif
    8 ^% S: B8 B+ P3 g
  33. }
    ' H' ~2 \' s. ?

  34. & r  z6 p0 Q$ Z0 f
  35. uint8_t MeLineFollowerArray::getValue()& C7 b; s6 S0 I" o- H
  36. {1 X" v0 E, w8 ?% [4 P+ y5 N
  37.     uint32_t LOW_level_read_time;
    4 q( S( R) M  i/ Z( n
  38.     uint32_t HIGH_level_read_time;
    ( n3 V/ U2 Q) p2 P1 w2 {- o
  39.     uint32_t time_out_flag;
    - E2 W/ I9 q8 l1 ]# e, Z. Q- ?
  40.     uint8_t Sensor_Data[3];6 Q7 M. C2 t5 q8 J5 h6 l
  41.     static uint8_t old_data = 0xff;% S2 F* D3 V9 _* `9 H
  42. , ~( {( v- n0 q# S
  43.     pinMode(_DataPin, OUTPUT);
    6 w% u% \+ f2 Q) v
  44.     digitalWrite(_DataPin, LOW);% s; ^: k& U" J" k; N5 X/ I7 z! F
  45.     delayMicroseconds(980);
    4 ?  n1 F; j% @
  46.     digitalWrite(_DataPin, HIGH);
    " `: i, }4 r* e" G; s! h3 o

  47. 3 g# y' C: N0 u+ R, N' U: c
  48.     pinMode(_DataPin, INPUT_PULLUP);8 j  ~0 p- l: H) Q
  49.     delayMicroseconds(10);' M$ x6 J# h% M; b% U4 g0 m
  50.   E" a& t* v1 u2 o6 v7 `
  51.     time_out_flag = millis();
    * U+ ?' ~9 t4 F
  52.     while(digitalRead(_DataPin) == 1 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );; ^7 P# P" m  w# n$ p
  53. ( R, o0 g. q$ [9 E0 Z
  54.     LOW_level_read_time = micros();8 |1 V9 |# Z% Q; c9 N
  55.     if((millis() - time_out_flag) >= MeLineFollowerArray_Communication_Time_Out)   //time out
    2 H# ]  c% e1 Z5 D4 e& |
  56.     {+ ?. s7 Y- }6 A
  57.         return 0xff;
    6 j' W/ X& O, U" T0 [8 K. \+ ]+ t' C
  58.     }1 T- f& R2 N6 [& s
  59. # d( e1 w/ A$ |% G  |
  60.     while(digitalRead(_DataPin) == 0 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );
    9 T; ^( j& ^) \& p3 p0 x3 J

  61. ! s. z7 Q& P+ `- ?) }. _* I1 ~
  62.     HIGH_level_read_time = micros();
    3 X/ V: y, y1 D: M3 r1 R2 ~( s/ g
  63.     LOW_level_read_time  = micros() - LOW_level_read_time;    //read 100us LOW level
    + l+ n5 V1 @7 W1 U- s4 b
  64. 2 F3 T% ~8 u% c5 K
  65.     if((millis() - time_out_flag) >= MeLineFollowerArray_Communication_Time_Out)   //time out
    # H4 \# e- Q4 g5 A
  66.     {- D5 R5 k, i: U7 }- Y. x
  67.         return 0xff;
    5 _3 q% h4 a6 ~9 P! G$ P
  68.     }
    + V; {5 O) T+ J0 U: c
  69. ! H. j, p8 y) T* {* ^/ b! b6 B$ V; H
  70.     if( (LOW_level_read_time < 90) && (LOW_level_read_time > 110))5 m6 y0 _' w" ^$ X2 e" b2 {
  71.     {2 C3 N8 Q; K4 _* b: z
  72.         return 0xff;
    * I. _" k1 z7 ~  m' l9 `! X
  73.     }
    ! t( ^; l! {0 S, L

  74. : U' g. H+ U& d" e
  75.     while(digitalRead(_DataPin) == 1 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );
    & I* M4 V  X, b8 L
  76.     LOW_level_read_time  = micros();- t9 {/ h/ j4 v8 I$ i0 h- N+ H8 H
  77.     HIGH_level_read_time = micros() - HIGH_level_read_time;    //read 50us HIGH level
    ( c: k* B) q2 [0 L* Y

  78. # A8 ^( }% V0 X' C3 m5 {
  79.     if((millis() - time_out_flag) >= MeLineFollowerArray_Communication_Time_Out)   //time out
    : S( j8 d# B6 C5 m& G
  80.     {
    4 z) J! f, y5 |, @9 a- p3 i0 R5 j
  81.         return 0xff;
    2 z5 e: B5 Q2 S: J% x! Q' F! i
  82.     }
    : t/ |- i# @6 D! ?

  83. 9 @# [  [; m+ D3 ^
  84.     if( (HIGH_level_read_time < 5) && (HIGH_level_read_time > 55))" b' a( q( v- m8 M$ Q
  85.     {
    + e& E% F8 s/ X# f5 ^
  86.         return 0xff;8 V; m5 ~4 F+ @
  87.     }
    6 O; G0 E& `4 p

  88. 3 u/ g2 _+ k/ n! Z% y8 `4 d+ I
  89.     for(uint8_t k=0; k<3; k++)  W, R5 e5 ]9 g$ {7 t/ c# u) j* x
  90.     {3 e4 U; N, e9 \4 \5 R  W' K. J. G
  91.         Sensor_Data[k] = 0x00;* T! s4 _& N- c$ F3 g) d  \

  92. - }6 w" v$ b& r2 o$ W/ u
  93.         for(uint8_t i=0;i<8;i++)* j' F1 z& I/ V9 r3 D. p' G
  94.         {
    3 m% ~, I! d2 d3 i
  95.             while(digitalRead(_DataPin) == 0 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );   //read 50us LOW level
    3 |2 M+ m" I# g
  96.             HIGH_level_read_time = micros();
    0 l0 K& W6 k8 e4 H
  97.             LOW_level_read_time  = micros() - LOW_level_read_time;' t8 b* D4 E7 n' H8 I) I
  98. 2 p1 z/ c" c2 D" P" N
  99.             if( (LOW_level_read_time < 5) && (LOW_level_read_time > 55) )
    % g4 Y" Y2 G* T$ H4 |: x' X
  100.             {
    8 Y  d! z! |( T; |+ I; @2 k
  101.                 return 0xff;
    ' a8 T  k7 b3 ?( f' a+ b
  102.             }4 v. r2 g/ q1 C$ H

  103. ) v3 {  A, i# j- [
  104.             while(digitalRead(_DataPin) == 1 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );4 M, E- N( p0 U) F, P
  105.             LOW_level_read_time  = micros();  Z2 Q, y* w" i2 M& l% K
  106.             HIGH_level_read_time = micros() - HIGH_level_read_time;    //read HIGH level
    4 D. Q6 _, x# j# i" B
  107. 2 }% d3 j4 d5 l0 x/ B4 X3 y
  108.             if(HIGH_level_read_time > 50 && HIGH_level_read_time < 100)   //bit 15 _* s5 D8 {4 L6 u
  109.             {* E7 @; e9 h) ]# S1 R- u' B
  110.                 Sensor_Data[k] |= (0x80 >> i);! W4 d3 @6 s( Y1 }
  111.             }
    ( ^2 ]% j8 n; }. N2 N" R
  112.             else if(HIGH_level_read_time >= 100)8 D" d2 f! r) ]2 S% n3 P. X
  113.             {
    * ?. D9 E& N9 c& F) _; ?9 D( d
  114.                 return 0xff;
    . d+ T6 ^# f  _% s% F! z3 o
  115.             }& N, @, `' J* X- ]; Q" k" ~- y: N
  116. 0 D% v, E& G$ f, I4 n3 _+ a2 k
  117.             if((millis() - time_out_flag) >= MeLineFollowerArray_Communication_Time_Out)
    ; e3 L  v4 x: F# v
  118.             {
    & y4 e8 S0 j2 d+ y4 K) h! P
  119.                 return 0xff;; M. V4 ^9 f2 G% q* A3 V: ^1 V
  120.             }; u6 Y$ G  c' i4 e: K/ `
  121.         }$ P5 R; [- z. j
  122.     }( Z1 {# P* p( ~& f: j- e
  123. 3 Q$ n, R" q6 m2 Y4 z
  124.     while(digitalRead(_DataPin) == 0 && ((millis() - time_out_flag) < MeLineFollowerArray_Communication_Time_Out) );   //read 50us LOW level; V! \8 @6 m* Z3 }
  125.     HIGH_level_read_time = micros();
    $ z1 V; d5 r9 V0 G' f% m
  126.     LOW_level_read_time  = micros() - LOW_level_read_time;* D% s& M; y' k, t
  127. ' l6 Q# S6 y) @% C5 q
  128.     if( (LOW_level_read_time < 5) && (LOW_level_read_time > 55) )
    0 s% @9 V* f9 S7 w, M
  129.     {
    # @3 O. ^. \9 }8 c
  130.         return 0xff;
    1 {. b6 k/ r& V! q* V  b" s+ Z
  131.     }5 a& p8 l; C4 c! q. {8 c
  132.   _4 j, M+ ^& H
  133.     pinMode(_DataPin, OUTPUT);7 o% T3 X( d1 @" x, {
  134.     digitalWrite(_DataPin, HIGH);
    2 A8 O! ^) ]% Z7 \8 Y- w2 u; P

  135. , R8 X( b2 ]+ E. r' O1 ^. W6 ~
  136.     if( (Sensor_Data[2] == (uint8_t)(Sensor_Data[1] - Sensor_Data[0])) && (Sensor_Data[1] == (uint8_t)(~(uint8_t)Sensor_Data[0])))
    ( M6 ^* O' ^# `3 g% u' \" q5 G
  137.     {
    5 a6 O' f2 E. O+ t# @$ s9 q
  138.         old_data = Sensor_Data[0];) l2 |& J0 [) S, f( S$ c1 F
  139.         return Sensor_Data[0];. B8 S- F2 n. ~  k' Q
  140.     }$ J( j/ z% S* ?" F* Q
  141.     else
    ( B" p5 e" v/ _2 a: r$ y, L" X) H
  142.     {
    ; `9 [; B" \+ e8 }
  143.         return old_data;
    2 J% k2 D9 v4 v. {: W2 Z
  144.     }
    6 M7 Z; y+ G9 K7 y/ F
  145. }7 S+ T4 p$ P6 N0 D. ^1 \
複製代碼

3 Y6 Y* K; \3 sMeLineFollowerArray.h   MeLineFollowerArray.h (731 Bytes, 下載次數: 0, 售價: 100 個銅錢)
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

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

GMT+8, 2018-8-20 09:48 , Processed in 0.047543 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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