|
|
- #include <Arduino.h>/ l- Q: A; b1 s" |( }
- #include <Wire.h> x/ A& @+ `" e6 h1 s
- #include <Servo.h>
! R+ t9 o# i* c( _- K2 ` - ) W0 r& C$ l6 P! B# t( u6 Z
- #include "MePort.h"
( |! w5 O/ Z1 ^- W) r, n& n - #include "MeUltrasonic.h"8 h& c) U; _, x; B: D/ t* \
- #include "MeDCMotor.h"
4 o+ o6 Z% w# l0 t: w - $ L' X& P; Z7 g. {7 c
- //double Input, Output ;
! M! ~2 u; ^" z - float MaxSpeed = 255;2 v' X& o6 S! J& }! Y3 B" d6 V
- float MaxPower = 180;
$ }. x1 Q& v4 x3 x( a, O" g - float MinPower = 120;
8 R# c' ^$ t3 t3 F - float Error,ErrorAcc,ErrorDec;
8 f( t/ A! l, P! X- ?+ v
$ a8 m7 _7 \4 K# a- float Kp=0.14;
! }3 `4 i( f* F3 K/ \ - float Kd=0.00020;//23;
+ z! p$ w/ {0 Z: A; ` C - float Ki=0.000201;6 S& W |: Y7 ^( U8 y
$ ?2 t& j5 w( J+ U5 t! K K/ S" l: Y% a- float nPower;
. I7 M; z4 p' x; v - MePort lightsensor_6(6);
0 b( J/ {. y) l6 R - MePort lightsensor_8(8);
; l% S* M- A, `) e/ d - MeDCMotor motor_9(9);
' X5 }- G. i6 e7 x8 Z' k - MeDCMotor motor_10(10);% ^& S p' Z. o8 `- L* \
- unsigned long previousMillis = 0;
1 ]# c! q: T) L5 G7 v/ Z6 N h - const long interval = 1;
8 a' \$ A+ A" ^8 s/ Z% _
^/ o. l) I$ t4 q; X' i# N) P- void setup(){
% k( F" Y) s: A - lightsensor_6.dWrite1(1);
7 V( `% V: }! a- P2 ^3 Z - nPower = 160;
: g( d: h9 f2 N \) \, c - Error=0;# F% I, ~" q" z4 K9 H
- ErrorAcc=0; U3 t1 m6 |. B. S, \, B
- }' E% t0 x& u/ P* _
- ' O f6 C; ? \4 p& _
- void loop(){
* X3 z# f) M! g6 y - unsigned long StartTime = millis();
- D' e3 S J8 y8 v9 u8 [2 u6 y - if(ErrorAcc < 18000 && ErrorAcc > -18000){
! ]0 r1 o: ~3 `2 u - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
% u) f8 O8 _' b! Q0 h9 Q - ErrorAcc += nError*Kd ;
9 C7 E& B; e* g% | - ErrorDec -= nError*Ki ; N H8 n' _. ^; ?, r
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
D& P+ q3 ] Z2 w# c# ?6 A$ `7 ] - if(nError < 80 && nError > -80){- h4 N4 k+ _5 ~
- if(nPower < MaxPower){+ k- p8 q, E& [6 r% M$ w" B
- nPower += 3;
4 `% E, `# p+ U. T" J - }
, z: \# E" S8 z& k - } else{
: y8 y% |+ [' b' R8 x" O - if(nPower > MinPower){
* h1 p: e$ }7 q1 Q) Z" `8 U - nPower -= 2;
. `& R. R: f; o" j( d - }
* f) [$ `" o1 c! z2 }4 Q - } z" `+ i3 d% y/ B' n7 L9 b* m
- MotoL(nPower-Error);4 G) k, z6 w$ l4 O# X1 @; d* x8 L y
- MotoR(nPower+Error);
5 U( c9 ?+ {1 S+ m/ P0 J - }else{$ Q. i; s* _/ ^; g+ S3 [( p* K9 x( l
- motor_9.run(0);
5 z! ^, I3 j4 h4 _+ \' b& \ - motor_10.run(0);
- m' |$ q2 ]/ N3 a; E - }
9 u' [3 B& R) } ]$ o6 b7 U2 F - do{}while(millis() - StartTime < interval);) X1 C4 }. N& `1 W% _* n% f) }
- }
9 R$ Q: P( R$ f$ \4 c9 e3 l
4 O" w2 j; m9 r+ K s' A- |- void MotoL(int Power){
) V' M5 \ s0 A0 o: n - if (Power > MaxSpeed){
; d, |( t2 s2 m* E! l9 K9 E* [ - Power = MaxSpeed;# \ e O2 c; N
- }
" u, E: V( p- c( E- T5 N - if (Power < -MaxSpeed){; P3 s: K0 Y+ h* \$ W! @2 n8 F
- Power = -MaxSpeed;
( a; m' A! Z) K" T - }
" z% j: J: A! [) h0 | - motor_9.run(Power);
, [2 F% @6 j o+ s - }
# j4 U' P4 L0 J - ) h3 R* ?0 S4 ]+ {' W
- void MotoR(int Power){
5 |0 p4 G0 { L9 a8 T - if (Power > MaxSpeed){8 V9 L2 \: _/ Y# O5 o( G$ V+ E
- Power = MaxSpeed;' d3 T& l9 H' L' e
- } ) B( ]( A% T/ M, c* e; I9 s' X& U
- if (Power < -MaxSpeed){
2 R8 N d% k! J& V1 Z# U; E - Power = -MaxSpeed;
# R2 F' a/ ?' n# u/ j - } , N* p* B% D Z! }5 E- r
- motor_10.run(Power);4 c' p9 o9 D: G6 u0 y& l" |
- }
複製代碼
( J- R2 j( r W7 V
7 u% J$ {$ C$ l |
|