|
|
- #include <Arduino.h>
% t/ U: Y# {9 X6 [ - #include <Wire.h>! y4 L0 K1 |& e: r; L
- #include <Servo.h>- h8 y4 R: A" c# P
- ! I$ b! ]" E9 W1 H$ ^
- #include "MePort.h"
: Z1 O# [% x2 V3 l3 w - #include "MeUltrasonic.h"2 `2 n; a/ T* j Z6 \
- #include "MeDCMotor.h"
, l5 J, u2 ?/ d- K' T# H
" T4 ?% M' c5 H7 \9 L' [- //double Input, Output ;5 w* g, x! L0 g+ E
- float MaxSpeed = 255;
. H' h2 y" J2 G+ _ - float MaxPower = 180;/ S0 t1 b' q, O' \
- float MinPower = 120;
: C7 `- W( q% } - float Error,ErrorAcc,ErrorDec;
- R1 {$ F4 t. P5 n' I( Y - 4 c5 u, j5 u- w$ N" Q
- float Kp=0.14;
+ V+ t2 S# m# _: v) G - float Kd=0.00020;//23;8 v1 K$ q5 r- {7 Z1 V+ ]/ j; y4 M
- float Ki=0.000201;: [+ J7 f0 Y2 d0 p
- 5 w% @# y* z9 F, h
- float nPower;
; m, G2 q; M6 a' I+ ~+ i' G - MePort lightsensor_6(6);6 \: j6 z6 m9 B. y3 k2 _
- MePort lightsensor_8(8);: a; l& P: V) V9 I3 I
- MeDCMotor motor_9(9);% F( b) O* z* p9 v( G
- MeDCMotor motor_10(10);; R9 A8 l6 H3 p/ Q. H" a- ]. \
- unsigned long previousMillis = 0;, O1 \: N4 X# B3 M7 N
- const long interval = 1;7 X' p# Q8 ^5 J
+ }+ E0 _8 b% ?+ ~" P& p- void setup(){* x0 Q& F" s7 k/ s: J
- lightsensor_6.dWrite1(1);" @. L( U! D) {& X, E
- nPower = 160;. F; r: [) E9 O( W% u+ c
- Error=0;
2 y {7 p+ r( f2 J, P9 _5 [ - ErrorAcc=0;
. m: s' b' N' [# d# D - }
. h* @8 ?" V7 N8 U7 e - : ] _% M4 `, Y: i, [0 b- m
- void loop(){7 f5 | @. Q, `: m& V' v
- unsigned long StartTime = millis();. R$ Y& y e2 f+ G; I# a* [
- if(ErrorAcc < 18000 && ErrorAcc > -18000){- V: Q4 l8 d' d7 o( ]4 I! k" R- L
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();3 ^* O! w: i/ U7 Q0 w" ^, S
- ErrorAcc += nError*Kd ;
3 H/ z3 \! B0 Z; D8 V, N7 F - ErrorDec -= nError*Ki ;1 |' j8 i" b# U2 i6 E
- Error = int(nError*Kp+ErrorAcc+ErrorDec);# }" t9 @/ a/ F) c, X. W; h7 g
- if(nError < 80 && nError > -80){/ X: b) q/ K( P& J" X' b, y: f
- if(nPower < MaxPower){
: d1 z ] D0 c0 ^5 T6 M9 l: V U4 N - nPower += 3;" f1 Z" e$ A1 R
- }
0 H2 F* m$ t; i+ _* B* ?. D - } else{
9 ^. O+ {+ y& x+ |; r) O - if(nPower > MinPower){+ ~# g4 J. J: l& x. ], ` G
- nPower -= 2;# m" w* u2 [+ w/ ~% n0 j
- }- E9 e8 X) A% {" {/ p
- }
# H- a6 k2 ^, m9 m( a - MotoL(nPower-Error);
?% L4 t0 l g. f* A k - MotoR(nPower+Error);
# P" H$ L: i* K4 Q# [8 H" w - }else{6 e% V+ w6 J" P/ d- u
- motor_9.run(0);, h8 Y* E h! V% g
- motor_10.run(0);
& R1 ?1 g2 c# @2 q2 B - }* f3 y9 g1 }/ D% `+ `
- do{}while(millis() - StartTime < interval);$ l& n' n0 [7 M1 k P
- }
3 T$ y. d/ u+ R9 I+ L
8 s' P: f2 j2 `. Z* o- void MotoL(int Power){
0 S# h* z; P1 s7 m7 Z+ O; P! N. ~ - if (Power > MaxSpeed){
- v- C( s* M1 ]" x; d) x - Power = MaxSpeed;5 E) g; r: I9 }( z
- }
. Z( P" P+ K3 [& w/ @ - if (Power < -MaxSpeed){% \( H) ^5 v5 y. f: `) B
- Power = -MaxSpeed;
. P6 m5 @* ^5 T - }
& }( l: w* e# }: X) } - motor_9.run(Power);
: E' u! |0 G$ G' h' D6 E" v - }
7 l' j2 S+ T9 S3 k
7 D8 }- w' W& U- void MotoR(int Power){
1 _- O/ Q: z% j: K# [ - if (Power > MaxSpeed){, ]$ D5 Z. e. L+ W' p& U
- Power = MaxSpeed;; g5 ^, X' w2 e+ M
- }
9 _/ }+ F( I. s& Q - if (Power < -MaxSpeed){$ ]0 o6 s, }" q8 U
- Power = -MaxSpeed;
+ `+ v$ d" ]. ]4 p' j+ }4 O% v& o" W - } - T0 n m" w. q J5 H" @& C3 y) F
- motor_10.run(Power);
6 K8 e; C: i) x3 H* ^; b2 K3 m - }
複製代碼
5 N! r) d* _6 ?' }) ?- P) Q2 t% R3 o$ ~
|
|