|
- #include <Arduino.h>, L8 Y" A) D; a2 L
- #include <Wire.h>
6 |4 k+ J: d6 s1 F2 \ - #include <Servo.h>
0 L; x$ e, K; r5 w! @" P! `( ~
* T1 ~3 c+ ~; x1 x- #include "MePort.h"
' f' P# h2 z9 J. {4 t g - #include "MeUltrasonic.h"9 ?' x0 ~: p4 \/ A) b
- #include "MeDCMotor.h"# a: H: S! M' E8 m+ Z6 |9 @
( A. i+ P* q W# p, k$ j4 C, }- //double Input, Output ;
' n7 y7 j+ v6 t; Y6 C4 T7 i - float MaxSpeed = 255;8 S/ x3 T( X: ^; ^
- float MaxPower = 180;
6 a* g, z% e# a v& N. ^ - float MinPower = 120;2 e+ a6 @9 x' B1 @4 ~4 l3 l
- float Error,ErrorAcc,ErrorDec;: g9 |/ L# Y# W% P6 p
- 9 W1 L7 s* I" a" Y( J
- float Kp=0.14;
/ W N) M7 J y, X! G - float Kd=0.00020;//23;
# W8 D, r' x" B - float Ki=0.000201;& t6 w" n4 e1 }5 @% t; K
e8 l# b2 W9 {0 k9 u- float nPower;: d& m0 G7 I/ S4 t' |" v
- MePort lightsensor_6(6);" D0 C" a# `: K5 T
- MePort lightsensor_8(8);
; R) ^0 ?3 R5 T - MeDCMotor motor_9(9);# I3 v# h$ M' c6 m! _" w' e
- MeDCMotor motor_10(10);+ A- E, k* L% s2 i0 [% J0 ^
- unsigned long previousMillis = 0;9 h3 @( S7 a) T* y0 o/ g
- const long interval = 1;
9 Q; C% T/ v* t! l/ e - 4 U& n6 c& }' V/ u# v0 D
- void setup(){9 b( a' ^7 m& h3 P. \1 x
- lightsensor_6.dWrite1(1);; \+ C I2 h: `
- nPower = 160;
5 [1 R: s6 J& [6 z$ r - Error=0;$ v! u9 A4 k& m: F, x4 v
- ErrorAcc=0;
, K" [% F6 T3 ^, Y- l - }5 Q! i* N' [; H% |! m+ B
' I H8 o( S: ]: h4 _2 ~- void loop(){
/ X( n% n/ o R6 W - unsigned long StartTime = millis();; \' W2 B9 V2 Q9 J: H1 i; g. K
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
& N& v S M: A1 m - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();* d7 [7 p! G0 d. |
- ErrorAcc += nError*Kd ;+ H) m9 n1 K8 \3 ?
- ErrorDec -= nError*Ki ;2 {+ G0 }- V$ G$ Y' ~
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
4 W$ \7 L8 C/ @5 K0 j7 q: }( K - if(nError < 80 && nError > -80){3 v$ r: t" m: P- @3 V( _7 o
- if(nPower < MaxPower){; S( r6 Q# {3 ] P) C% j p5 j/ N
- nPower += 3;1 R" D# i; p9 k9 K/ I# _5 X0 ~" _
- }
, H. [ R5 q* j: B% w- e$ k - } else{
/ b1 X1 \% P' _0 Z+ Z - if(nPower > MinPower){
1 l" W9 G* Q* y - nPower -= 2;
% n9 y6 _; ?9 x* O y3 B - }
3 Y' I' \6 l- T. C; | - }
/ v4 ?( E! a/ j8 c7 w - MotoL(nPower-Error);
$ L/ j, _9 X& u# a( ?8 x( l - MotoR(nPower+Error);
4 I" f3 B- w: r! W g- X# N8 |( a - }else{% g& t5 ?; h" C1 o5 |' m
- motor_9.run(0);0 T9 e9 d0 e/ L& W
- motor_10.run(0);
1 d. U% [2 v: D7 u' O: h, a; n - }
4 w, ^# D7 O3 S7 x" ?7 F - do{}while(millis() - StartTime < interval);* D: K Q) {+ p8 L9 W8 F7 E) \5 E
- }* u/ s* M* [: L9 G9 J' K1 ?; W
- 9 Z# \6 n: |3 [" @: s$ n8 S% z
- void MotoL(int Power){9 Q0 o, I1 P4 d4 b
- if (Power > MaxSpeed){5 |$ h: r3 E' k6 ]
- Power = MaxSpeed;
9 \6 c" n" r9 e+ P0 [8 d0 x9 } - }
# L) j1 o: E c7 g/ B; b, } - if (Power < -MaxSpeed){ v9 r% _; _( w. T; ^
- Power = -MaxSpeed;+ Q- a2 ~6 p3 e' V6 m S) M J
- }
2 Z- i9 C) m% P% r7 H - motor_9.run(Power);& t# M$ p2 E( R. y- u
- } , w- c/ v* Z' d6 U( F6 g: }
' o) `6 b' y4 `# k4 t- void MotoR(int Power){
+ q# L% M. [: W6 p) P5 Y3 Z- L - if (Power > MaxSpeed){! s& X/ y; x, ?' f* B
- Power = MaxSpeed;+ q& g5 z: n3 S! v" N* v7 C( H
- } U: Y% ^4 O$ `0 a3 v
- if (Power < -MaxSpeed){: s. t! f$ p% W, r2 b
- Power = -MaxSpeed;/ }5 ~$ {5 X3 u8 R! c- ]
- } . a; O: T) X% u& p7 d
- motor_10.run(Power);
4 ]2 u9 V; Z! `. B( Q. U8 ?6 x - }
複製代碼 / u3 a% W9 e* Z5 n3 e& A5 c
& v% J7 G r1 w& C8 o. [8 J |
|