|
|
- #include <Arduino.h>
6 l+ g" O. H/ K* i3 | - #include <Wire.h>
* ~. a2 K8 ~; |/ L% w - #include <Servo.h>/ |& f, C$ W- \1 S" ~. K: P" \7 x
?$ z$ K0 `( V7 ^% u. @8 A- #include "MePort.h"9 T3 z; R- U. t1 x
- #include "MeUltrasonic.h"% {. H ^; G2 C" l" z, x2 b% ]
- #include "MeDCMotor.h"! R! v! \6 e s% [
- 0 w4 N3 d: q C3 v O
- //double Input, Output ;2 E2 P) p, [0 }5 l5 L) T
- float MaxSpeed = 255;7 T* w# h0 ^8 e! w! ]
- float MaxPower = 180;
/ J. i# Q1 |: l* G8 Y - float MinPower = 120;6 d! C/ r4 `0 N! s( l l
- float Error,ErrorAcc,ErrorDec;; P4 p; l8 q0 ] |' z$ ]
- 8 N0 L, g3 j: T2 L$ a
- float Kp=0.14;
* W0 H* @) X6 N* H - float Kd=0.00020;//23;" n7 F! s1 B5 }; x4 m: U5 C
- float Ki=0.000201;- K1 U+ _; R+ g: m, g+ l) ^# q
- 3 `" J- G8 z- \3 x& u- e& t. I
- float nPower;
( ]$ g! I3 H' K8 L; a - MePort lightsensor_6(6);
; q4 o, ?1 j _/ j8 Q- l8 e - MePort lightsensor_8(8);" m- u7 z/ l! A# c3 N
- MeDCMotor motor_9(9);
: N0 c; |( J- J8 U# D- R* z - MeDCMotor motor_10(10);
- A; O4 ^& V3 l7 f- m7 J6 r - unsigned long previousMillis = 0;
7 c+ C6 k* q7 b8 k% y3 X - const long interval = 1;
' p- Q( Z; R- U
4 u. m6 d C, n: t, |- void setup(){3 S7 y2 T$ O, @ f1 M. f# _ E
- lightsensor_6.dWrite1(1);
0 K0 O5 H$ e7 Y - nPower = 160;" _1 u. k7 \+ N4 Z# ~
- Error=0;
" }3 |, o8 k& o8 P5 m- |1 ?) P - ErrorAcc=0;
3 \$ ?4 k/ U: ~, h' @ - }
9 u& g, D) y' G% t - 3 h* E7 }" M6 T
- void loop(){2 o- l+ N+ E7 m. `+ Q( K* v& ~
- unsigned long StartTime = millis();0 S% l2 j' O! a* w' o3 y9 T q
- if(ErrorAcc < 18000 && ErrorAcc > -18000){6 V& f1 S0 p' ^
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();* f! W8 M5 z0 {6 |/ i
- ErrorAcc += nError*Kd ;* k: m* E+ ?/ k9 D% U) N. N* Y
- ErrorDec -= nError*Ki ;
: W& ~- K& U# S' W - Error = int(nError*Kp+ErrorAcc+ErrorDec);
9 @* E7 m, ~! q9 k8 `$ ~ - if(nError < 80 && nError > -80){7 ^0 _+ R5 w! O% I1 A$ k$ j6 x
- if(nPower < MaxPower){
0 f3 a& L6 { A1 m - nPower += 3; Q& P3 R) D( Q, b2 @: s
- }
" K4 `8 K0 o! Q1 d4 f - } else{
8 \8 C ?: A% H4 J4 j0 o$ x - if(nPower > MinPower){) @7 ~+ s% A, m1 a/ {
- nPower -= 2;: w# ^! N' ]9 @! t! }3 q
- }! G* \. e$ l% X! d9 \, e# c
- } C: z; _( O5 k- h' [# R$ D
- MotoL(nPower-Error);
) C& i, H$ V/ x* ^/ u8 }" J - MotoR(nPower+Error);
. u2 }0 @; f: J, X1 _) m+ D - }else{
% ], `. v# a( u7 K, r' q; c - motor_9.run(0);+ y0 l6 u( Q& R0 _6 L+ z1 J6 ~7 j" i
- motor_10.run(0);
0 {4 Q5 W2 h3 r- G: w. W4 O2 p* |$ E - }
: p8 r+ e6 F0 Y0 I1 v3 P - do{}while(millis() - StartTime < interval);
! W' f0 @ o0 s - }
0 A$ Y: D% m, {6 k9 h1 y - 7 }3 t/ @+ Q8 x' |
- void MotoL(int Power){
3 G- x2 n& ?) y1 Z( a; Q - if (Power > MaxSpeed){
) C; J' A8 M, ?; C3 T9 Q - Power = MaxSpeed;- K/ y/ d' Q0 F
- }
& |7 V4 a9 Y8 Z- b - if (Power < -MaxSpeed){- j; O- x2 y. S2 n, A0 E! q7 |7 {8 o
- Power = -MaxSpeed;
) F% j/ ?2 e6 e, I - }
+ o& N' N9 j8 ]* t4 ^0 B - motor_9.run(Power);
/ x% j4 }+ L% h' `/ g6 L- H - } ' R' o5 G# B: }* l/ A
- * t: z; b) R- V' A3 h
- void MotoR(int Power){
3 J" Z/ D# E7 \6 l6 b3 y* |" R - if (Power > MaxSpeed){: x; o& g; G; t( _# t, t
- Power = MaxSpeed;# \5 }: K! ~* ?( V; \
- }
+ a1 C7 P" j. e' ^# ~ - if (Power < -MaxSpeed){6 N5 ?; e' l+ m6 ?# L" u
- Power = -MaxSpeed;! {6 `- u& p9 N0 i7 {- g( u' t: g! N
- } + t! s4 K, F* W0 l; u
- motor_10.run(Power);4 ~" b; M0 p: M* k$ Y% `
- }
複製代碼
: O4 v& v8 U! b) B& T- D8 u! n r# c4 A) q* \& ~# C
|
|