|
|
- #include <Arduino.h>
! i6 B: k3 O8 @ - #include <Wire.h>
/ K- G1 d3 g4 r4 T U - #include <Servo.h>/ y1 {& s" @, d+ B& L2 }5 y7 s, O, S
3 S$ l' Q' P# b, L3 F' l; S- #include "MePort.h"
* G* H7 Y- B- L+ @& _ - #include "MeUltrasonic.h"
- T' d! {9 R6 r0 d% E - #include "MeDCMotor.h"0 j6 A, g1 {, } S6 s
- / {9 o( y, S _" H2 V
- //double Input, Output ;
+ h V3 g+ R$ ` - float MaxSpeed = 255;6 t' I, ^5 r, z6 C0 s8 n6 @1 ~
- float MaxPower = 180;/ I: E$ _* j& ~5 b9 ^
- float MinPower = 120;
, g& A; ~2 V1 V. ~6 U; L3 D - float Error,ErrorAcc,ErrorDec;
( _; o7 h7 |/ p9 u% p8 `
) @, ?& k5 M6 P7 |9 ]' u' G- float Kp=0.14;* x, n/ H' m8 Z ?8 V
- float Kd=0.00020;//23;0 j) n+ I/ l- |: J3 \* a* I8 I
- float Ki=0.000201;
/ J) c$ C1 w$ Z' i7 G9 d; f3 \
5 `. N3 X, t! B- float nPower;' h7 j: B7 |$ O5 K0 j6 ]& r7 n8 n
- MePort lightsensor_6(6);
6 `: R3 r: f9 b6 V/ |. Q - MePort lightsensor_8(8);+ b3 z2 e: u6 M
- MeDCMotor motor_9(9);- m6 k3 p- V" ^
- MeDCMotor motor_10(10);# F9 N( B) G/ Y- n
- unsigned long previousMillis = 0;2 I; g% ]' h0 ?. k
- const long interval = 1;) u2 D/ s2 {& x; O
- p- v0 _* ~" q) |! |
- void setup(){9 n+ q* |$ I* X$ T) G3 n5 e
- lightsensor_6.dWrite1(1);
: t) }! f. p* _% t - nPower = 160;8 h9 c( d l% x1 X5 p* d' c
- Error=0;$ g5 \( [# U/ g) N4 K) U0 K" d
- ErrorAcc=0;
& _6 L# U5 ~0 P. [/ r - }
( Z G& P" S4 d) q - ! Q6 _3 [2 _$ R: Q
- void loop(){7 P, z" E4 q! |$ S
- unsigned long StartTime = millis();
$ m8 f; E3 a5 u( ^! Z - if(ErrorAcc < 18000 && ErrorAcc > -18000){
* D- u( u7 e/ {& n4 v/ C z - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
9 u0 l9 z$ Y1 o( B. e0 o b1 U - ErrorAcc += nError*Kd ;# \: g+ M/ w: {1 \* `4 S/ e. k
- ErrorDec -= nError*Ki ;2 B: P0 L9 P Z3 u# i# }0 D$ z
- Error = int(nError*Kp+ErrorAcc+ErrorDec);' T* y3 m, h. o1 z6 U! R
- if(nError < 80 && nError > -80){: N, ^' d$ s/ C0 j: j; Y
- if(nPower < MaxPower){% o) e" t2 c; q, h) H) X
- nPower += 3;' F3 W( u7 c3 S# J5 m5 E& K
- }% k2 Z2 n- y, n9 x8 p
- } else{
( E, e8 D" J Q6 \' Q J, {: ` - if(nPower > MinPower){# o0 q7 ]. U& O' L( r2 u
- nPower -= 2;$ r, Q: X# ^$ k! O" F
- }
, }2 Z) m9 `# r" z - }
; v0 {/ E" ~% `7 L! T - MotoL(nPower-Error);4 C- c( m7 h2 N8 F. P1 c/ r2 L$ D1 j
- MotoR(nPower+Error);
3 [; K" k3 N/ X' O9 { w - }else{3 q% B/ x& c# l. X
- motor_9.run(0);3 R5 m* I6 N4 {2 V; X: O2 K
- motor_10.run(0);
8 Q" C. x: L s; g. y6 o- N3 a - }
/ h( ^' x2 h; f. `+ l2 } - do{}while(millis() - StartTime < interval);
1 F- g q C* O* [ - }# P+ i8 V8 j2 r' a
- 1 Q2 m$ z! I! s- r/ g
- void MotoL(int Power){0 `4 C8 g7 G' z# ]
- if (Power > MaxSpeed){
" Z- y& }6 w( p' O" T7 U - Power = MaxSpeed;
) o" V3 X5 h$ \( k8 ?8 G+ ~ - } $ k2 x3 _+ R( R0 T C% ?: v+ G
- if (Power < -MaxSpeed){
) f& f% A6 }$ u- T, f+ M3 ? - Power = -MaxSpeed;$ [9 ?( |: }0 r1 E+ S
- }
% S+ B9 N# J5 C: l9 y! }) u - motor_9.run(Power);, {- ]& [2 m3 ^, T" y, u
- }
* D( C1 b6 s( k; I
( C) W2 @9 h1 p$ Z: [/ I- l" e6 H9 c- void MotoR(int Power){
6 }- g" l+ d9 p" a3 N9 @5 R( t - if (Power > MaxSpeed){' e" p" ?* Q* |' b/ V* |
- Power = MaxSpeed;
0 q; |3 r1 v5 I0 M* Z - }
5 k4 P2 J7 P: ~2 ?1 d - if (Power < -MaxSpeed){
8 v! V; y1 c, F2 E - Power = -MaxSpeed;
# p( _" k. Q* h. k. z- D8 e* B - }
/ e% }# v' L1 S% A% M6 M - motor_10.run(Power);4 j, J7 \3 c. S3 S# ^ S
- }
複製代碼 ! o' ]1 V3 l: I2 k
/ |% {* t3 S' _& i5 o |
|