|
|
- #include <Arduino.h>
A0 p7 J) W2 a5 D' ^ [ - #include <Wire.h>
5 m2 G( C4 c: W: y- s - #include <Servo.h>
. f4 X9 D0 U/ G5 s6 X* ~
" Z* u1 a! D- v- #include "MePort.h"7 L' x ^+ w6 x0 ]. K; o
- #include "MeUltrasonic.h"
: G( V; I: w) G; O8 } p5 F& D! J - #include "MeDCMotor.h"
# w& F5 C( b! v$ R& X
4 v6 k7 z& ?6 J7 J2 x: {- //double Input, Output ; @5 q& {5 a) D9 _- F7 L7 O
- float MaxSpeed = 255;
0 v! F; F( g- w4 Z O- O - float MaxPower = 180;1 i# k* I$ c- h! X& G
- float MinPower = 120;& `/ V1 ^# J2 b
- float Error,ErrorAcc,ErrorDec;
8 q! M8 |5 K7 }6 n
' w) k X+ H# O# J7 b/ Q: K- float Kp=0.14;
& A0 p/ T! B- L$ X0 f# Z1 D - float Kd=0.00020;//23;3 V0 t$ ]. }9 ?* l n
- float Ki=0.000201;
8 ]' P* |2 L5 E& X# q* x7 n5 m$ u - ; X" `% F$ ]7 q. R4 A1 I
- float nPower;) D& l$ s& u* M) g1 ^
- MePort lightsensor_6(6);4 y+ Q5 x ^# U4 m+ l
- MePort lightsensor_8(8);
) B. h7 P2 k- U5 P! p) U. ~ - MeDCMotor motor_9(9);
( o. b" P( J7 v1 [; k - MeDCMotor motor_10(10);& `( _* A8 J# d: t o/ \
- unsigned long previousMillis = 0;
7 E4 U9 \( T" V ?& _ - const long interval = 1;
5 I1 `) G, S% { - s) [+ M; I: Z3 u( }" g
- void setup(){6 L/ D, z: [0 J3 M! X$ n
- lightsensor_6.dWrite1(1);
. G# t* Q$ @$ g2 |5 w2 O4 ^ - nPower = 160;/ w; Y, o+ o" L* l
- Error=0;
; Z) P+ y& l% L1 z1 F* g, S - ErrorAcc=0;" O$ V8 C1 `6 J' E5 }. U0 ]( v
- }. R! ^ k2 n1 K; K, E D; ?. l8 y
2 c% D/ F, B9 C' z- void loop(){/ d5 @* A2 x0 O9 A5 Y) |4 C! S
- unsigned long StartTime = millis();5 K8 y4 }/ y* v6 T
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
& |. N0 Y7 J" ?+ B - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();3 A, }0 X% I5 a- Q+ c$ s
- ErrorAcc += nError*Kd ;$ K6 K2 ^; E8 K* d% `9 \6 t6 i
- ErrorDec -= nError*Ki ;
p' X6 I% }9 g- }" M& f. }' w6 O/ G* o" P - Error = int(nError*Kp+ErrorAcc+ErrorDec);
0 x. l' z5 @9 J; G$ T6 [& M2 Y - if(nError < 80 && nError > -80){
! b# Q! x$ F6 k1 Z# P - if(nPower < MaxPower){
& `0 a9 f7 a, {3 U3 ^" l# t - nPower += 3;
) N9 c* o' S. _7 u! w4 d2 _ - }+ G; M# m; j- f& [( B
- } else{
, e! N1 U( @; z) h - if(nPower > MinPower){
/ M7 |/ L& N( b' O - nPower -= 2;
# V$ ~* Z1 `( h# P - }- Z1 s- `: R8 @/ [6 H
- }
6 o* R8 p8 N) X9 c6 `4 T7 g - MotoL(nPower-Error);
, ~3 i" d) R7 L' h( V/ N - MotoR(nPower+Error);
% Q- n3 G4 w, X' ~ - }else{
+ M8 K6 Y: M# u! u+ { - motor_9.run(0);
: l2 U' |6 W. h - motor_10.run(0);- S0 {3 S0 v r6 f S
- }
( N9 s3 ~. _" {0 N+ D$ M( K - do{}while(millis() - StartTime < interval);
% g- u1 Z% K7 \5 R& R9 i( {- b+ d& M; h - }
1 I; U* v2 S- i" b; I4 i
3 ?( ^$ V b, j5 r: N- void MotoL(int Power){
+ n$ s' q, m' n: D$ \2 O+ z - if (Power > MaxSpeed){8 h* y' e8 Y& n& N1 g
- Power = MaxSpeed;+ h. c6 M/ I+ h+ ?6 N* U
- } - e$ Y/ |% o$ x# U+ }! d! }
- if (Power < -MaxSpeed){( F" |2 M/ V$ v
- Power = -MaxSpeed;; Z& N$ ?$ _& z
- }
+ o+ R z d/ T0 v) d8 ? - motor_9.run(Power);) B& N8 V5 v! t/ ]& g5 ~
- } ' J |, Y: s2 ^1 k) S9 e0 Y
- ( z8 x" W: U: V9 P+ v, N; m
- void MotoR(int Power){# }, H/ N5 a% F, M
- if (Power > MaxSpeed){
1 p/ \- F% o1 T" Z5 `$ u+ }4 p - Power = MaxSpeed;
- I: t% i$ z" F& [ - } 4 h9 s& V( e( D) K) {6 M+ i8 _; {
- if (Power < -MaxSpeed){2 d: ?, n& w C
- Power = -MaxSpeed;
" T7 j3 ^2 C: K% b - } . O ~+ S( `/ J$ G
- motor_10.run(Power);
9 ?5 Y) U! u+ W; p& U$ u - }
複製代碼 2 ?+ Z, r1 @1 G6 }! I, H9 `0 C
5 H, f5 G" m; m( B |
|