|
- #include <Arduino.h>' |" a# ?) u: m* _
- #include <Wire.h>
0 z V2 I2 _- o# d- M4 d( b& L N - #include <Servo.h>, J. k4 [2 h; [/ R3 ^% J
0 _6 N1 V( S' o8 _- #include "MePort.h"
6 D5 r' I/ h5 y4 n* \( h - #include "MeUltrasonic.h"& k5 S- [" p$ d4 X- L
- #include "MeDCMotor.h": t Y% s# M' B5 s1 Y
: ?# l" r9 D, f! N1 I( t ` I- //double Input, Output ;
( @% u; }) K9 S1 K& \ - float MaxSpeed = 255;
1 B7 a& T- L" D. @* S# M6 k0 o - float MaxPower = 180;
# T: q' S7 y) J- ^6 k8 c# l - float MinPower = 120;, i1 X! W" D+ C4 V# H
- float Error,ErrorAcc,ErrorDec;1 x# h; _! @; Q; _0 }5 `
) j! X8 b/ z1 j; x0 r S% R- float Kp=0.14;
7 k5 b% |- u# w7 o - float Kd=0.00020;//23;$ V; q$ T( ?0 [5 A8 r9 Z6 ]
- float Ki=0.000201;
; ?) G# s# T5 |
1 s D) }2 W. X( V- float nPower;
1 Z z, S0 W0 g+ N - MePort lightsensor_6(6);
, }0 |" l$ H; D7 T4 S1 Y - MePort lightsensor_8(8);
2 I- F. z& v/ H - MeDCMotor motor_9(9);4 [8 y( J1 F/ i! `5 u4 n
- MeDCMotor motor_10(10);
8 {1 {9 g, f( S2 J+ X - unsigned long previousMillis = 0;" z7 N3 V }+ |4 f* G6 |1 U/ s' h
- const long interval = 1;# J4 B' T& C" \+ W5 ~
- 9 ^, V( g7 E0 z8 J. z# a$ O$ R s+ G
- void setup(){7 N! H! w7 v* ~9 _
- lightsensor_6.dWrite1(1);
' f7 C! d5 l0 [! n" k - nPower = 160; Q E* ]( n- Q
- Error=0;% k6 r3 \) E/ W/ k: N
- ErrorAcc=0;9 n8 Z8 e2 X* `8 i
- } Y+ x& S6 q' U8 [% H
" B$ i* H( z% `8 n2 X- void loop(){9 {) U0 c4 s4 V, {/ u2 U# I% g
- unsigned long StartTime = millis();
& x5 n5 x. }6 ~ - if(ErrorAcc < 18000 && ErrorAcc > -18000){
2 {5 x& r! e! E - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();' K3 e% I/ e$ [: n) m
- ErrorAcc += nError*Kd ;
! F1 C1 e, L7 ?7 l1 e1 c6 K - ErrorDec -= nError*Ki ;% H# |6 l" P2 J" M9 e6 D6 x$ A; M2 P
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
r3 \: E7 |. ? - if(nError < 80 && nError > -80){" J! M6 w* J/ o$ T
- if(nPower < MaxPower){0 B; B6 `% [. `7 X+ r
- nPower += 3;
3 \ j8 ~1 V+ L - }
: M* T4 A1 q( k& L8 S - } else{
. H7 @4 S2 n4 E# B: [1 W* ^ - if(nPower > MinPower){3 f& C3 ~1 w. W' a3 x
- nPower -= 2;6 ?% o# H; {2 ?: x- ?
- }" Q. N$ k' ^ n5 C
- } - M# t- e7 {: J. u* g7 h; y; {
- MotoL(nPower-Error);& b- q4 [$ ?; g& y
- MotoR(nPower+Error);
# V1 i9 L6 W& J1 _/ \$ F - }else{
1 J+ P6 Z* Z8 H' u6 l - motor_9.run(0);) z$ K$ T2 ] j7 O3 C# `2 U2 r
- motor_10.run(0);9 x# u6 S6 ^$ `" B1 w0 w
- }
4 S: I* L: @' d0 z - do{}while(millis() - StartTime < interval);
) O( B/ r4 I0 n8 ~ - }
$ V% j3 w( r, @ - ' j5 b! m& [: E8 A! E4 N% h
- void MotoL(int Power){4 c/ r- I6 e% O2 U! m( w
- if (Power > MaxSpeed){
; G8 l6 Y% u- y - Power = MaxSpeed;
1 H* ?* v8 [. ? - }
- E' v& Q- l# B$ | - if (Power < -MaxSpeed){8 S- b9 |. m5 ^
- Power = -MaxSpeed;
' \! r. [% |6 ]8 x4 t; z, n, b - }
3 Y' n* f- W6 N, r) M+ D - motor_9.run(Power);( E% ?9 H/ H' N2 j" z5 J
- } ; y8 q% W. ~6 z% p4 A
: b& d) u; E' @+ g" a) @! g) [- void MotoR(int Power){
# `( H7 ?. k& E; g( U# i6 ` - if (Power > MaxSpeed){; z+ w2 S3 U* f3 h
- Power = MaxSpeed;, ~6 v( E* V4 ^0 [7 J, M
- } . B! F j: x4 b+ i
- if (Power < -MaxSpeed){
# `; ^" o! Q/ w" V - Power = -MaxSpeed;
# Y# W' X& @# y s - } $ G- _! ]$ K% C @
- motor_10.run(Power);8 L; Z/ j+ Q! C( \; H, X
- }
複製代碼
5 g2 c8 P/ C* h& r9 H; P
% `2 y* k b5 e# M) V |
|