|
|
- #include <Arduino.h>- W8 n$ c5 _9 \) H5 r, e; s1 s
- #include <Wire.h>/ @4 q+ z2 V- K" w
- #include <Servo.h>
! c+ y- e$ T" _, P
/ d- n; H8 C0 f# a( K- #include "MePort.h"0 F1 k& E2 ~ b0 r3 l( R! _) M& t1 C
- #include "MeUltrasonic.h"
( g& |( ~0 q8 X6 [5 m - #include "MeDCMotor.h"% y1 ~5 c% U6 \4 K' H5 ?; |, Y! k
- $ P8 u! c! n U5 o: }
- //double Input, Output ;* n5 m- x2 D3 j8 A! {+ t
- float MaxSpeed = 255;7 R( P% A: N9 ^9 y' J5 f
- float MaxPower = 180;' D3 K6 @+ _2 s O, q( e! z- z
- float MinPower = 120;
) c0 |: Q. D" k! P! X3 U1 g - float Error,ErrorAcc,ErrorDec;# l$ [& N; @3 G% Z) f6 A- l( b0 ^
8 P4 T9 r4 D( X! S" N7 Z8 Y- float Kp=0.14;
( R! G3 D. O# f+ F& |% a2 g/ S. \ - float Kd=0.00020;//23;3 A3 q6 Y3 c+ q! I
- float Ki=0.000201;. ]' v9 @/ {1 J6 Q
2 B9 ~) G& U! \) o- float nPower;2 M, M* M- T3 z
- MePort lightsensor_6(6);
: o8 B) f2 {& [" K - MePort lightsensor_8(8);" H: y8 `; @; N, K( Y3 T
- MeDCMotor motor_9(9);
* s) Y7 ?& D1 P( b* R - MeDCMotor motor_10(10);
- I' R0 i5 \5 H7 L, Q$ B+ Y - unsigned long previousMillis = 0;
; ?- a t; h) b& u7 d k7 v# \ - const long interval = 1;+ Y1 ~8 n! f/ C7 ~* [! r& M
- 0 K1 A! n W) j2 o( A+ v8 m
- void setup(){, ~5 i. F# h' K' }% L% U( t
- lightsensor_6.dWrite1(1);. z, s& r7 S( Y4 X% @
- nPower = 160;
" U8 b' f* G% J5 z. C1 t8 m' w, j - Error=0;
/ B: D% C4 U( K& l - ErrorAcc=0;+ w1 h2 T8 |2 ^# U
- }
5 G/ k4 ?. q( i- L
; e- i/ F! ?( u, s6 _( T9 W+ N0 M- void loop(){! z& h3 D+ a$ ?" L3 t, D5 D
- unsigned long StartTime = millis();2 v" B. f5 Y# [
- if(ErrorAcc < 18000 && ErrorAcc > -18000){$ c- E3 _& Y9 W. O
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();2 G5 }- n# h% O0 [/ G5 U
- ErrorAcc += nError*Kd ;
% m2 f# O) p* u7 X - ErrorDec -= nError*Ki ;1 H+ O! H4 r0 o( b! r E5 l
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
6 ~& {- k2 \: ?* w2 k) ]& t - if(nError < 80 && nError > -80){- \" T. s- u& m/ |; h+ t
- if(nPower < MaxPower){; T* I. B0 t, B- g1 ~1 F
- nPower += 3;$ Z+ B* ?" H4 C' M3 Z
- }8 U7 E% e8 t8 X. @6 Z: {6 Y8 d
- } else{7 b! K) M, `! l; T6 k+ L
- if(nPower > MinPower){# E7 N) {, q9 V6 N8 o
- nPower -= 2;
6 ?# o) y' `$ }5 Y5 h0 K& `* e8 C - }/ l' ?, j/ o# ^( N# o3 S1 M. W E
- }
: R7 ^; U; m/ E* W - MotoL(nPower-Error);
7 [+ g, w/ _% Q - MotoR(nPower+Error); ( e: T, V) }; a& s9 t* Z) A
- }else{& q$ e- p! Y% t( k% z
- motor_9.run(0);2 N, H# ?/ F0 S' u- J
- motor_10.run(0);: s, h8 q' B2 T! e4 k
- }2 w; m: {, L" q
- do{}while(millis() - StartTime < interval);
. r. c0 X3 ~! f; B9 q, ]+ { - }% B2 {2 p. Y! G2 O6 ~# R( _# G
' [* N! T/ X7 l- void MotoL(int Power){/ v, ^. v" D; o2 z% P: Y0 v) J
- if (Power > MaxSpeed){) e0 p L" S* S D3 C, u$ O
- Power = MaxSpeed;6 P/ c' u* m% Z, h6 P( Y' ^6 Y, r
- }
. u, @+ ^" E; C' H2 c - if (Power < -MaxSpeed){
& R7 f' G& x* q; G$ F - Power = -MaxSpeed;/ X& X: n. y% X) Z/ @1 D% c
- }
( [" ]+ k1 I. X# S+ z" T* U' I3 ~" d - motor_9.run(Power);* p) @" I- T6 Y# X/ b
- } % W- Y3 ^6 J' j0 b8 w8 z7 s" {* q
- 7 U A a/ t5 i5 L
- void MotoR(int Power){! b3 m8 e* P7 W9 Y
- if (Power > MaxSpeed){' ]- F7 a' p: Z3 c0 J# p) g6 D
- Power = MaxSpeed;
1 m' t/ `( L$ L4 W0 b1 O3 H - } 1 e$ W8 ~- I' O) S7 [6 p- Y5 G
- if (Power < -MaxSpeed){* K9 ]' F. p7 R. ` S7 N: ?" {
- Power = -MaxSpeed;3 V! {/ b' V. m! t" q5 [
- } ' O: h, b, n/ a
- motor_10.run(Power);2 g- P$ {* y" ^
- }
複製代碼 8 }6 q' F! ^/ x1 x
, b: ~& v& K! E: m2 T$ j: V8 G) W
|
|