|
- #include <Arduino.h>& f% u$ k \5 ?0 \' I
- #include <Wire.h>" g0 R& w, r1 n' I1 c
- #include <Servo.h>
/ b0 [9 i1 r; y: H6 t - ; J9 d+ q2 O; Z# x/ o
- #include "MePort.h"- f- Y9 V! a8 @5 d% ~( H7 M
- #include "MeUltrasonic.h". h9 N4 g* L) t" _ e4 A3 D
- #include "MeDCMotor.h"# W- Z$ N' ^- P7 }2 O
) @, x) o" ]: {, N# ]- L- //double Input, Output ;
9 N. q4 [/ }5 r2 C. ? - float MaxSpeed = 255;
! J+ Y @8 n% T( @ - float MaxPower = 180;
* u8 M Q* Y/ D" W; x2 T/ R - float MinPower = 120;
`. r% [3 T9 |2 m k - float Error,ErrorAcc,ErrorDec;1 X1 S. z& P9 O) \) F
- $ |: E- v( B, W4 K! ?0 ]
- float Kp=0.14;
6 S& o/ p* x e9 E$ Y5 v f3 T - float Kd=0.00020;//23; L8 c( c. s' b7 z% g
- float Ki=0.000201;
" l- \9 E3 w, V0 f' u
7 B6 |; f$ W" U; C# j1 A. v& x# p' e# h+ W- float nPower;
/ ~$ l& T4 D, B8 t8 r. p3 {) `& Z3 \1 t - MePort lightsensor_6(6);! j5 u5 {* X; p3 T, _6 k6 L, q$ Z6 |
- MePort lightsensor_8(8);
& I, A) z0 m: y$ l0 I% ? - MeDCMotor motor_9(9);+ D" u7 T& M# x6 X9 F
- MeDCMotor motor_10(10);* n- W8 Y, i2 g4 X
- unsigned long previousMillis = 0;
; W+ P0 }& S; c+ A2 [3 U - const long interval = 1;) o; l. S' `0 a) X! n+ S
! v4 E+ G! U, F @4 A- void setup(){3 y: f; r4 n7 _: U
- lightsensor_6.dWrite1(1);
1 e; _' E0 ~4 j0 T8 d - nPower = 160;7 ~+ y% I5 z# b3 J
- Error=0;) z/ w; n5 y: [. d1 Z! Z9 t5 v! \( t
- ErrorAcc=0;7 o A/ ^, b0 j; Z; E5 d* y
- }
7 @% ~3 u( p% M+ g
- S& M5 M3 }" U' g0 m0 z- void loop(){
/ S( k3 K, }4 ~" x; B' K - unsigned long StartTime = millis();: A; K5 r1 Y; E- o# ~
- if(ErrorAcc < 18000 && ErrorAcc > -18000){ f9 P1 ^: F5 Z4 J } D6 J( D
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();8 [& N( F0 ` {# Y$ `0 n- B& U [
- ErrorAcc += nError*Kd ;/ U; z9 k$ f/ K# r9 V
- ErrorDec -= nError*Ki ;
+ {7 O3 V8 A9 _6 C6 F - Error = int(nError*Kp+ErrorAcc+ErrorDec);8 i b6 E3 d# Z" x( \
- if(nError < 80 && nError > -80){! T, C/ |( b4 l" q- u: a
- if(nPower < MaxPower){2 l& I0 L- B& e, `
- nPower += 3;
7 c0 h" n7 V: t; d+ l7 M Z - }6 E: I$ i* _# g: E, E
- } else{
* o4 |$ P; {: l9 }% e - if(nPower > MinPower){
2 S- L' k. a" }. s% H - nPower -= 2;! ^; u3 W) t4 ^! i0 ~; @
- }
$ {6 j! `& J2 A5 } - } $ n+ x, N! V7 X
- MotoL(nPower-Error);3 A9 e U5 s1 S5 }6 G, u
- MotoR(nPower+Error);
: \/ Q9 c2 N% W3 z! F' K5 b; i - }else{- Q* H8 ?2 z8 H! O5 [
- motor_9.run(0);1 G0 N5 h# j! _: c
- motor_10.run(0);( D- x- }- I" {3 `
- }
+ ?" Y( t0 o0 Q s+ z: a" G' Z$ ? - do{}while(millis() - StartTime < interval);
. J( o/ w- Q0 V8 u7 f8 e" Y' w b G6 m - }
% H8 E/ G4 D F/ B8 j# @ - 2 b( d( a. R2 t; L4 _
- void MotoL(int Power){) A% P+ |; W) D" C: a' f
- if (Power > MaxSpeed){
+ L: [, `1 T8 F3 } a! s3 c0 ~( G" f - Power = MaxSpeed;
. L1 H( C% J/ X& U3 g! Q- S - }
3 x0 Z5 N+ p8 { - if (Power < -MaxSpeed){
9 y/ N3 \5 o( g$ n9 E# O - Power = -MaxSpeed;6 p% D3 W$ U# x* J1 @7 X* k9 e; l2 K
- } + T' j. ~; G/ N: c, G3 @1 B
- motor_9.run(Power);
- J, Y3 S6 |0 z% R' J5 r - }
; M; r$ n/ h* b6 f - , x5 r" T- j4 f5 H6 `/ v% C9 \
- void MotoR(int Power){
( `5 p o' c* d3 @) A% E1 f - if (Power > MaxSpeed){/ y1 n6 k! K2 o$ m9 G9 ]
- Power = MaxSpeed;
8 g- l/ O4 E/ ?' E2 b0 } - } * u5 l9 A! w# o3 P# b* W, r$ Y
- if (Power < -MaxSpeed){1 g+ P/ n V# l y% e* G1 q% R
- Power = -MaxSpeed;% p9 b- ^3 G8 c( G: s7 e
- } 6 e/ S7 D; N; N4 M3 j" I
- motor_10.run(Power);# [. D; r) B3 K& r& w; m. Q" ]
- }
複製代碼
$ z; E! L3 h- P5 [' T0 t# K/ [, A9 z& M" A- s: z7 O- V' R
|
|