|
|
- #include <Arduino.h>4 I" g1 L& M8 T8 d! Q; K% E
- #include <Wire.h>) V0 ~5 ?- I. S3 y
- #include <Servo.h>
. l# Q+ t6 ^0 m& g) \
4 U* A- y4 L" ~" M. a, n3 i3 N! a- #include "MePort.h"3 R" q7 n6 s3 f: ^& t* T# O6 ~
- #include "MeUltrasonic.h"
3 w$ R/ s) W& V5 D" U! [7 v - #include "MeDCMotor.h"3 S- O0 x% P7 G6 t h
; {' r2 W% G/ ?- K2 u- //double Input, Output ;, b( v, A7 e) W! V# \
- float MaxSpeed = 255;
5 s/ g* ?9 a- i. ?9 R - float MaxPower = 180;
* M& S1 ~" z# N; F - float MinPower = 120;
( E0 u8 u, k2 Q& e - float Error,ErrorAcc,ErrorDec;" m, X3 k9 V# J7 R
" X5 W) }" I9 _- float Kp=0.14;: U9 A7 n! L) g
- float Kd=0.00020;//23;
) g8 ]0 b# Y0 C2 g" G3 u - float Ki=0.000201;
% k+ f, Z; N: G
0 l+ C& M% u" L5 N" o, {- float nPower;; T, ?, s1 @; N M& C
- MePort lightsensor_6(6);
9 }: {. L) B: a6 `/ t - MePort lightsensor_8(8);
: z2 r' \- X: k0 @6 v7 z' | - MeDCMotor motor_9(9);
" [+ X2 b/ v M+ e - MeDCMotor motor_10(10);# i1 r" [3 c P1 u9 l' E
- unsigned long previousMillis = 0;0 a" u5 P2 f% W5 {( s
- const long interval = 1;
$ X& I5 H& c6 H* V" `% K
( F9 l! m4 N* U! n+ ?- void setup(){
5 J8 _& G# _( N5 V# r5 k8 K - lightsensor_6.dWrite1(1);
4 q" |! I3 ^3 l - nPower = 160;
1 g" E+ Z" A$ T* y) E - Error=0;
! ^0 o6 i9 N3 _ - ErrorAcc=0;; y# o/ B1 E7 b( a( H
- }% G: w; b$ P$ o% Z
! S5 \+ E R( [. U+ V* H' g$ Y- void loop(){
# k' q+ s. }* ~/ u {) @ - unsigned long StartTime = millis();
8 E" ~0 f w) Q* t0 x5 c7 [4 q - if(ErrorAcc < 18000 && ErrorAcc > -18000){ C& l2 e$ A# \2 t
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
, X3 L# e( b$ K; E4 { - ErrorAcc += nError*Kd ;0 O! w$ D3 L% h1 U* V8 H( k
- ErrorDec -= nError*Ki ;. P+ G* y2 M2 a$ ]1 m0 F
- Error = int(nError*Kp+ErrorAcc+ErrorDec);2 V- `& H! m4 `1 S# @
- if(nError < 80 && nError > -80){& N5 Q9 q" H' s2 o4 ~
- if(nPower < MaxPower){
/ w" m H. c/ h9 e+ K) u - nPower += 3;+ \% q3 A5 M. L. S
- }
' [5 N% q m. K2 D9 D6 K - } else{) a5 |/ W ~+ T4 ?, N1 z$ k1 E# ^5 S
- if(nPower > MinPower){& Q2 C) W1 k" ?+ J2 O
- nPower -= 2;6 A% y/ f0 A6 I8 q0 U
- }
# }5 |2 q. d5 b4 Y - }
. l. V' i E, o2 J1 g - MotoL(nPower-Error);0 C0 {) V$ T* K- T7 {6 u0 Y# X3 o
- MotoR(nPower+Error); - { K; q5 n6 b4 H
- }else{
" }: |0 O: y! g! s ]2 `4 x; s - motor_9.run(0);
% i3 X9 z; ^, r$ j2 M - motor_10.run(0);9 u1 Y8 \! H9 @1 ^) N
- }9 g. f! g+ W, u
- do{}while(millis() - StartTime < interval);3 |. W6 _, ?3 n! U* ~2 N, R
- }+ O r& `- N. P# B0 f/ a( J0 X
. ^5 S+ g/ ] q( M3 O8 N- void MotoL(int Power){
" \. @; G" x* F4 j( T) g8 } - if (Power > MaxSpeed){; U" [! Q/ k$ _; Z4 k" K" q7 e! Z
- Power = MaxSpeed;8 K% j% K( U2 o
- }
9 e6 \( J: E8 d- D) e n4 k' A/ Z* R: h - if (Power < -MaxSpeed){
; ^* u: M- W. @# B - Power = -MaxSpeed;
' I a9 f1 ]% K5 v/ U- M$ d - } ! U$ \! z' Z: C* ]
- motor_9.run(Power);
6 U. N" u, E6 b( E3 E - }
- a- u" f! ^! \* |2 K5 K7 @2 ` - & u4 G0 a3 l& E8 u* t+ X. T
- void MotoR(int Power){0 f# Z' A$ _! M- [
- if (Power > MaxSpeed){
! Q4 k) Q9 c2 i" y5 i5 o& ~ - Power = MaxSpeed;1 j- \, k; r8 ^
- }
+ l O. s* w2 `+ N - if (Power < -MaxSpeed){& w7 ^! ]1 n6 W6 B
- Power = -MaxSpeed;
: Z$ V$ D9 x# w, _% ]0 y& A - } 5 W! I0 E* Y" I" g. Z5 w0 S
- motor_10.run(Power);
4 u4 K, E' c1 X/ a - }
複製代碼 1 s M6 C B' [6 v0 |1 R2 F
1 s' Z& @2 ~. [$ X; S( W. \, t1 w
|
|