|
|
- #include <Arduino.h>
+ U: u. b0 R& l$ H. H* o$ }: Z - #include <Wire.h>
3 O7 K: p: i$ }2 m6 ^% u q - #include <Servo.h>2 z ~# _( D% ^
- 1 z5 Q0 m* |& b2 E% R+ C
- #include "MePort.h"
. {5 _9 W) D: x - #include "MeUltrasonic.h"
`5 l+ C9 b4 k) b( H% [ d2 ^ - #include "MeDCMotor.h"
7 x) k' Z0 h6 L% l
. e7 C/ }& \9 i% y/ e- //double Input, Output ;$ S& u7 Z# w* P" r" P$ D
- float MaxSpeed = 255;, {* v& S4 R* u$ q6 U
- float MaxPower = 180;
; _3 u/ E: R: I3 l2 c - float MinPower = 120;
7 s, Y: r& O2 W - float Error,ErrorAcc,ErrorDec;/ I' F3 y0 }4 W* D6 Q& k0 b
- * f, }! z* P4 M, e# n; ?
- float Kp=0.14;
1 C% G& y5 p# i4 D# r - float Kd=0.00020;//23;( q3 g' t( h' T1 j8 G$ g- h! B; i* n
- float Ki=0.000201;
5 l3 o4 f9 b' Y4 Z6 o0 e
- T3 M; }) N" B4 ?4 k) `$ G- float nPower;
, O7 I* C/ E; g$ h; x- ~: R - MePort lightsensor_6(6);; A; m: w/ a" }0 G( X ~
- MePort lightsensor_8(8);
' ^+ R; P- Y" v# [4 \( C - MeDCMotor motor_9(9);
3 K# j/ T* L9 m" O7 Z! {- {# X1 @ - MeDCMotor motor_10(10);) W0 v% ]! V: D& O7 k2 X
- unsigned long previousMillis = 0;+ [8 I2 T( e6 A6 d0 o/ Z- F
- const long interval = 1;
* d3 K9 k2 t0 B/ o; }5 { - ) H p7 _* ^& F9 [1 e N3 w0 H
- void setup(){
& l+ ?& i- Z( `/ x3 `" b - lightsensor_6.dWrite1(1);
% S; i" e: I2 x9 Z _ - nPower = 160;( t6 b. G: ]$ z" e) G# z
- Error=0;6 |" M- t$ e3 B1 k
- ErrorAcc=0;5 x# s6 k- \5 \% l) h
- }) d; W0 ^" R& n: K" H, `- e5 }
( M& Q2 E( v) [6 K( n- void loop(){
: M# q+ b, t( ?2 h - unsigned long StartTime = millis();
; S% F7 t' p' ^7 u. ^, m5 x2 o; S - if(ErrorAcc < 18000 && ErrorAcc > -18000){. F" E. o* a& [' t; ~: {
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
& J0 V# v2 W0 x6 m1 M - ErrorAcc += nError*Kd ;0 Q; |) y* E7 V3 C, G8 N
- ErrorDec -= nError*Ki ;
% ~. \& C: h2 j1 ^. B* y( h7 k8 z - Error = int(nError*Kp+ErrorAcc+ErrorDec);
( m( n* Z. y+ Q - if(nError < 80 && nError > -80){
1 ^3 m5 O7 N5 g/ M. P3 v7 { - if(nPower < MaxPower){% m2 Z8 ]- s( I8 x
- nPower += 3;
2 v, \5 ]% H$ S S. Q+ |+ Q - }
" Y* l- u( ^% ?4 K1 a - } else{
) {/ C3 U4 [# U# g* v5 V, P - if(nPower > MinPower){
\9 g Q) j+ |9 t$ O# S. ^! a5 q - nPower -= 2;
! j5 M7 o; J. j - }( e9 V$ z! @+ O# P, I
- }
3 [% H! Z$ `2 \" [! o) D) {) C - MotoL(nPower-Error);/ L: ]; g/ R6 h! I
- MotoR(nPower+Error);
: @1 S7 V# I9 [9 c& Y( Q - }else{0 U+ T* d1 ]! x& b% q5 w1 l% `
- motor_9.run(0);
3 Z* `+ f/ G) f - motor_10.run(0);' a8 Q, r: j0 C1 G2 M$ v0 @; g
- }& r+ W) |% u7 K2 `
- do{}while(millis() - StartTime < interval);
$ g2 m" ~( D- D H; ^) W8 l - }" [( O5 @1 G. [( C5 P8 |8 L/ G& U' ]
- 8 w) ]) L9 v) @( M0 e' L) u% U
- void MotoL(int Power){6 H4 V7 J6 [1 O+ D) g# t
- if (Power > MaxSpeed){8 i! ]. k* I7 X7 M
- Power = MaxSpeed;+ W( J3 ?# C8 G" e, e
- } ( g, D5 {' d# @; g
- if (Power < -MaxSpeed){4 @" o' N8 o4 B% _4 V
- Power = -MaxSpeed;% F* Q/ X! f0 V" D) l7 K9 n, x- t
- }
, \1 F2 a8 {% I$ r! ?, D0 e0 c: E - motor_9.run(Power);2 m+ d U7 N) N P, e! e6 x
- }
$ r; T) `; g& N3 n - , ?* f# S E: C
- void MotoR(int Power){9 Y# X% U3 h) l* D/ ~5 \! @9 Y/ r
- if (Power > MaxSpeed){
7 A L0 l$ x* f6 m - Power = MaxSpeed;
+ p# I+ l- w- c9 ~( A8 F3 h( n - }
/ M' z$ g4 u4 P# j8 P - if (Power < -MaxSpeed){4 _8 Q1 s; x" k. {! c7 `! h
- Power = -MaxSpeed;
) j; m2 T7 x g, {7 S - } & D( E; \# j6 @: @
- motor_10.run(Power); X! B& Z2 m; b0 [
- }
複製代碼 ' I; X, b- p' r6 Q$ B$ Z% ~ n
7 {, c: V1 C0 p. w8 W
|
|