|
|
- #include <Arduino.h>
- X5 R! y3 z" w, J - #include <Wire.h> V0 p8 t2 M( \( p2 x
- #include <Servo.h>; x) X4 w, F% t7 e
% a- ^1 I6 O2 f% V% Z) U2 u- #include "MePort.h"0 n$ P, U, O J- ]& j: F' z# _4 }# S
- #include "MeUltrasonic.h"
6 `! z9 W+ G' G g- T8 ? - #include "MeDCMotor.h"* a `% C1 {, v: s& M+ o# v
1 k V+ p2 T( ]3 R3 t3 h- //double Input, Output ;9 t& m( u2 }- z
- float MaxSpeed = 255; I- [- K! J# {4 v
- float MaxPower = 180;
( _; t3 j% h& n& O9 b - float MinPower = 120;
4 u/ z3 q, u3 K, E6 F - float Error,ErrorAcc,ErrorDec;
0 N4 ]5 f" v9 N" ~1 I! N
7 S% C: a3 D% p. B+ e0 X! {7 K5 K- float Kp=0.14;
) ^6 @/ s$ B W7 l- m2 r( H' y - float Kd=0.00020;//23;8 {: K- v$ K+ X
- float Ki=0.000201;$ _: F+ n6 j! q, I7 f
- " \! Q0 W/ V7 Q- h5 Z2 M
- float nPower;, d7 {% D ~% x; K! H, n
- MePort lightsensor_6(6);6 P! x- b6 ~: M' q. b7 `4 j! o( ]
- MePort lightsensor_8(8);
* W+ \: f. g/ D) p& k - MeDCMotor motor_9(9);% a2 |& D9 y6 L4 o# ?
- MeDCMotor motor_10(10);2 W- [* G3 q, _, D
- unsigned long previousMillis = 0;7 E4 |: n% g( n( y. [+ X, n
- const long interval = 1;
5 A1 k4 x2 _( O% r/ u }4 M5 O - 7 K/ J3 S2 [7 A, a4 r1 ]9 Z9 N3 U
- void setup(){! S7 |4 F! J2 g: r( `3 z) l
- lightsensor_6.dWrite1(1);/ T# @% B! r% q" y. E" b3 k
- nPower = 160;
! s# G* M* J) j, x% e: m - Error=0;# y+ y W% C2 G9 w; [* |, h
- ErrorAcc=0;
2 j8 D* i A; c+ B# @. M - }
1 H- u! ^* d* i
. S; a+ g6 O' j# C+ M% \- void loop(){# K5 w) C( h: P- j p4 P! ?/ ~
- unsigned long StartTime = millis();1 n8 u U; m! m: b
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
, V7 _$ p% k C - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
& I: [. ]* D% m E0 ` - ErrorAcc += nError*Kd ;
' n4 n- w/ W- c/ X5 y - ErrorDec -= nError*Ki ;
" J) ^; E$ |1 G& G2 [ - Error = int(nError*Kp+ErrorAcc+ErrorDec);$ Z7 \2 ] Z1 H9 B. P8 n
- if(nError < 80 && nError > -80){
5 s, v5 m F8 e: p4 c* P* ^* } - if(nPower < MaxPower){
5 E5 ^! `. a8 {( J& h0 Z - nPower += 3;7 Y" u2 G4 @% q. v% V3 o
- }
( I) n1 r- _% c a% i2 e - } else{0 w- {9 q1 A( l) }
- if(nPower > MinPower){
$ o8 Q7 f' P$ \# q - nPower -= 2;
% j+ b& H2 q6 X7 D) ?4 k. v - }
' d- {9 v, R+ ` ]) v9 ^ - } ) u! n% B3 b9 e' I1 m9 }
- MotoL(nPower-Error);
5 V; z; n( R2 G6 M; a+ j$ K! a - MotoR(nPower+Error);
; V2 s K3 e9 J3 K - }else{" a8 x) @, d1 \4 D
- motor_9.run(0);
" G. G! F+ a# `- k$ c4 M4 b M - motor_10.run(0);
2 _2 Z F: ], f% [ - }
7 q. u/ d. o3 y4 W - do{}while(millis() - StartTime < interval);
4 K9 h! M9 I+ f - }3 E6 Y# o# r1 |& R- ~1 M6 e/ k
- 6 Z3 V+ L( F7 C2 y7 `, u
- void MotoL(int Power){# d, t/ t6 B7 _, o5 g" F
- if (Power > MaxSpeed){
: q4 m* @2 \( y0 Q1 q+ A& Q& D - Power = MaxSpeed;7 |0 V: R2 m4 N4 k3 O
- }
4 @# x# P% ^& k) K9 l& b - if (Power < -MaxSpeed){
! S4 O- C2 g. E; Q( T5 V - Power = -MaxSpeed;) F3 Q" {- ]$ H3 y% X
- } 4 P$ R( b- E, _
- motor_9.run(Power);5 w3 r' m. q) X; x5 x
- } + q, d1 R2 T4 a7 g5 T
# z6 {, O5 J) W T" x& k0 J6 |- void MotoR(int Power){8 p0 ]/ M8 B" \1 U6 U
- if (Power > MaxSpeed){; r5 N" O7 A6 ~# F3 A
- Power = MaxSpeed;# _0 c9 B& G0 N$ B! q; n
- }
! B/ S- U7 W. p& [ - if (Power < -MaxSpeed){8 n( W5 b' x' T3 S! ]- e
- Power = -MaxSpeed;
) Z) N6 [5 g3 ~ o+ u; U1 H - } 8 _( K# [$ I1 H, y# a
- motor_10.run(Power);+ N& y5 P1 C% Y
- }
複製代碼 % N+ t0 [4 @- X- ]) w6 Y4 Y
) {0 ?! v: {/ q: K: K8 V' W |
|