|
|
- #include <Arduino.h> j! |8 ~, s- p6 I* B$ K
- #include <Wire.h>: W# G0 ~: T! V/ E
- #include <Servo.h>
# F. g# j7 v8 n$ d, C d! e; a - + y! L2 s( s; A5 \- T
- #include "MePort.h"& \2 v1 S4 F0 V7 p
- #include "MeUltrasonic.h"% L. [* r5 T2 J3 `. R
- #include "MeDCMotor.h"
- O4 q$ z) g/ U1 g* j0 G @
1 [/ q2 a% b; e- //double Input, Output ;, @2 l) r1 z7 E2 L3 W x
- float MaxSpeed = 255;
. f) m% ]. L) V: q) x0 W: F1 R6 b - float MaxPower = 180;
1 h' T( ~( e, r+ B* N# q7 J% H3 _ - float MinPower = 120;8 v- g7 G0 D/ F8 F* g* }1 x: \) w
- float Error,ErrorAcc,ErrorDec;# ?6 f& F9 R7 G$ r( _& G
1 U. ~# |2 _+ {. {* u* P9 E1 {- float Kp=0.14;" p1 m) P, M" k0 r1 {; R
- float Kd=0.00020;//23;9 l0 d$ `' C6 f% H1 M+ `7 F5 j9 l4 P2 e* _
- float Ki=0.000201;
4 z% W; l) ?) L9 Y- H0 c - , q* `+ w0 W! n& u6 z% K, L
- float nPower;4 S0 l( S) U# J# w
- MePort lightsensor_6(6);3 V" P6 J& K" y9 W1 h4 K+ v
- MePort lightsensor_8(8);
$ x' W5 k' v# m1 Y9 S0 O - MeDCMotor motor_9(9);( _6 B- `3 z& P- ~! t
- MeDCMotor motor_10(10);
7 a5 U' d& O. N5 i/ f! { - unsigned long previousMillis = 0;) V4 |( c' i; R! | C
- const long interval = 1;
8 z, U* E7 t5 M4 m - 6 W9 X! ^* \( x( v
- void setup(){# O4 o) E; d' H
- lightsensor_6.dWrite1(1);( }! E" y1 R% h# q! I2 E6 X% M; [* \
- nPower = 160;# A1 y* \, p. [7 L0 [1 \. X
- Error=0;. ]. Y' \) E# w% j: A i
- ErrorAcc=0;# K; p7 b9 f+ I. b' q1 J7 Q
- }
6 w# v4 a0 I {, ` y
: x' N6 w2 y, {5 S" ~2 e- M! {- void loop(){' O, i o* i# x: ?8 `
- unsigned long StartTime = millis();' }! [- i( L, ?( a7 K
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
. d6 {2 s* H3 z0 w - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
2 q. ]# W" m1 n+ j) t: }7 e) d, X - ErrorAcc += nError*Kd ;
8 G1 @9 Y- o8 o: f8 K' M/ Y - ErrorDec -= nError*Ki ;
6 y3 G7 X, A, {* B3 Z r7 R. e - Error = int(nError*Kp+ErrorAcc+ErrorDec);* B7 R7 D; U5 n: o' {. u6 e& T5 w
- if(nError < 80 && nError > -80){/ r2 h; b0 L: l6 o- V
- if(nPower < MaxPower){
& t' V% Q6 M7 r1 z - nPower += 3;" {7 |) q5 i ]% ?. y
- }
) T+ b. [9 Q7 u9 o4 t - } else{
. _! `! o% K0 a; q. Z& i - if(nPower > MinPower){* W7 q0 s Q) W6 X- |, Y) z4 E" e
- nPower -= 2;$ h; ?8 H( |0 @2 z, m3 N' h$ E
- }4 e; K7 G" _6 b0 {5 f
- } + {7 s% J9 `0 v. B2 B n
- MotoL(nPower-Error);4 G) M9 G1 X: x4 e5 N5 w* d
- MotoR(nPower+Error); 1 {# |, s6 C6 i: A5 v V4 s
- }else{4 I7 W0 C" x2 N6 `2 {2 r5 @
- motor_9.run(0);
, m+ d+ A& P+ F. c) @ - motor_10.run(0);
. p9 `2 T3 ~- H& `+ K7 g- ~ - }. }+ p6 ~, }, ]( J( i( P# y0 H
- do{}while(millis() - StartTime < interval);
) ]# {" K- a; c; n# N3 q - }
) E0 k" R3 {, v- L( _" l! Z# z# N
7 {) P) I7 Q3 ~, ]( }* q" x" q- void MotoL(int Power){5 v# I- |9 }* o" \
- if (Power > MaxSpeed){. [+ }- c* O \* m, b
- Power = MaxSpeed;
7 R9 g; O5 \, \) j/ e( n/ K( u - } . P& Q- K8 e$ {4 H" W' ~" o
- if (Power < -MaxSpeed){# z4 x9 B/ e/ M) H+ w7 m
- Power = -MaxSpeed;
# P7 H7 k+ q) k) u& F/ U- D - } ' V' n. k0 Y7 M- n
- motor_9.run(Power);2 L; J+ |8 v$ s. ]4 n6 |
- }
$ P- h7 S) {* Z7 |
0 Z( z3 P1 u. h- void MotoR(int Power){
' w% }) p8 J9 M( h" j- \1 \, d - if (Power > MaxSpeed){
+ L. c# x& `4 P' T- w0 Q, V+ M2 ? - Power = MaxSpeed; `% T% ^* d7 Y A m* F# f8 f0 l& z
- } 7 f3 l. O8 }3 A# F0 H) Z$ x: {( B
- if (Power < -MaxSpeed){1 @! O+ G, i# Z. {# c
- Power = -MaxSpeed;
+ {4 G! g# I5 R) }' k - }
% \4 I6 N8 l7 {' v2 Y" l0 i% ?2 L - motor_10.run(Power);
; } m+ f9 g* }; G. E - }
複製代碼 8 r2 ]2 Y, v' C% }$ l: `# h9 J0 b
6 l8 p8 {8 {) A2 s4 U% f& K6 `) d |
|