|
- #include <Arduino.h>; K) d0 x8 @3 l& ]6 g
- #include <Wire.h>9 L2 h) F) M; Y& p K8 k
- #include <Servo.h>) e$ i% R; J* B3 ~% \
- , i! J: u% t" w' a: J
- #include "MePort.h"
4 e8 g$ _( R! C4 |( \' Y' t - #include "MeUltrasonic.h". T& m! ~ K5 s" Z# z5 A
- #include "MeDCMotor.h" {' P6 W# x; h6 y2 {
- ! u# F! o& v6 P M: N& D
- //double Input, Output ;) Q( O8 B; g E! C/ _ n. Y+ N
- float MaxSpeed = 255;3 g, n$ m: S/ l: L5 p f. w0 ]9 l
- float MaxPower = 180;( U* V* P3 Y# U$ f
- float MinPower = 120;
6 z5 u6 r4 G* A1 U+ P - float Error,ErrorAcc,ErrorDec;
1 B& z) E' s5 r( F' l& v' K" h, @
% ?% A' x# @, W; h- P" k6 m- float Kp=0.14;
5 T3 I2 N5 A& R |4 H; X' I - float Kd=0.00020;//23;
) o' C: P, q0 V7 I N. m% M - float Ki=0.000201;- a1 a' G, T1 P+ s0 q# |2 e! A
; U- k9 h2 j z1 \6 B. r2 l' Z- float nPower;
4 I& `4 l& g+ `' p: x0 A# s' [ - MePort lightsensor_6(6);
( f; C5 y' S' ]* y2 P/ B" r7 \: n9 j - MePort lightsensor_8(8);
/ D7 v3 ~+ ^7 H - MeDCMotor motor_9(9);+ N2 y# a. b! O) e/ c* ?
- MeDCMotor motor_10(10);
/ p0 Q; o9 q' \6 h9 h) i1 ?3 N - unsigned long previousMillis = 0;- V, y1 F4 X! S; w' L
- const long interval = 1;
2 H8 L7 e$ v- _/ {* v" t- H
" Z( X4 I |( |+ r) K- void setup(){) K2 G) \. g: s
- lightsensor_6.dWrite1(1);. {2 q1 i( c/ v
- nPower = 160;
& p- p$ F* c4 F& N" D+ ?1 Z - Error=0;
& r6 I$ A4 ]3 \; E& n - ErrorAcc=0;
, g# m/ }: d1 T! |3 k+ c, B4 e5 s$ B - }
+ x/ X. Y7 w8 q% H9 d3 |. y$ r
2 G4 _7 O) L0 r+ `3 H. H- void loop(){
! _4 r1 \. a! X1 j- D ^ k( n- X1 G - unsigned long StartTime = millis();" W2 N7 t, M! r, s* K- Z' H
- if(ErrorAcc < 18000 && ErrorAcc > -18000){/ W2 b* V5 j, C0 N1 W
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
, g* h1 Z+ D4 f2 c- v( C% W2 z - ErrorAcc += nError*Kd ;
: M* a& R$ n. { - ErrorDec -= nError*Ki ;1 y# }4 C& N5 l- Z
- Error = int(nError*Kp+ErrorAcc+ErrorDec);' S$ s6 h8 Q. ~8 D$ u& S1 I. J
- if(nError < 80 && nError > -80){; E" Q" Y9 D. ?
- if(nPower < MaxPower){
& B9 m/ o* B, K p( Z# y - nPower += 3;3 N. _! t1 m6 q) m7 a
- }7 I8 Q* G* P/ x0 N/ O( B- h1 x
- } else{
( ^2 p1 S7 ]2 J1 U* s - if(nPower > MinPower){/ B1 V& Z0 a9 I |3 [9 o
- nPower -= 2;
2 ~* e3 [8 p) j1 D) c0 n) u( } - }0 o6 f3 l7 [7 e" ?
- } @; Z; H* P5 D- `' \+ s
- MotoL(nPower-Error);7 `2 @- w; ?, U
- MotoR(nPower+Error); ( j8 B+ b3 R* B
- }else{
$ Q! q7 W) r5 ?: ~! y: `: D+ e2 r' G - motor_9.run(0);
z1 t+ @1 ^/ ^3 ], s - motor_10.run(0);" k0 v3 p9 Z) ~4 F. B5 _7 k
- }& o8 r# h# Y0 c1 p
- do{}while(millis() - StartTime < interval);- z7 w" {$ W& @& Q x) B' a
- }
' B& f0 a/ Y" u" ?5 \
2 K8 b/ E8 a* i6 F) X) j* c/ ]- void MotoL(int Power){
: H1 x3 j: u9 I) k: `( P - if (Power > MaxSpeed){
4 D4 Z+ m9 `, M" l! l - Power = MaxSpeed;, u2 W" C$ _' `& B
- }
0 u- j, R6 i2 j$ t4 J0 y - if (Power < -MaxSpeed){* o7 [8 t% ~) z! M1 j# b
- Power = -MaxSpeed;
/ i# \- Z; B/ R - } * M2 T# x% L; ]! B
- motor_9.run(Power);: z6 l- `# p" s& g( P( C6 q! \3 P$ @! C
- } 9 E b4 O# b* a
- " y6 _& G, C" h* T- l
- void MotoR(int Power){
8 M$ ]0 }0 \/ X6 D - if (Power > MaxSpeed){- G0 v# f' D' D
- Power = MaxSpeed;; W# D4 i. X9 k Y, T
- } % n+ t7 Z! M; z% |2 V/ V' Q- X2 }
- if (Power < -MaxSpeed){" N; V' [) c" H, j9 P0 s$ R# b
- Power = -MaxSpeed;7 o8 T* G' I, s& d. V) q
- }
5 o' h, D0 r3 b- x! o! H - motor_10.run(Power);
, b! A: u6 i d6 w/ D - }
複製代碼 ! ^9 X/ f6 r0 @
' k+ l2 j/ M) h& M% Q# v- u9 z: Z( L |
|