|
|
- #include <Arduino.h>+ @* S0 y7 A4 J3 [7 s7 R" \
- #include <Wire.h>
% b* T6 b1 ?& C& |; P+ B - #include <Servo.h>
! F- w+ D2 w+ @- a6 m - 2 z5 O% u/ }$ d- a9 ]% P
- #include "MePort.h": \, x) y* \6 e& L1 D
- #include "MeUltrasonic.h" w( D/ g0 F. G& U
- #include "MeDCMotor.h"* n0 ]- T9 }% \% s& s$ F9 k
- / V. L) V$ i `5 Z8 n
- //double Input, Output ;
! C) V2 y2 m& w9 A$ I - float MaxSpeed = 255;5 I+ y' ?7 ?9 L9 H+ v/ I3 w
- float MaxPower = 180;! L* G) I6 F" i
- float MinPower = 120;
0 t P5 W5 y6 W! \3 w - float Error,ErrorAcc,ErrorDec;
/ J- g! q' t$ W: [" v) L9 U) M - & _. K0 j! C8 V N( ] @
- float Kp=0.14;
' |. J8 I* E7 D2 \ - float Kd=0.00020;//23;
c L( L7 b0 H5 V: u+ T - float Ki=0.000201;
, N; A8 l6 W2 Q* b. Y" q" P* @
- a$ O, @; H' n J" o2 K4 p- float nPower;! P( x9 W) Z) M6 ~" X2 h
- MePort lightsensor_6(6); O+ a6 d% f; d4 [! p5 I, N1 E
- MePort lightsensor_8(8);
% O- ]0 f" s0 X' H" I - MeDCMotor motor_9(9);
- O5 Z8 f8 M9 i3 D; |# r - MeDCMotor motor_10(10);
8 y/ U; X' B8 F3 X6 q) F3 J - unsigned long previousMillis = 0;
1 W3 v$ e8 b/ j8 ]/ T, ]$ o - const long interval = 1;% T/ I- x6 p+ s) W+ j5 k
- . }3 {4 f( T/ k
- void setup(){
* y* T' z; i, Y# ]) ] - lightsensor_6.dWrite1(1);8 |$ v% m6 V; U0 Y9 C+ V! t
- nPower = 160;
. \+ ?6 q! G' S; A; {& K' P - Error=0;" O- N6 \' ?! \" a- @% }
- ErrorAcc=0;
, Q/ v5 h% N& S1 G - }
+ H. C+ G9 ]- [( x+ r - , ]( j* o0 J l! r- g
- void loop(){
& R9 _) F- R0 C/ Y - unsigned long StartTime = millis();
- ?" A( {/ D: O4 u" H R - if(ErrorAcc < 18000 && ErrorAcc > -18000){
/ b' p1 f! m/ @. \& G' R& ~3 x - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();. d- ^ j7 h1 t
- ErrorAcc += nError*Kd ;8 B3 d. ?1 v3 n* u# M% T3 M2 W5 |2 K, Y
- ErrorDec -= nError*Ki ;" y8 ^2 S5 w) B# ]( r
- Error = int(nError*Kp+ErrorAcc+ErrorDec);+ p8 H5 b; ]& n! ^
- if(nError < 80 && nError > -80){- Z. ]: h! ]0 P. S
- if(nPower < MaxPower){5 Y; J& k: H5 A) G4 i& O6 X
- nPower += 3;
# D, B$ i7 ~: P$ j - }
5 z x* d4 t! b/ S* |, k. f+ s6 Z; M - } else{
* ^1 E7 A" R; K- T6 x - if(nPower > MinPower){
& B/ ^" M' @9 A - nPower -= 2;
8 x/ A$ | |5 V3 m2 _, X. F. u - }6 ^$ }9 N2 c- ^0 M2 J* {) Z0 G% y
- }
0 i7 L) p1 u2 I6 m6 O( ?/ u5 X* Y - MotoL(nPower-Error);/ ^; X3 X3 i) T( @! d- f5 E
- MotoR(nPower+Error);
3 N8 H5 k/ g5 b9 x& R% W - }else{# E$ ?1 {( r# Y" y6 v
- motor_9.run(0);
9 t* G( {8 P( h2 O - motor_10.run(0);+ S& s# I) b* j) ], G1 d
- }
B* |$ M) d Y* X& o+ j# w V - do{}while(millis() - StartTime < interval);
: a+ ^: v! T- s+ H2 k( M! M - }5 A) q; d. n+ }' v
4 l+ M: V. b9 U/ j4 ^6 T- void MotoL(int Power){
9 K* g5 g' A: A! P - if (Power > MaxSpeed){
9 U3 z Q; W5 ~* m - Power = MaxSpeed;+ ?4 b' i! \, J0 z
- } % _# M/ q6 W8 Q ^) ^
- if (Power < -MaxSpeed){+ p9 ?: C. I) D, @
- Power = -MaxSpeed;' q/ F0 I, d6 s! V% E
- } - L F/ X. M V, I( H
- motor_9.run(Power);
0 x1 v6 E& K8 R0 V, i" G+ {: y, p - } * i) L' F5 L T" f) h
- 7 O+ k: f5 o4 |% X. O
- void MotoR(int Power){
4 Q q B" p9 v; r+ S - if (Power > MaxSpeed){
% }. j1 J7 h$ }" ^# ^/ h - Power = MaxSpeed;
$ l: s* n# L$ f6 ^* v, j2 j; _: r - } 4 f% b+ _) R, E$ J6 u6 H7 j: z
- if (Power < -MaxSpeed){
7 ^; t( M* Z* @# l4 v - Power = -MaxSpeed;
* M, c. `1 u0 B( k - } # M- m) @. J5 C- `# G7 }! e
- motor_10.run(Power);
) l; A8 Z1 x& y6 p* ]8 p - }
複製代碼
7 q% V1 o: m6 u+ ]( U
; ~$ T! A5 A+ h, B: X, @) ~3 q |
|