|
|
- #include <Arduino.h>$ P( ?6 _; A! ]7 h+ e7 |
- #include <Wire.h>. d; ]" R" X5 I# h
- #include <Servo.h>7 E u# V# t* G0 b
- + O9 D/ q( I% ~: L! U' h
- #include "MePort.h"2 M, y; M7 q' ~6 R; Q! {5 D
- #include "MeUltrasonic.h"
2 K+ D6 n: h8 Y4 L; | - #include "MeDCMotor.h"& a1 x# z% g; i3 n
+ d( D2 e, i3 L% T! Q) G- //double Input, Output ;: w/ ^9 S5 R: j8 N6 l* t
- float MaxSpeed = 255;4 k; C% N* ^+ x5 X/ l+ v8 V2 o1 X
- float MaxPower = 180;
5 Z: C# A H& q7 F, \" d6 ?( c7 g/ o - float MinPower = 120;6 |0 W5 W5 {& U9 g# \- x
- float Error,ErrorAcc,ErrorDec;
; V) F/ D7 t: C/ H( U: k; q - 4 Q2 q/ y& }; n3 i$ F
- float Kp=0.14;# o' d- Z2 C# L: s
- float Kd=0.00020;//23;
1 i. ]# j& [+ T# Q' ` - float Ki=0.000201;" f9 {% T. ]/ T+ E1 c$ K6 P! N, R
) e' ]0 K. n0 _* ~- float nPower;
9 u; y' D3 H. s6 Z9 v, V - MePort lightsensor_6(6);8 c0 j) u' T/ B7 [& h' n* {
- MePort lightsensor_8(8);/ d6 ^! |! N$ j7 ]
- MeDCMotor motor_9(9);6 t: z+ e4 T+ ^# E6 ?
- MeDCMotor motor_10(10);
" Z( q2 h5 l0 p) h* n+ ~" I - unsigned long previousMillis = 0;9 n0 d0 r' k1 ~: N$ D
- const long interval = 1;
3 ^. t6 G# {, G - 4 P# |# J1 G% e) }; [9 v
- void setup(){
+ Z1 P* c! N$ L6 R" j/ o - lightsensor_6.dWrite1(1);+ |$ {$ v1 D- u2 c h8 s$ X
- nPower = 160;
* `3 f5 z: N4 K - Error=0;* w5 \( K' ~3 x* t( Y
- ErrorAcc=0;
: ]. }" f4 ~/ b3 A4 F* x - }/ p( o4 i( F4 S# F/ e$ t' q
, i; x# [; S9 Z: d3 A- C7 D- void loop(){
# V8 s! J: a# p& M% y - unsigned long StartTime = millis();
3 s/ R& {, a# j- t" e" l - if(ErrorAcc < 18000 && ErrorAcc > -18000){
1 _$ d- m8 p2 H1 G - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
& X# R7 d6 d% x, c2 P# z; A - ErrorAcc += nError*Kd ;
0 P7 V- \" v3 ^: F& n# F - ErrorDec -= nError*Ki ;4 y U3 O S8 H+ x7 }
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
- k( G0 y+ s# n* v - if(nError < 80 && nError > -80){& t; ^1 O' k, q
- if(nPower < MaxPower){: p/ y1 G6 A. U, J ]7 Y1 r
- nPower += 3;: K* N* e( x( g$ k+ C- n/ H& V- {
- }+ |/ ]" G& E2 x4 J ]# M6 L l
- } else{
6 q$ }( e8 g* D2 G, C$ w4 H - if(nPower > MinPower){* c; g! @8 d; o( H, T0 p4 `& x
- nPower -= 2;
( [: t) q; o' D1 f3 q - }+ x8 C+ n0 g$ s$ x: j4 t0 s
- }
3 M0 L2 c% r3 D3 A# y - MotoL(nPower-Error);/ _ m4 \: h$ _6 J) [# S
- MotoR(nPower+Error); 0 o9 U6 S3 B% F- e
- }else{
' |- Z" f8 s$ k - motor_9.run(0);' C; R* `; J8 W9 D0 D# Q1 i
- motor_10.run(0);5 D1 v0 a6 K) i& V9 v* q
- }9 v. W; p! R% X
- do{}while(millis() - StartTime < interval);
( a2 P( {9 J' h. E, a. O0 _ - }
; F! B3 U8 @; F9 {' h& R7 U - ; V3 d/ o% }* N$ f5 H; B. r& o
- void MotoL(int Power){0 u. g1 b6 \, Y( j
- if (Power > MaxSpeed){ H, z/ P- f2 G# `: s q
- Power = MaxSpeed;& [) y, M# @7 e0 K1 R! R
- }
. [+ R" G' y+ y3 r! O5 D - if (Power < -MaxSpeed){5 P% Q5 e. t9 l" Q7 Z
- Power = -MaxSpeed;
/ Y+ t6 w% }# S- J - } ) i: _! v" w2 K3 x$ ~1 j
- motor_9.run(Power);
/ W+ A" |2 y# ` - } 5 }9 _( z$ m6 d. X! n8 n9 W$ ~
- / ~/ r& ~0 r! z) N% j$ L
- void MotoR(int Power){
' O+ N6 W$ M& [& y5 Y, C - if (Power > MaxSpeed){
2 @3 u# U L- M) l/ M0 z+ q; t - Power = MaxSpeed;
- e" h g: ~ c) G: C - }
( s+ Y/ M) y& O) C) F' a2 D8 J - if (Power < -MaxSpeed){2 G/ l H' w' y7 M2 A0 z8 ?/ h% W
- Power = -MaxSpeed;
+ Y; ~! n# E. f/ k$ w - } / U) a" P: L. w* Q
- motor_10.run(Power);
' v( i/ u% K+ w9 s% A6 S U ^1 N - }
複製代碼 9 |7 ]- j8 s- @1 T
& W7 Q1 S! U: V |
|