|
|
- #include <Arduino.h>$ y9 V5 w7 ]" W
- #include <Wire.h>
' S! J, t: `# I$ y. u1 c4 x - #include <Servo.h>0 n% A& q3 Z5 ?; g* }
/ f3 E6 R- l: O# a- o- #include "MePort.h"; M' u |+ h+ h0 t% s Q9 N
- #include "MeUltrasonic.h"* O, S9 \1 o u$ I
- #include "MeDCMotor.h"' K7 T f& |# I% W; f
4 z$ n Y; `3 ?6 C- //double Input, Output ;
$ j7 x, t( E3 f% e - float MaxSpeed = 255;
6 J3 k6 U$ r; C/ V - float MaxPower = 180;
) b p+ X: f- J; k. c - float MinPower = 120;/ k% f$ D. D5 W. K; @
- float Error,ErrorAcc,ErrorDec;* ~5 O0 A( x0 m U
; ^1 o$ {0 M1 W' q( I- float Kp=0.14;! F, M0 f0 @2 t' \ ~, z8 K
- float Kd=0.00020;//23;
( D& c% z5 b( I' ^ - float Ki=0.000201;# ?; E4 A( p8 ~2 Q8 b* H
- ( G1 v4 n+ |7 O, P; D' @# m! U
- float nPower;/ X0 D- H$ \5 S% q; ?# u2 T
- MePort lightsensor_6(6);
. m N1 X' f: n D2 G- b - MePort lightsensor_8(8);8 t" {5 s4 w" ^3 Y& q9 E& y
- MeDCMotor motor_9(9);0 i: r. h( U# u" u& k$ q" r
- MeDCMotor motor_10(10);8 `3 _- H: j6 Y. c; B; \2 Y$ E
- unsigned long previousMillis = 0;' N, Y$ N6 {1 i+ |
- const long interval = 1;2 a0 e- n; N2 g5 y8 p0 o
6 _9 }$ y1 e& K- void setup(){
/ N9 N4 _0 a9 v# L- q - lightsensor_6.dWrite1(1);
5 t3 S1 X( U, @7 E- j6 B/ r8 e4 R - nPower = 160;5 F C. f' S* W; _
- Error=0;
" B, x& K4 D) S3 P, S0 W - ErrorAcc=0; Y V, J$ J! Q7 ~# t& L
- }9 F; b7 A& \& S% l5 V" r. v H
$ |- ^9 L6 c) |' D% @! |- void loop(){
) f( p# U+ p* _ j" a: E - unsigned long StartTime = millis();# L" A$ v& t- Z4 ]2 l7 \
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
& q9 ]7 x8 w4 [' n: V2 { - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
) y/ k' V/ t3 a' u - ErrorAcc += nError*Kd ;" j1 v [7 {7 e @$ e$ s) l* n
- ErrorDec -= nError*Ki ;) F+ c, r: l- Y. }: S
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
; t, B" m6 R) ^4 @* A - if(nError < 80 && nError > -80){
! [7 R- L1 v/ a9 ^ - if(nPower < MaxPower){
9 U m) R, g0 G0 a1 ^4 Q' { - nPower += 3;6 i/ V$ Q# y$ Q I
- }
* V0 k/ X, V( x( W% i2 k4 \2 |" b - } else{
- A- P1 W$ B* s" A - if(nPower > MinPower){
" C1 A) V2 h# l, [) Z' D- p& n - nPower -= 2;
! J) D) a6 E8 y6 c4 X - }. j) B7 ^9 \* p4 {3 h* o0 b; [+ t
- } 2 W- u! Z# i* E0 g H
- MotoL(nPower-Error);
7 [* U1 n' R; l2 `( v - MotoR(nPower+Error); $ Q+ W. |; c- p! _5 S& _
- }else{7 r0 y& ], ^2 O. u. n% T
- motor_9.run(0);
% c/ |4 n+ ]8 v; e$ ~ - motor_10.run(0);
8 N: Y! y8 H \. I( {, P/ i - }
9 _+ y- F5 M# V3 J - do{}while(millis() - StartTime < interval); b( ^$ o& u/ [( L6 g4 l- F
- }
& c& t" l$ P& }5 k P9 G
& f- e$ y4 Q6 _* E( F- P/ R- void MotoL(int Power){
3 M1 O' E8 _# X! h- g7 p - if (Power > MaxSpeed){
) f* S. o# ?+ ^: Q2 G6 d! V+ f' P - Power = MaxSpeed;
/ z6 ?* N- A4 D9 n( f4 o3 E: t% f - }
) _9 Q! I0 n9 A - if (Power < -MaxSpeed){
& n i8 k; d+ o$ p' o/ y - Power = -MaxSpeed;
3 z$ a8 O9 `1 y - }
5 m" |5 z; g5 }0 E - motor_9.run(Power);
! b1 I4 q$ T# L5 m - }
* P* l" w V* h7 J
% c( X/ |/ g9 i' D/ E$ B6 l; t- void MotoR(int Power){3 A5 X% Q" V1 N* H& }
- if (Power > MaxSpeed){
0 H8 j2 K9 S! R0 j4 T! V0 | - Power = MaxSpeed;0 U. e7 E% H: {
- }
7 r- y4 i/ Q3 O: H( X* w$ q% G - if (Power < -MaxSpeed){+ | [, ^, s. F0 @8 _
- Power = -MaxSpeed;# f6 E- |& s4 D
- } + D1 v$ ]& q9 X9 H( |: F# G+ R0 |
- motor_10.run(Power);
& q# [9 A2 t) X$ ?7 a2 I - }
複製代碼 & l* v8 Y) O ]& ~" W
; F1 B1 Z" ] I* s4 T! G2 H! R# v
|
|