|
|
- #include <Arduino.h>
- b1 z% u2 K7 f: p$ J - #include <Wire.h>
/ S1 w2 b2 G. m- p) |1 A/ G - #include <Servo.h>8 t9 ^: g6 {! x/ d, o' P
7 H/ x$ E* Q+ ~+ N- #include "MePort.h"" f2 _( i) G; g! n$ [- b! h1 @
- #include "MeUltrasonic.h": {+ n1 r* o( @
- #include "MeDCMotor.h"
$ X9 Q( l, }& O3 { j0 J; W - - [. _. g) t$ e& X0 T
- //double Input, Output ;* R# w% k/ X$ n5 H q
- float MaxSpeed = 255;3 A) P5 u8 I) s
- float MaxPower = 180;6 O; l) K% h" p2 C- N
- float MinPower = 120;+ C/ P4 ?% \1 q# t0 U8 o5 R
- float Error,ErrorAcc,ErrorDec;/ G7 A, x" G* u, H
- + I8 e. _% T( l6 Y* M H9 n) C+ Q9 o
- float Kp=0.14; o( f. u6 V: E2 [. I
- float Kd=0.00020;//23;6 v" e( F! S5 u) x
- float Ki=0.000201;
3 Y- V" _9 z n, w* H7 ?5 h! \3 M - ; z9 A7 r% J3 F. }$ ]
- float nPower;5 N3 ]4 r- D& \
- MePort lightsensor_6(6);
2 }4 |$ e! Z f+ s( \ - MePort lightsensor_8(8);6 |3 y s8 U3 y
- MeDCMotor motor_9(9);* a1 w5 }, b# B x( h
- MeDCMotor motor_10(10);0 O" u# A- H7 M, i! B2 H
- unsigned long previousMillis = 0;
" N- g$ n- g, y - const long interval = 1;7 @0 z' t: p/ Y: y' l6 e
- . c$ A2 [1 |9 x% Z6 i. ~5 L2 ~
- void setup(){) G) d% V" a5 v$ o
- lightsensor_6.dWrite1(1);2 O3 c1 `5 J9 ]& D' }
- nPower = 160;
/ }' ]# p/ K/ a2 _# y6 X - Error=0;
' g' y F; e$ _. g, r+ N - ErrorAcc=0;
1 i) g8 [& Z- u: _ - }
+ c. M& O- e4 @ - 5 w" C& p# x, A9 d2 D
- void loop(){
9 a+ m% q* U+ z; N: @7 p - unsigned long StartTime = millis();/ H" H1 r3 T, H2 f7 a8 @) f
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
* S( Q. ?+ ^. B% b% ] - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();9 T" O* E W6 G7 R1 [
- ErrorAcc += nError*Kd ;
1 l; e6 W6 p! m1 a# H - ErrorDec -= nError*Ki ;
& {* f! \1 l r1 C - Error = int(nError*Kp+ErrorAcc+ErrorDec);
2 @0 ^) E# b4 ]* J+ z' e - if(nError < 80 && nError > -80){+ Z7 @( z x3 X$ O
- if(nPower < MaxPower){5 `& X& R5 ~% d% V, x0 G% r# [
- nPower += 3;
3 v& N v( z/ R: O - }
* e$ [* A! U: U/ p - } else{, U$ E0 B1 f! Z* L2 \ d) B6 [
- if(nPower > MinPower){
& j# J# u, |8 s; w) s' e; c$ W! Z& i - nPower -= 2;- p {2 B* R% d9 |, ]; x* |2 \8 s7 F
- }
. d. W' @( E: Y) F, o - } - S* H, x5 W# P7 S2 N6 s1 c% |
- MotoL(nPower-Error);
7 n J" b2 \ j+ U0 K - MotoR(nPower+Error);
5 U6 E0 ^! ^# |% i7 ]8 O" }5 V - }else{
3 C' t- S$ U6 v* d - motor_9.run(0);: A7 L ^" V" ^9 J) ~. g
- motor_10.run(0);
0 ]2 W! }* I, j5 A9 o - }# m7 W0 o; D5 j3 k7 ?/ N
- do{}while(millis() - StartTime < interval);
3 }3 _4 I. K; L1 T' y$ ]) p - }
$ v& E) L! Z' Y - : ~7 r% C/ [- U
- void MotoL(int Power){
9 y k/ o5 o3 `3 y& t: T' M - if (Power > MaxSpeed){3 d( y. A) i) d! g
- Power = MaxSpeed;& k/ M" w0 j: r; }; i
- } # |& k* n% E: b5 _5 ^7 k4 b
- if (Power < -MaxSpeed){6 k: D% Q1 V8 t- S: _+ R# {9 t( x
- Power = -MaxSpeed;
`; Q0 C) T& V, ? - }
; `& g7 |+ G1 W4 |; R" m - motor_9.run(Power);
! g* h. J% a% ?6 T& n; X - } ( N' @6 s- M4 C* Q$ K- k7 [, x
x ^' o4 f' T* f* r8 s- void MotoR(int Power){7 r8 @- q5 K$ l- O0 {" T5 V, y
- if (Power > MaxSpeed){, G* u! h7 z( f* f6 y
- Power = MaxSpeed;; A6 J0 _$ ^$ |8 H: z
- } 9 M$ a" B' O8 d P" p: a' x
- if (Power < -MaxSpeed){8 }! h' T+ d0 M8 o1 Q: }9 C7 e/ P
- Power = -MaxSpeed;% w9 ~7 H3 q" c. L5 I3 \& F. ?0 {
- }
/ i+ b, D4 v. l/ Q; t - motor_10.run(Power);' t4 J9 m7 v3 N, r
- }
複製代碼 . T$ {5 M5 d- P' K4 D& R
# U/ r+ N3 \. B |
|