|
- #include <Arduino.h>, `6 B5 O! M3 Q# c
- #include <Wire.h>
) J7 F, @$ s- H) B) g/ w - #include <Servo.h>
0 c0 u( E: ^( ~0 W! e. q - ( [% R( y3 u% p5 n, Y" o
- #include "MePort.h"
" q5 x8 x5 M! W- S - #include "MeUltrasonic.h"- _" N9 G) Z2 f# z8 l+ M0 S! u3 F
- #include "MeDCMotor.h"
+ t: H8 f! H: @' M* ]
& J2 I1 r6 s% ~) M- e- //double Input, Output ;! Q5 G4 J6 M" x$ C
- float MaxSpeed = 255;3 j0 a3 I% @. p' w: }" s) ~+ s0 M
- float MaxPower = 180;' T$ ~3 w7 M1 V
- float MinPower = 120;8 Q: F$ ?: z0 O, H& M
- float Error,ErrorAcc,ErrorDec;
( O5 m6 ~' n5 }. {9 N1 b/ M% @' F - K9 _. C; [, |' ~# i; D9 V9 f
- float Kp=0.14; _% F5 J4 c H3 o. C3 ?6 K& y
- float Kd=0.00020;//23;
9 p/ ^4 f( ] Z, B+ y0 L - float Ki=0.000201;) A4 X( O0 Y+ w* z
- : ^7 e# U; R% B$ o4 q: E% I
- float nPower;
5 h3 n9 l& O/ {) { - MePort lightsensor_6(6);
) ^, ]' H& ~( f; u; T' V2 f3 s - MePort lightsensor_8(8);/ s+ ~0 ]; S, M' U6 c8 M" Q
- MeDCMotor motor_9(9);
" b4 z7 e/ y$ S- J) G% Q" f - MeDCMotor motor_10(10);
7 X1 g1 e# F: X' S' m - unsigned long previousMillis = 0; E0 p7 G8 m+ B0 S
- const long interval = 1;
( ^2 f4 B; w1 T/ i6 u' J - 8 j* y( F2 j5 n s: e/ @- e1 X
- void setup(){
3 n5 i5 c7 H. l; X: {5 v; w - lightsensor_6.dWrite1(1);
: M x8 J" Z( U, E. V$ J - nPower = 160;
8 N* X U9 G# I3 p' H - Error=0;
3 @4 X4 X( ~$ F; }, f9 ^; n( Y6 R - ErrorAcc=0;
% H3 y4 U6 s4 `4 _ - }
, A' H. l/ ]6 b5 J T2 z5 s0 L - $ L. A% a; W4 v! @! f$ P
- void loop(){ o8 z' X/ z' }; [+ x
- unsigned long StartTime = millis();
( ~ F# q7 c; f - if(ErrorAcc < 18000 && ErrorAcc > -18000){0 }) }$ P9 L5 \- n2 ?% D) h
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();9 X+ ^! B# s( M/ }
- ErrorAcc += nError*Kd ;7 w$ I F( s2 G: t5 H# S
- ErrorDec -= nError*Ki ;6 w" e4 E- C1 I" K% J
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
4 p0 l: v5 A0 I0 [6 }7 n8 o4 a) `+ _ - if(nError < 80 && nError > -80){- M. D' {2 x( C) Q+ a
- if(nPower < MaxPower){
3 x Z9 b% R1 J% ~' X - nPower += 3;! E6 \8 q4 C) e; h+ R W
- }
2 L7 \. K- Z7 V8 ]! k7 c" h: x% _ - } else{9 a4 p/ ?& l1 e9 [5 v
- if(nPower > MinPower){# }, l$ Z$ k% }8 k; `" v
- nPower -= 2;' }" p; E- o- H* Q( d
- }* v; A/ L/ L" S& {4 P' V! H% K
- }
! b% p' t, Z. x% L, L( Y+ X+ m - MotoL(nPower-Error);
% }, @+ Z) J. q) B - MotoR(nPower+Error); 0 y) I7 X* M3 K
- }else{. p+ d3 O# s' W% H! }
- motor_9.run(0);8 N* L! j0 S8 d0 D) Y
- motor_10.run(0);
3 v! r3 @) U' O. H - }
; L [4 v' d$ G( Y6 L% m- O - do{}while(millis() - StartTime < interval);2 z, Z" |2 k. I: ]
- }/ S, f. E( m+ o" E6 ` _6 I8 N
% ~) P1 o( z9 D& ? \- void MotoL(int Power){7 ^9 B& X9 G* @
- if (Power > MaxSpeed){6 C6 i' ^7 w, E% O5 U
- Power = MaxSpeed;. O3 `) w: y9 d9 N* k3 E2 |
- } - m, T/ T' q* _0 r
- if (Power < -MaxSpeed){* i. F& ]5 R. e4 X( K
- Power = -MaxSpeed;* u6 p% _ v* x# B# E2 S
- }
* Z4 s( H+ S" V9 g! }' T6 k: P# k5 u- X - motor_9.run(Power);# \2 J# |' a L/ W- Q b4 H
- }
, I& I T) L1 B9 [( `$ `* z( n. D - ( ? k: v8 _/ p
- void MotoR(int Power){% I b* `1 E6 A ~/ z4 t! i
- if (Power > MaxSpeed){) H- H; I5 K C% p; k
- Power = MaxSpeed;
9 Q v7 Y2 I6 R7 Y7 e' k" B3 r' R) _0 L - }
- l$ m! ]) ^# H) c; Q% r - if (Power < -MaxSpeed){) @% G; @/ z3 e. \ R5 g
- Power = -MaxSpeed;4 @9 b$ W# H0 m( ^6 _
- }
3 r& M; I% m% ]* C% Q, S0 r$ G5 G - motor_10.run(Power);- [# w) q( s9 k
- }
複製代碼
6 f! r, H/ K; R& H; K) K! _# U- d7 Z( A0 S
|
|