|
|
- #include <Arduino.h>; h! F" _! @( Y* F
- #include <Wire.h>
7 h+ A' r; H5 Y7 j6 L( v9 }6 P - #include <Servo.h>5 m/ I. c! u. |! S6 u" |
- y: L2 u$ v4 O* G4 o& k4 q- #include "MePort.h"
! e, ^' _" d: q9 H - #include "MeUltrasonic.h"( ]5 Y( a0 o4 l- v( [! d. N
- #include "MeDCMotor.h"
( H0 L7 j" A q2 A2 D6 q# ]7 l - ( l9 P( X% U+ P8 {
- //double Input, Output ;
: \& N6 ?. ~" K: \; z* k% j3 k, s- a - float MaxSpeed = 255;
, R' \+ Y' _2 a - float MaxPower = 180;
$ A7 ~& @+ N- N: O - float MinPower = 120;) Z+ m6 B: [/ m
- float Error,ErrorAcc,ErrorDec;7 s5 j" I/ v1 S. U
1 h; f- L* R4 a X0 R5 @6 m: N6 s+ O- float Kp=0.14;6 C, A0 |. l7 p* n
- float Kd=0.00020;//23;7 N% Y, k6 V A. r- _
- float Ki=0.000201;
9 i/ f, Z6 @/ R: o7 ~
0 \2 _7 i; M7 q) D4 c" X- float nPower;8 e9 s0 o @, m1 h! U6 j
- MePort lightsensor_6(6);
9 f" h+ y4 [4 y1 F - MePort lightsensor_8(8);
. I6 I6 A) l. Z2 V - MeDCMotor motor_9(9);- f3 u3 H/ n/ M7 }
- MeDCMotor motor_10(10);9 A U/ a ]5 ]; r
- unsigned long previousMillis = 0;
. w9 E# T1 W' h' Z0 d( U- f! v# u: I - const long interval = 1;" ~/ d, F) F& b4 e* K7 J
- 5 H% B8 B4 C4 @9 @
- void setup(){9 s$ |- F9 e7 I
- lightsensor_6.dWrite1(1);
2 c4 p$ B& t1 Q. B - nPower = 160;& Z) n+ M p, Q8 U& y8 j. E, v3 G
- Error=0;
0 F" q1 `2 Y' G+ B$ l' D - ErrorAcc=0;
7 G/ X9 g4 ^6 `! ~ - }* L0 y) ?' Q! N: E; X
- ; s2 H1 Q% U$ L% P4 ~- f; d# w0 r
- void loop(){1 F" }7 D& [* {
- unsigned long StartTime = millis();' q6 ?& _3 ]3 Z
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
7 e* W V7 ?. G {9 a5 P' n - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();9 s# s+ n3 W5 ?: e- V
- ErrorAcc += nError*Kd ;
a9 n R5 k0 H( L, S. L - ErrorDec -= nError*Ki ;) f" p9 R, ]% ~' W9 G+ J- W
- Error = int(nError*Kp+ErrorAcc+ErrorDec);9 a8 c& s; ^; E& D: G/ g) E) ]
- if(nError < 80 && nError > -80){
: Q7 `8 t5 {4 @7 }5 Q - if(nPower < MaxPower){( F1 z/ `( y7 Q5 ^' k
- nPower += 3;
& Z! T! B. p1 k - }
- G+ k2 ]4 |, z7 j J4 H$ X - } else{# \8 q/ T B, u
- if(nPower > MinPower){: {+ {$ O4 r! M# W$ C3 p
- nPower -= 2;/ c) W) W# _! ?. l" {
- }
. n2 j/ ^, B9 l) ? - } ; ~/ f) Z0 U n& p# o. Z1 Y% P
- MotoL(nPower-Error);7 Z5 `' s D$ }7 J. R7 n
- MotoR(nPower+Error); % Y( R6 y- T5 R) z
- }else{
2 H2 Y {/ q% u. ~ - motor_9.run(0);
) d2 u- h. }2 C/ G9 ` - motor_10.run(0);
- A8 d! O* N$ A$ [* _2 Y( { - }5 h4 r; W0 f, i
- do{}while(millis() - StartTime < interval);( n* s- h8 a+ V# {% \
- }
r, i& I- ]: k( A& d, H' i* O4 ] - - P1 r4 K5 t7 b$ M- B
- void MotoL(int Power){: }& w3 D7 ?! A7 o! t5 l, s
- if (Power > MaxSpeed){
- q$ ?* }( h( C! D" \6 s$ K5 T - Power = MaxSpeed;
# Z! O |( b. J6 n( N- f - }
1 N7 N7 p9 P7 X' v; T9 J - if (Power < -MaxSpeed){+ `# U" _& Z8 N' {9 [
- Power = -MaxSpeed;
: k$ ]$ j: c& [/ K c - }
H4 t5 ~+ D) i - motor_9.run(Power);3 n1 e9 h3 x4 i( v( `$ I
- }
0 u& L; c# x p; Q" U7 w - 4 h- V; R6 L# t' E; c2 q+ Z
- void MotoR(int Power){! W* W, \) q" c2 @ ?# P
- if (Power > MaxSpeed){
0 v Z% w! ^ G2 ^4 \- F8 K* W' V - Power = MaxSpeed;; A+ y5 ~( @7 u8 s3 n
- }
4 u9 I5 N/ m; S& G; l7 N/ J! u - if (Power < -MaxSpeed){! N O/ K/ a! }& {
- Power = -MaxSpeed;/ k, B0 S" e* O! e7 a3 d9 e
- } 4 y: x% }0 m4 s" p! B/ a4 s& f
- motor_10.run(Power);
9 n. n2 \0 m8 ]" W - }
複製代碼
) U( j7 u4 K$ ^3 L. ^, @- c. w% w. K! ^2 ~; e! y8 ]( m. R) i$ M8 \
|
|