|
- #include <Arduino.h>
- o1 p5 Z3 d, Q& I( H( x) Y, F6 a4 c9 C - #include <Wire.h>7 u) B2 L: [- d0 q+ V- T: R9 K& G
- #include <Servo.h>
& G4 _ ?, q0 ?
& m2 h8 B8 ]* @- D% e- #include "MePort.h"( J; C$ i& l" a) }+ Y: g" m
- #include "MeUltrasonic.h"# r' @* E$ Y" R/ Q& i
- #include "MeDCMotor.h"! u, w7 |# J) n
- $ s: @% c) c6 R- c. A8 [
- //double Input, Output ;8 }1 ^, F m+ ]/ N( G
- float MaxSpeed = 255;8 T+ A" @9 ]% V" C4 a/ {
- float MaxPower = 180;# t3 `5 p( V2 r- T7 O8 E
- float MinPower = 120;
- y) d. Z& ~2 s- ^3 H: B- d - float Error,ErrorAcc,ErrorDec;; A5 s) A/ p. S0 i) C
( c0 ]; j1 h X2 a+ L5 A- float Kp=0.14;
* J! d3 E. k: F+ |4 ? - float Kd=0.00020;//23;2 O5 p8 \6 n! {) x; ]
- float Ki=0.000201;
; ]0 u$ P" ?( F8 t/ T
! N! V; y; T+ w' x, j8 z- float nPower;3 Q; n7 O9 e, q. v: Q
- MePort lightsensor_6(6);
, E* @" i8 O% k; ~6 ^9 S - MePort lightsensor_8(8);
* E" f1 e; I9 D% f9 p& [ - MeDCMotor motor_9(9);
( Q9 E2 j* _$ y/ \# S8 J - MeDCMotor motor_10(10);, L& M9 R/ {& w5 Y+ L' y8 i: V
- unsigned long previousMillis = 0; A, G1 D% v6 M9 @9 G
- const long interval = 1;* }% k6 [7 ~3 a" E
- ' U! g4 T9 s; b5 t9 j
- void setup(){
! l' i5 |6 g: z - lightsensor_6.dWrite1(1);$ ^# W8 T2 K) n6 `2 J0 y: V
- nPower = 160;1 a v3 `! w# l7 K5 D J
- Error=0;* {' U1 f9 F6 f3 r7 j) ~; C$ ]
- ErrorAcc=0;
# h# W. h# z |/ r+ z" z: o - }8 U7 V4 @# ~7 i8 }! Y
; {. t w, u& W2 N- s- void loop(){
. |" v! Y/ w/ U4 X( w - unsigned long StartTime = millis();
& W# K; ?3 m6 [- L/ X2 Q - if(ErrorAcc < 18000 && ErrorAcc > -18000){
) K E# T, B% S1 r$ B* b5 c5 y - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();2 J/ T, o" B; `+ I+ U2 ]7 ]" @
- ErrorAcc += nError*Kd ;8 Y4 O4 w6 d* W
- ErrorDec -= nError*Ki ;
: X4 Z- A V+ F0 S - Error = int(nError*Kp+ErrorAcc+ErrorDec);
! U5 K' X/ H# _7 `0 [# |$ i' c - if(nError < 80 && nError > -80){9 ?+ ^/ o4 }2 r) B `2 G
- if(nPower < MaxPower){/ g; x1 ^7 }' n8 a: B
- nPower += 3;5 c2 F& F9 D" ] f9 l6 s5 Q
- }6 T$ _! u0 \* ^0 V" Z; v
- } else{
( X, |1 @9 A6 N% G, d9 |! b9 d1 R - if(nPower > MinPower){/ h+ n( ?& `: k9 ^
- nPower -= 2; ^& `. T) {3 X: ]" g0 n
- }
/ p9 e( P) b+ w( R7 S& C2 o - } 8 Y" V7 |. q& O" Z* ~3 ]
- MotoL(nPower-Error);
4 H. G, R4 e' ~* ]/ L - MotoR(nPower+Error);
. y0 A/ P# g8 c+ @+ J4 W w - }else{
6 G( b( ^+ X* [: ^6 E( ~ - motor_9.run(0);' c1 V5 h: }+ w0 {. O6 s
- motor_10.run(0);
( a E* C2 v1 Z7 w5 A- `# n - }4 K \( e/ I$ I: ^/ `( Z |3 p K( j
- do{}while(millis() - StartTime < interval);
. `+ S0 m% a0 X C w U U' k5 X - }+ x# i+ ?$ [& W, @% z
- ]& k1 W: V: z+ B) V- void MotoL(int Power){, d+ Q8 a! C8 ~
- if (Power > MaxSpeed){1 C9 }6 y6 L* n" M
- Power = MaxSpeed;
; m! {0 z- v- j. d* L& \, w - } G7 i/ z2 b) X& S
- if (Power < -MaxSpeed){- k* d" ^9 k" y) F2 I( e
- Power = -MaxSpeed;, {& s( e# N+ O* o0 P D) m2 `
- } + V. y9 m/ I- I$ ^4 P
- motor_9.run(Power);
) `! i0 m# `2 b2 {2 ] K1 D/ S0 | - }
( T# p8 I* `: T# x/ [3 s$ m
2 Y5 V* f) ^) S* u( J- j/ O2 G- void MotoR(int Power){8 A! l8 R8 ]+ n
- if (Power > MaxSpeed){$ k2 u! G8 j r8 g3 {- {
- Power = MaxSpeed;
2 t+ V. w3 u z3 _ N - }
+ ]7 R* E7 `1 u$ c - if (Power < -MaxSpeed){
: f' p0 e8 u6 ^; a$ T9 K5 \( x - Power = -MaxSpeed;/ y& w" s3 f! b1 A% P! E
- } / T0 \* q3 I( W) R \
- motor_10.run(Power);
) `% z1 J8 L/ q4 S1 u i - }
複製代碼
9 X) W5 v% a2 ~4 S5 M* h- o" N9 s# Y2 @- `6 T/ Z- g
|
|