|
|
- #include <Arduino.h>7 d3 n1 i2 O$ W$ G5 g6 x$ R
- #include <Wire.h>
9 b* n. _6 N5 V, W b9 k0 W* E - #include <Servo.h>/ ~' q& }0 z/ ~$ k- ]3 I
- ' D- ~+ v7 b0 {; J+ l8 i
- #include "MePort.h"
8 x- {) ?: y$ g# l" I4 \ - #include "MeUltrasonic.h"
9 s! U. y# _; X/ o - #include "MeDCMotor.h"
8 d& D" C, W& x - " [0 K1 U; J; z: J" o$ M
- //double Input, Output ;
! V! b# V2 S6 C2 L% S - float MaxSpeed = 255;( H, x$ J2 M- f2 P) h
- float MaxPower = 180;/ w1 `% r O T/ p1 [
- float MinPower = 120;: N, U# q9 e1 u9 B
- float Error,ErrorAcc,ErrorDec;
( S: |( K7 X/ g8 L& b. W# v9 q7 b - # U$ W- P- s5 u. x% S
- float Kp=0.14;9 V( R( s- `# R+ Q6 t' [6 ]) r
- float Kd=0.00020;//23;. Q5 l" z8 s+ M6 `
- float Ki=0.000201;
; T9 k$ _! i, O# e7 V# e V) u - ! w" Z! }: b+ h( e9 K3 u+ S
- float nPower;, D% u2 }) ]0 L; l) {6 x
- MePort lightsensor_6(6);8 K- ?0 z( o" t4 `' M
- MePort lightsensor_8(8);
" O+ f0 E; C+ l3 k9 I5 i - MeDCMotor motor_9(9);$ R: i2 \0 \7 f; }6 u8 O& @. [( k3 l
- MeDCMotor motor_10(10);
9 [( H2 w/ g! B6 m" ], W - unsigned long previousMillis = 0;( r. x9 c) i0 H# T+ ?2 V% S5 L
- const long interval = 1;
+ \2 D# X9 W5 I! D' p: } - / \' u" M: R9 m& l g$ T" e0 h( h- P2 w
- void setup(){! C* j% y1 G* z' ^
- lightsensor_6.dWrite1(1);
1 P& v4 E0 U- I* I - nPower = 160;* o, S& _/ q0 ~7 T' H0 `
- Error=0;- t# \% ^0 \; w, {' L
- ErrorAcc=0;6 S2 O. p0 Z' Y% k' x3 i
- }
8 N# T0 J9 w+ |! ]* K# Q& r$ J1 q. N - # {* Q% M# k7 _0 M
- void loop(){+ m# p+ U( C: }9 W/ C' }8 J
- unsigned long StartTime = millis();
\. x" S0 e, p7 ]- j z - if(ErrorAcc < 18000 && ErrorAcc > -18000){
& e0 m0 K& T9 Z, z0 ]' k% A - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
8 A# l5 w8 s( Y5 V* N - ErrorAcc += nError*Kd ;* g0 _7 g$ k' L/ \6 x
- ErrorDec -= nError*Ki ;
! j: ?; Y6 R. _; \ - Error = int(nError*Kp+ErrorAcc+ErrorDec);
, g4 R: K; B% f& R' v2 Z1 A# U - if(nError < 80 && nError > -80){
0 e8 m% H- z: n2 M) V0 e4 Q5 a' P - if(nPower < MaxPower){
: j4 g8 _- {9 B# ^8 h5 }' w, h - nPower += 3;
, {1 t6 o( S. f4 ~" g; t - }
- h& a' \- D6 ~% `/ |# ? - } else{
9 l3 j: K+ i$ X% u - if(nPower > MinPower){
! {' C3 V% O0 d- G( U( d9 k- k* a - nPower -= 2;, H7 ~& H& Q6 C, X# Y9 i
- }
7 |! G, e2 h; G0 W - }
& i6 A- E/ j% K- P6 Y - MotoL(nPower-Error);
2 M. s( ~* s# B* Y) J" ^# { - MotoR(nPower+Error);
) A C9 a, x2 Z9 n( }& u g - }else{( L% L; |3 q8 V) v: I3 I
- motor_9.run(0);$ C6 J3 a8 h% q0 t' v( d
- motor_10.run(0);- w$ O$ P9 W% W5 H# g: b
- }# O% ?7 l( `3 x; P& e
- do{}while(millis() - StartTime < interval);9 r" N5 k1 a6 Y$ @4 D' C) ^
- }
3 @% u' e* p+ i- b
9 Q$ J/ q4 ~, F! W6 W- void MotoL(int Power){
. t0 I/ `/ w0 T* V7 x5 m - if (Power > MaxSpeed){
/ i; |+ A! v' o; ^ - Power = MaxSpeed;
1 c; u ?# p W( Q* H- T; d - }
9 [1 m. r, M. E) N [6 }$ y1 i4 l) r - if (Power < -MaxSpeed){
* C/ \- ^" u8 h# M8 L& G; f - Power = -MaxSpeed;( @. S& B, B+ M6 s5 `
- } 0 M' N: _) X: \" t+ Z6 G& Y$ a
- motor_9.run(Power);. u- R( s4 O7 h: u0 C
- } C+ O) H0 h0 ?1 B$ d$ o
- : k6 l! ?9 {8 ?% ^; f5 x, g
- void MotoR(int Power){6 Z5 I7 T, j! u. ]; O
- if (Power > MaxSpeed){
% \' C1 Z, o# {% {% V - Power = MaxSpeed;
" K# W. c+ o) D w0 e - } 0 g/ [& i, E% e# k$ l
- if (Power < -MaxSpeed){
$ V% j% @4 h) t: @8 O7 x% L - Power = -MaxSpeed;
* @! f4 T; c2 `0 Q# K - }
* U5 X2 |+ R- R1 u - motor_10.run(Power);: ?' g9 T& Q8 M( n
- }
複製代碼
3 y; u1 _2 [% B9 \' n2 D5 Q4 @- I" d+ q# o3 m) C! y9 @! `" T, `
|
|