|
|
- #include <Arduino.h>. y5 ^8 N+ Q& p; r* |4 y! U
- #include <Wire.h>; {% O% ^+ F3 r: F; h) [
- #include <Servo.h>
4 Z7 N4 T" g3 R4 ^! }1 x5 r - , b0 r& m3 C) k V3 q" [
- #include "MePort.h"7 b- j1 d, ]( Q3 |& ?
- #include "MeUltrasonic.h"$ b7 z' q& C+ T+ }) O# V
- #include "MeDCMotor.h") L8 x" I, T) f4 Y
- . s- W0 N7 j% [9 c* i
- //double Input, Output ;) G' M5 `1 R. |' q- Z3 l8 w/ i
- float MaxSpeed = 255;
|: t8 H! ^2 Z/ J8 \$ e9 Y - float MaxPower = 180;+ `4 p2 N: W0 a8 O$ `& N# J
- float MinPower = 120;7 A* r7 J7 P4 K, i+ `' _) V
- float Error,ErrorAcc,ErrorDec;
! b0 R R8 W8 O
: p7 m# \' [) r- G( D2 ^- float Kp=0.14;
$ J6 E$ n/ |& o/ Z/ S2 A - float Kd=0.00020;//23;- u4 F6 L9 d: R0 V8 _5 t7 b0 g4 [- Q( S
- float Ki=0.000201;
5 Z" I1 X6 I9 F; V - + s& Y' `# H' c- _+ ?" V
- float nPower;4 O6 l+ S+ X9 P
- MePort lightsensor_6(6);
0 w2 ~, n' [1 k/ n) O - MePort lightsensor_8(8);( u, O4 J9 S; l& ~& b" L
- MeDCMotor motor_9(9);2 D6 w+ f5 \, m3 J C# `2 V
- MeDCMotor motor_10(10);3 M( W, [* w, n) s0 B
- unsigned long previousMillis = 0;
" g: \0 h( g4 b7 v, ?3 E - const long interval = 1;
5 l: f5 F5 a$ @( T: y9 P9 c: Q
# ~1 i, {! d1 |+ O- i- void setup(){
/ z, G% V$ @5 U( f8 O3 X - lightsensor_6.dWrite1(1);
& R+ x4 n8 ~$ N- Q6 H- d, ]( V - nPower = 160;
* [1 G0 I3 F# ^ - Error=0;* s% o2 |+ f- T3 y; X0 D
- ErrorAcc=0;
, E0 |; i6 h# C/ l& [5 E* S - }+ h4 ]! L6 i; ~. k% [
- w, {) G2 w" R2 W+ N- void loop(){ M+ w8 M. Y0 N- F4 L' W- ]
- unsigned long StartTime = millis();
# G" m+ K7 ^% N. v {3 y; u0 S - if(ErrorAcc < 18000 && ErrorAcc > -18000){8 ~" P( E7 s8 E" \1 G; w
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
8 ]5 r( E1 f6 g& ]/ A$ J - ErrorAcc += nError*Kd ;
& P! Z# U( X* X g - ErrorDec -= nError*Ki ;
/ i. Z' y$ f0 l8 @ s2 Y/ C - Error = int(nError*Kp+ErrorAcc+ErrorDec);& V, s+ t! O, J' P9 S
- if(nError < 80 && nError > -80){
- h* x1 h- r2 M+ p% W) ^ - if(nPower < MaxPower){
+ w" G2 e" R7 O- g5 f - nPower += 3;' j& f. Q) ^! s3 N
- }/ @8 T) X0 }% g% z: B5 I2 _* K
- } else{
; J( W3 K# K+ h- ~ - if(nPower > MinPower){
6 U6 G, r: K+ p, P! D9 V - nPower -= 2;$ E4 a4 [ I4 V9 X) r* M' L1 ?
- }
. o1 l3 c5 Y, q: R8 |- [ - }
, v o+ U, w9 h1 e - MotoL(nPower-Error);" `- D' A/ `$ s8 Z3 o
- MotoR(nPower+Error);
% E) a( V0 x g1 L/ T4 j - }else{
5 `6 N- {; |' s: e+ e" [2 t - motor_9.run(0);
/ w, @# }9 h' w0 I% R - motor_10.run(0);
$ i3 E3 G( t: K' I2 S" O' f# v& k& e - }
Z8 ?8 P9 X2 R% b+ c; I - do{}while(millis() - StartTime < interval);
4 B% x( E" Z- A - }
/ Y& e0 {0 D. Z) O3 L; b - ' c* ]# j7 T( J; C2 D2 E9 P% ?
- void MotoL(int Power){
( y4 [, W; f- x( O - if (Power > MaxSpeed){
+ z; E3 A8 H1 p) Q - Power = MaxSpeed;
g0 N- t: { E5 Z, l; t1 a% m - } ( ]- U" Y: L9 M: j- S+ r
- if (Power < -MaxSpeed){
. A' d, c; z/ u R - Power = -MaxSpeed;9 {0 {: z# F: i1 G& U; r' i. V
- } 2 h! S% ?* N1 Z) M' X, Z
- motor_9.run(Power);
8 m8 t6 j e, [" ?8 q" F' S4 t. D - } ' |. s* c- j4 u: N6 J/ T- ? V, P
- + z/ o+ K9 j. p- C9 ~! I/ O
- void MotoR(int Power){
0 R/ N) U, h# L# ?' ]: `1 s ` - if (Power > MaxSpeed){/ t9 q! K- a' f2 r( f
- Power = MaxSpeed;$ Q$ w: _9 c& w( s
- } 7 i5 C1 ~* i% t* Y; l- \
- if (Power < -MaxSpeed){; o- p$ k5 V" D5 [: C" B5 R
- Power = -MaxSpeed;
6 u& H) t1 C& y7 U - }
" r( f' V0 p1 P - motor_10.run(Power);
( A1 T9 Q/ G l" u9 l% v( h - }
複製代碼 7 d: P. Q: A( a) s
6 u g/ u) u& t. n" w6 W5 A |
|