|
|
- #include <Arduino.h>% \* C2 s/ h6 J4 l% F/ M: T9 y
- #include <Wire.h>
+ P0 P! `3 y+ g7 x; V* _' v" ~ - #include <Servo.h>; L5 g+ G" O. {9 G% y+ u
- : L( l) H7 }: v5 w, G
- #include "MePort.h"
+ u- }( Y F' M - #include "MeUltrasonic.h"6 P7 n; V/ R: M' O5 k- `
- #include "MeDCMotor.h"
2 H; r0 p$ Z+ ^3 Q! K9 w
, s6 g6 @8 y; e7 c* x- //double Input, Output ;
: I% Q6 h6 ^% S8 ?! O9 {$ m! T - float MaxSpeed = 255;- h5 O, A4 I1 V2 C( I9 K: K
- float MaxPower = 180;
4 y7 C: Y3 I8 u6 }2 s. h+ |2 R - float MinPower = 120;
[- g4 V: M9 |- g - float Error,ErrorAcc,ErrorDec;
3 F# {8 R/ V: ?4 U
9 r# Y5 x$ n: }4 x- float Kp=0.14;
% E( }/ } a% P( x - float Kd=0.00020;//23;
. Q& O4 q) C2 [9 g. n* k& t) d - float Ki=0.000201;
" ]0 m' m# o* d7 u$ E7 { - 9 H/ K$ J9 j7 P& g& K4 l' t; o
- float nPower;% W6 w2 l1 A4 a w3 Q
- MePort lightsensor_6(6);8 o" t0 g, o$ _" \
- MePort lightsensor_8(8);1 k# i: H r' J
- MeDCMotor motor_9(9);
9 M, h0 a: \9 S - MeDCMotor motor_10(10);4 F) B$ f# J$ i( K, W$ G
- unsigned long previousMillis = 0;
5 I; H" R% D2 O8 G& Q3 ^' v; N3 _ - const long interval = 1;
/ d. Z: K5 H" @# s1 F3 R& g - : x7 v. H V, L8 \' ?& g
- void setup(){
0 w! w1 ^, u2 G8 F/ P& x - lightsensor_6.dWrite1(1);
+ S3 Y6 F2 C* f; i- J - nPower = 160;
) f/ {% O1 p: T Y9 P - Error=0;3 a; V6 r3 J7 Z2 Q3 x% `0 C' g$ e
- ErrorAcc=0;
) o& @/ w5 P# s - }
9 { d+ c1 R! S6 e" M% [9 R - & }* K$ A/ Q/ H5 i* H& Y
- void loop(){
\! v8 t9 i/ x- t# Y; f - unsigned long StartTime = millis();* y# L$ Z6 X) B9 v2 ~
- if(ErrorAcc < 18000 && ErrorAcc > -18000){; T4 n J9 ~ Y t# Y& k! \
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
: [) w1 v) l. z4 V" v \ - ErrorAcc += nError*Kd ;
9 m5 z2 t' z5 B - ErrorDec -= nError*Ki ;; o4 R' Q# t5 q/ a' S( X& K2 a
- Error = int(nError*Kp+ErrorAcc+ErrorDec); J: h) b" ?; c5 |0 u; e3 e2 b
- if(nError < 80 && nError > -80){
% [7 q( z2 R/ O! j - if(nPower < MaxPower){
. L: t3 e6 } Z' o: G" d - nPower += 3;
! i, H. v6 ?6 k/ B+ @ - }
* T8 d4 _" v3 M6 V' j1 ~( T - } else{
9 K3 t0 c$ x7 k' l1 Y; @ - if(nPower > MinPower){9 u! K. Z8 p' N- a1 p; R! G
- nPower -= 2;
8 W" v$ z& A, B8 o- h/ _6 s - }
8 S+ m- M% [: N! `# s1 a7 y* X* |) L - }
( b0 Y8 E4 J9 Y5 l. K! T - MotoL(nPower-Error);
5 u- D0 J3 `) Q! G# R - MotoR(nPower+Error);
X% b# q3 a% }( g6 |: {$ q7 J - }else{3 b3 n, [! H) _+ F4 t- p/ i
- motor_9.run(0);
" u8 q, y4 J- ]+ ? - motor_10.run(0);2 f0 {5 M, I g5 [1 q" Z& G
- }
8 X+ Y; E/ v8 B) g - do{}while(millis() - StartTime < interval);0 I$ ^( O) n6 ~+ x# L) i8 B
- }
" C d" U4 v8 t
1 ]/ S) V( r/ W. O5 K+ k" k- void MotoL(int Power){
W* j l/ O$ n' v/ Z# p' F - if (Power > MaxSpeed){# q$ G6 E" }$ c! _$ ~
- Power = MaxSpeed;
3 Y! Z, u& v) K/ s7 d$ W! S# q* E - }
p% _- l, k) h& V. T. Y0 g - if (Power < -MaxSpeed){
- ?% D- k. Y2 d% ? - Power = -MaxSpeed;- v) }2 n2 B+ b. ~ U, M
- }
6 F* p ~ f* }* B/ N6 z4 c$ ^( E - motor_9.run(Power);: _6 V3 m7 P* t/ E7 [( C; Z$ \8 S1 O
- } 3 K& V, M: B+ h2 [
- 3 Q, Y% U/ `3 F9 G n" [9 x3 R& L
- void MotoR(int Power){
) D1 O3 s& p* z+ H - if (Power > MaxSpeed){ ~6 f3 `$ A% b2 h
- Power = MaxSpeed;
4 q1 G# X$ C& B* T! E9 z5 Z+ U' g# [ y - } , c& X! A, Y5 ~# x* p$ U# k
- if (Power < -MaxSpeed){4 s. x: M: c$ o4 P8 U# } u
- Power = -MaxSpeed;
! \$ w% a1 _ {5 ^- a$ e - } 3 P9 W+ P7 o. }0 X; p7 [
- motor_10.run(Power);
5 ]. V, }; o, e. N5 V7 s9 S - }
複製代碼 / e' l8 C) O& g3 t$ _
$ k5 A; Z# n2 M6 B2 V% k: I, H4 a |
|