|
|
- #include <Arduino.h>, |1 o6 i1 o" U! }' z
- #include <Wire.h>
$ P& _; n" T, A" D1 f! M% K0 ? - #include <Servo.h>
5 j4 e W) O( K# s
, p) U* _7 i. k0 ^2 _7 V; r, M- #include "MePort.h"
% [" g3 ^' s6 T( Z* ^# g, @( c - #include "MeUltrasonic.h"- E z% ~; X8 ~, r" V$ Y6 W
- #include "MeDCMotor.h"
4 D! X/ A7 @( t, c# F- s& t& g - 3 g2 }# [) H8 C( z
- //double Input, Output ;
' R5 B- z- q* s3 p - float MaxSpeed = 255;+ t" R5 t. p, _8 l2 l q' V- v
- float MaxPower = 180;
6 B1 U U% s' L6 A. d6 e8 y) Z - float MinPower = 120;
2 U" V7 k$ p: [- D - float Error,ErrorAcc,ErrorDec; @5 n; T% q( p
" i* i- t% u2 n$ ]. c, y- float Kp=0.14; m. m$ p( z% H& w ~) U' A$ L
- float Kd=0.00020;//23;$ X/ v1 P# G6 R( s$ \
- float Ki=0.000201;" |7 f5 P9 s i2 y
- ( z7 f& D. g4 h* p, a0 f e
- float nPower;
( w8 p" J* z6 p2 N- U. V8 B - MePort lightsensor_6(6);6 u* T& K% [: y' S- h+ P. E0 f; g9 ?
- MePort lightsensor_8(8);
0 D E& q' \0 Q/ U2 o6 S - MeDCMotor motor_9(9);$ n( `5 ~: G( f( P
- MeDCMotor motor_10(10);
" X5 p* B! U: b p - unsigned long previousMillis = 0;
3 K3 k1 k( H% i# P" w; q. t - const long interval = 1;2 O- G7 B# h$ j, ~" {
- 8 y, \: M( ]3 @" t* I& g- R' o. B
- void setup(){% B. e! H z% h" y7 ^# }6 G9 S
- lightsensor_6.dWrite1(1);
/ l/ m; d% q4 \- a - nPower = 160;
6 X( Y" a+ D# ]' P - Error=0;( U" A6 V) \0 C$ J4 b
- ErrorAcc=0;
: H: G% |8 N& V% |! R - }# h+ t2 m8 ~$ k7 i- l
- ( a% c/ Y& h& k" u; v
- void loop(){6 G9 G/ g3 N9 l/ h1 w% W" ?
- unsigned long StartTime = millis();
1 h: M+ Z) F, A' O* D: I - if(ErrorAcc < 18000 && ErrorAcc > -18000){
. B1 {7 b, F4 K" ^9 c, Y0 d - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
8 {& i2 F7 l% E: m1 T - ErrorAcc += nError*Kd ;4 l; C: \/ U& [8 K0 |
- ErrorDec -= nError*Ki ; |- e+ ~6 [- E8 n
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
% \% O8 u) ~: W5 x: A. e - if(nError < 80 && nError > -80){" T+ _9 l2 I9 k
- if(nPower < MaxPower){
/ |/ w: g5 R* p4 d+ F - nPower += 3;% g- ^0 C( U6 R& ?: ?. J
- }
" s. r) @; @" y# v2 Q - } else{& q4 A+ v* ]# z- \9 O& s+ e+ R% n
- if(nPower > MinPower){0 M7 l1 b& i( A5 Y. T( v
- nPower -= 2;6 a4 u( ^! z B: D% b" Z
- }
' R9 D) x6 } X2 [7 ] - } ' I- `* D" P& F8 t2 ?* z% C& F- }1 E
- MotoL(nPower-Error);" R1 U) `' b3 {8 A
- MotoR(nPower+Error);
* ~$ M" k: _$ G% S' i+ D. @% }: \ - }else{5 H4 V. \1 w4 h) B
- motor_9.run(0);
( n! o" ]$ R9 D' v* H# f) b( E - motor_10.run(0);
& J& F3 R9 r* g" ]" T( @ - }
. m# y4 J- Q! s/ ^# |& a7 r! E - do{}while(millis() - StartTime < interval);
3 p4 q# b& Z4 ?/ }4 O$ R; J) M/ M - }9 O+ I) y5 m5 `! s0 `! x
- 2 j4 [% R3 L9 v
- void MotoL(int Power){
( k. ~$ Q, G: K% c% Z - if (Power > MaxSpeed){% B+ a. u$ {; Q! W- |) K6 C
- Power = MaxSpeed;% X7 n1 b# b$ Z# }, C
- }
) Y# P4 W+ o2 C; k$ q4 M - if (Power < -MaxSpeed){( u( d5 Z1 l U, X
- Power = -MaxSpeed;# g0 X: D; X" S
- } , a& I' u. P- N' j6 |( [3 ^
- motor_9.run(Power);. r2 Y& \6 h* H, w; q/ Y
- }
% d" A B M, Q0 |2 Q7 z/ X, o
0 l" i+ h* b3 F9 h) k) O+ N' ]8 ^- void MotoR(int Power){
, X& @+ H+ y4 b1 B/ X4 X - if (Power > MaxSpeed){
3 D; M" G3 P6 p! a# ^ - Power = MaxSpeed;3 u2 W' d+ w0 A$ ~1 P4 A9 W+ n
- }
- R- f$ X3 N& b& w7 e6 B - if (Power < -MaxSpeed){( G( a; k( D- ~; V
- Power = -MaxSpeed;
& c- o/ X5 g5 ~/ c' y( _5 c" c9 T - } ; ?/ j; {$ v4 E, k; g
- motor_10.run(Power);/ j8 e8 b" E# x. R0 Z
- }
複製代碼 5 X& R5 j" \6 Z1 P' q$ T
$ H [- I3 N) E( Q |
|