|
- #include <Arduino.h>
6 a* i7 t$ Z2 @" S7 O - #include <Wire.h>
4 H5 v" Y+ }8 P* x3 J - #include <Servo.h>/ Q/ f+ {" e% f+ ^% l$ T H8 t
- 0 ^. b) `9 Z* E) z* _% z7 c/ k" I0 S
- #include "MePort.h"
2 I7 Z9 X1 N5 Y) r; o: v; O - #include "MeUltrasonic.h"0 O& D+ @3 k7 v
- #include "MeDCMotor.h"
6 K3 G4 W" }2 D& a/ }. O3 M
8 P+ A1 e2 \8 h4 \4 c- //double Input, Output ;2 Y6 @3 u4 p+ ^( ~3 z$ \- Y- f& k: ]
- float MaxSpeed = 255;/ J1 C/ Q0 S9 j8 F, D
- float MaxPower = 180;
; o: v1 t+ j4 f7 }. A' |) X: E' B" M% } - float MinPower = 120;
6 n5 y1 Q* W) P3 a - float Error,ErrorAcc,ErrorDec;. {5 V4 P- M0 K: ^9 l, ]
- + _, V5 T; A, s5 B/ o1 C2 Q
- float Kp=0.14;
& N$ i" m" \( G+ @# R2 T% o - float Kd=0.00020;//23;0 Y/ r- J b- g% i; S9 |" p0 A
- float Ki=0.000201;( N9 m9 N4 R5 M6 P: k
$ g1 f2 j4 x/ E- float nPower;5 q& r) x$ @8 M, k& t% V" N
- MePort lightsensor_6(6);1 c6 K3 D: p# b) i
- MePort lightsensor_8(8);* Z8 E5 w. c' V8 U: P9 \" Q
- MeDCMotor motor_9(9);9 z. o( B* X0 ?& o0 }3 r
- MeDCMotor motor_10(10);2 G! `+ k7 P1 a5 m
- unsigned long previousMillis = 0;* f& p, `* ^2 |- ?. w9 C Q1 q$ u* e
- const long interval = 1;3 m# A* X S. h# W0 e2 R- ?# C
: p# X* w; q- A9 T- void setup(){. |# M7 e1 _9 [1 x$ Y+ j+ o& U
- lightsensor_6.dWrite1(1);" f. W, |, g+ I0 j
- nPower = 160;
/ a {( U) T2 d. ` - Error=0;
3 `6 i) ?# N2 ~4 e- r - ErrorAcc=0;
% c0 s `9 F. U& o g1 t - }
8 T" n% W2 b5 v" L# j5 u - ) r- k0 D5 i7 T6 c( n/ D
- void loop(){0 Y/ c( u" C, v. w
- unsigned long StartTime = millis();
/ ^. G( y; O+ u - if(ErrorAcc < 18000 && ErrorAcc > -18000){
. ?. D @6 G! Z1 Z- r- Q/ c1 n/ H - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();3 d2 I. |# y& B* y5 a5 F
- ErrorAcc += nError*Kd ;* o6 u0 `- m9 b# ?; }$ ~8 J, }: X
- ErrorDec -= nError*Ki ;
- T% R4 h: V: x, W: l& }. X* a - Error = int(nError*Kp+ErrorAcc+ErrorDec);
$ i: ?. T6 q" p0 H! L" @7 U) x. B - if(nError < 80 && nError > -80){/ `0 ?/ k( q' L+ f" d# Q; e* ?; ]
- if(nPower < MaxPower){
" l$ ?( X1 g8 x6 ` - nPower += 3;2 g' X: Y& q5 K* d; r5 |
- }: K% N% T! v- T; Z7 y$ d+ t7 K
- } else{
6 u6 U2 n `4 r# ?/ b' H5 R+ \ - if(nPower > MinPower){
' Q1 Y! j7 k) U/ Z( p2 ^* t8 o - nPower -= 2;
5 o1 ^/ v- ^5 O3 ` n1 c5 h - }" R4 v* v" v0 Y; N
- } 5 O. |+ Z) p5 T! l9 w" ]8 E
- MotoL(nPower-Error);
- I' J0 l2 P9 ^+ n8 i w+ r - MotoR(nPower+Error); / i" ^3 q/ j' Q4 i" \3 d& P
- }else{" M) g) J' w: B$ a; k+ i5 c
- motor_9.run(0);
& o# G+ m, L$ p3 g% Y% i3 G. |0 L: Y - motor_10.run(0);
. x% f+ ~1 C9 m6 ~- J, d d - }5 z2 n* d& }1 W7 d3 }
- do{}while(millis() - StartTime < interval);9 O' ^7 D" k! V* }; ^
- }
1 q1 }' W8 l8 [4 i: S4 t( N* g! _* X! M z - 1 u3 Z# b; r1 S; x; a- ?/ _
- void MotoL(int Power){
* U/ E, d8 M2 g2 p2 X - if (Power > MaxSpeed){5 |- T6 N. l1 q* V
- Power = MaxSpeed;
" `5 q7 O% `+ l3 U E% J( h - } + y6 g N5 b2 w) Y8 O6 j
- if (Power < -MaxSpeed){
2 A: N; j3 {9 s - Power = -MaxSpeed;. ~, s m3 E% U8 w0 x5 m* e
- } $ V7 K, I2 ] A0 A ~, n8 m
- motor_9.run(Power);
, L' J& w% A% L ]+ w0 B - } 6 p) n" |9 e. R) Y7 Q8 B# k
- 0 j& ^; C$ r. T9 s# R" @/ C9 C n
- void MotoR(int Power){
$ [! Y# V$ y3 I; W! t" y( Z - if (Power > MaxSpeed){
, \- [- R7 A+ b7 r; g8 P. z/ H# i5 d! u - Power = MaxSpeed;
7 O8 M: i8 ]/ J5 r3 k" P - }
6 k! s1 r6 X; |& d - if (Power < -MaxSpeed){
" N3 { D1 b6 b1 }7 B' d( e - Power = -MaxSpeed;
" F3 j( D+ [* c6 J( ~( [& G6 S% z B - } 9 L; l. N. S5 ?6 q* u
- motor_10.run(Power);
2 o0 g& x. T3 p: o - }
複製代碼 ) m7 r% D. f6 {' g* Q8 O
6 z3 R# x+ D. k/ I+ e |
|