|
|
- #include <Arduino.h>
2 s C/ B( ^0 d) T3 x% H$ V - #include <Wire.h>
, G" u( @: P5 U! b8 B+ E - #include <Servo.h>; O# v" W$ i1 Y. i: n
! Z' o; S/ x4 F/ M# ]+ K* p- #include "MePort.h"
; W8 o8 v D* y: @/ m5 N) F, R - #include "MeUltrasonic.h"
% ]3 u' q" _2 _0 C1 D, h |/ G - #include "MeDCMotor.h"
8 T0 `- n w2 S% Q( o s6 ` I2 Y9 q
K1 `+ O) y- x p- }7 I8 p- //double Input, Output ;& N, J5 p% |6 k M
- float MaxSpeed = 255;
4 Z& P: o+ y$ }4 x - float MaxPower = 180;
) [% c p+ i, d5 c; E3 k7 L - float MinPower = 120;
, M1 D: v0 Q) I! q, e; r - float Error,ErrorAcc,ErrorDec;8 M% }3 @# @8 z# }3 E ^, q- G" Z
- . d, U! w! {1 [& T% T/ p+ c" [+ q
- float Kp=0.14;
! E; j3 t/ I/ m# D# P0 y& f1 J - float Kd=0.00020;//23;# |3 R6 B, H2 ]# T, n# E8 z
- float Ki=0.000201;
2 |; R) M2 _$ x# E9 [ - * N/ x5 m! I0 S4 C! U, r" V
- float nPower;$ _7 j1 E: k* }# S7 D- b) p
- MePort lightsensor_6(6);1 k5 _: @4 ^, F0 ]) t8 l: E: ^
- MePort lightsensor_8(8);7 {8 F" o6 R. l L2 u% Y
- MeDCMotor motor_9(9);
1 F) m* p9 }7 x! F1 `, i - MeDCMotor motor_10(10);5 j5 N P5 ?( K& A, v: ]* R
- unsigned long previousMillis = 0;
8 t( v" \$ J9 F" B - const long interval = 1;& r8 h! U2 |7 @7 ^3 `, X
4 r3 S2 ^+ M1 ?9 W- S9 Z- void setup(){$ ]9 W# P3 E5 x' t9 @
- lightsensor_6.dWrite1(1);- U" \* c# _+ Y9 [* w
- nPower = 160;! B4 M3 O4 h) s+ _+ B; I# Y' `# z
- Error=0;% O. Z! k- `6 ~0 R
- ErrorAcc=0;) a! ^/ i& ~# r" K; j+ \8 r3 L
- }
' e. i0 k! H# G - $ l4 V7 X# ^/ E- O) W4 \& @8 v! p
- void loop(){. ?2 E9 G" e3 f% q6 B
- unsigned long StartTime = millis();
. Q9 `% p; e$ } - if(ErrorAcc < 18000 && ErrorAcc > -18000){
5 O( y) Q& m) Z+ }. |/ K - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();4 `7 _, t2 u5 v, f
- ErrorAcc += nError*Kd ;
; |6 I5 A) h; }; @) P - ErrorDec -= nError*Ki ;
- v/ }" x# E4 U+ x3 {$ ?7 L - Error = int(nError*Kp+ErrorAcc+ErrorDec);& H2 A& o7 w) A: F9 q; M
- if(nError < 80 && nError > -80){
0 p8 P0 Y1 L! u+ |6 w - if(nPower < MaxPower){6 V7 j. Z8 v( i9 ?+ a0 n0 T
- nPower += 3;
1 v. N, ]% J5 r - }" T# q7 r8 ~+ ?8 @: T
- } else{# _; A2 x' ?( F0 t. ]
- if(nPower > MinPower){( A: @! n% w1 q* S( _! b
- nPower -= 2;
% W, e2 r" [: z5 C' C- e" `. n - }
. }* l/ a* K3 @& d; c- e/ A8 c2 k+ t$ C - } # C& w* C# C4 _ P& k. C/ A
- MotoL(nPower-Error);7 W6 [9 z# Q6 i# D6 O" ]& W+ c
- MotoR(nPower+Error);
% ]* T; M% y# | - }else{
8 u1 p* T6 G& m9 A* @4 k( S - motor_9.run(0);2 s9 T8 r! R* @
- motor_10.run(0);8 F5 c! U8 ^2 k( O& z6 N$ S2 `
- }
6 \9 |2 D6 ]- R - do{}while(millis() - StartTime < interval);1 A& i; i& ]1 X) ^3 V
- }
" Q' L, ]5 G# R3 N4 {+ {
`' H/ ^$ w/ a- void MotoL(int Power){- q3 ]8 A: G7 R o# |) u8 H
- if (Power > MaxSpeed){, |4 B6 I' i( Z. T
- Power = MaxSpeed;
- i% x$ E) u( d' z3 a- D, Y+ Y - }
4 Y/ g8 @+ w2 L3 P1 ^ - if (Power < -MaxSpeed){( f5 W1 E m7 `, b2 B( h; _. C
- Power = -MaxSpeed;3 U- c2 s2 ^$ W" g0 C
- } 8 {+ N, e7 o5 L) W- p! e i4 o
- motor_9.run(Power);1 ]1 h! S5 ^: ~8 A& G" e" g
- }
7 j6 S# f5 u) b: G6 b - # U, p% E$ N4 L+ J( U6 D" z) j
- void MotoR(int Power){
$ [5 ?: n+ N2 [7 a5 ^$ A7 L" x - if (Power > MaxSpeed){
3 I( G3 n6 v4 j1 m- ^: S) X6 ` - Power = MaxSpeed;4 m& e7 R/ q, h. ^* Z
- }
5 K, j; }8 {! e5 R: i - if (Power < -MaxSpeed){
; ^. I+ | a5 z& E; e1 g - Power = -MaxSpeed;
* N- v1 ^8 K3 C5 L7 u. R - }
' \6 O3 @; C# d& c/ E' u4 ~4 H - motor_10.run(Power);
" `. {0 d& b; n2 D" z - }
複製代碼
6 i9 M8 A5 W+ t% h7 |: D. \ {5 p0 F- S+ R& E" c
|
|