|
|
- #include <Arduino.h>/ S0 u1 }; j7 ~0 D" T
- #include <Wire.h>
. v; y8 t! ]3 o" [# A# x' ]8 H- |" E - #include <Servo.h># F( A: K3 l( w6 E2 Q0 x7 J4 J3 m# r
- $ g$ B- F/ T2 B* |4 m
- #include "MePort.h"" k% _) X! c" y2 y
- #include "MeUltrasonic.h"
/ J1 R( m0 x" w+ ^5 i6 _# V% B; o - #include "MeDCMotor.h"! D( D9 |# N5 g7 g
$ w3 x6 Y& m2 R5 a. f) v: E- //double Input, Output ;% E- I9 A* f; G* g" d
- float MaxSpeed = 255;
& ^0 _- W, ^! f! k R& b - float MaxPower = 180;9 {7 o1 k& Z2 Z$ Q8 q1 W' f( d
- float MinPower = 120;7 o7 G0 B, Z- q5 q" ]
- float Error,ErrorAcc,ErrorDec;
+ Y! \* Q. w* k& c - / ^8 \/ w2 H {
- float Kp=0.14;
" l, t) t2 ]0 ^+ ?# p - float Kd=0.00020;//23;0 K' Z; H5 t2 `9 E# `
- float Ki=0.000201;
. v2 v% h v' ?! B) H/ i; n! A
7 E9 X% S5 P# d! M* Z- I- float nPower;
% i8 ~* J8 O* U2 R' p0 b - MePort lightsensor_6(6);5 H. r6 Z8 d# k% T8 Z) v
- MePort lightsensor_8(8);
' |$ l9 h* l( k0 ^+ ^0 _: ` - MeDCMotor motor_9(9);
6 y; i, Y, g( A8 \, d u - MeDCMotor motor_10(10);
& z) V- E- N# B* s9 p7 x - unsigned long previousMillis = 0;) \: V ^6 k0 }% F
- const long interval = 1;
! |/ s; O7 h) F9 e) S- j
4 P: \; N3 f* t- void setup(){9 q9 f G" o7 Y
- lightsensor_6.dWrite1(1);7 w( X7 a1 F* @/ U% Y
- nPower = 160;, A2 P% ^" D7 P3 g$ p/ R
- Error=0;* O* e9 d+ O% W2 ~- B6 i
- ErrorAcc=0;
1 V, S3 H, y5 ~5 E4 P - }) d* o V* u: l
/ u, H* [, q) {3 u! Y1 E3 E3 ^- void loop(){$ G- V9 b# w4 }+ H
- unsigned long StartTime = millis();+ V7 e1 k: D+ h& J
- if(ErrorAcc < 18000 && ErrorAcc > -18000){4 A; \1 v0 c m' }7 m
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
6 F, l6 ^) \ P - ErrorAcc += nError*Kd ;
\) @$ }% p! `0 M$ q# d - ErrorDec -= nError*Ki ;, G/ }( r" C! M1 `
- Error = int(nError*Kp+ErrorAcc+ErrorDec);$ b7 H: ^. V J" a) W" n4 T$ `& I
- if(nError < 80 && nError > -80){
" c; v: |% P1 p7 H5 O, G1 S1 Q - if(nPower < MaxPower){! _" n; `. I! F2 D) D* E/ Y
- nPower += 3;
" B' O' j2 p4 [ - }" d4 V5 M+ o. @" A4 W
- } else{
: d+ U7 u" R4 ] - if(nPower > MinPower){
3 q$ T- c. o; I k, K! L7 i - nPower -= 2;/ z+ S6 e$ v/ W8 f
- }
* _4 _6 l( I* y. A4 `0 a7 L - } 2 n9 K* P& M- J d9 q! m \
- MotoL(nPower-Error);
3 z0 b/ ~7 o0 e - MotoR(nPower+Error); 5 p/ L/ P, v; F- r0 b
- }else{0 f& M3 S0 a! |4 ?
- motor_9.run(0);+ P/ F5 r( }( H" P4 V. u! ~, z
- motor_10.run(0);3 \+ J T0 Z3 y D9 u
- }* I! {( C5 g) I% a4 t2 j; ~
- do{}while(millis() - StartTime < interval);1 {+ r3 R# K4 S6 N" t9 r5 {
- }
. o/ A) p2 C3 F0 ^7 d
% g. s: \4 v. E7 F2 d. b0 L- void MotoL(int Power){: K- n6 c- p# F* b1 X+ R+ e3 S
- if (Power > MaxSpeed){
& L! b2 G( }7 }& u* b - Power = MaxSpeed;
; ?* R& M+ U! d# k! e+ v& @ - }
- q" E4 s: R+ d8 V, b$ [ - if (Power < -MaxSpeed){
0 K j, T( C6 h6 S8 z2 b. O) ^) q - Power = -MaxSpeed;7 a2 g7 J2 l4 _% i% V
- }
0 G/ X4 `" u# V - motor_9.run(Power);
+ [$ x7 f& n7 O6 L. @! M - }
9 c0 Q4 a9 y- C; U# D
8 q% K# z/ o4 ?( E7 u+ w9 r- void MotoR(int Power){& H- j. W4 z8 i4 U# y
- if (Power > MaxSpeed){
, g4 k, P" R7 f6 F0 H: v0 [ - Power = MaxSpeed;9 t/ z' M4 t% r: E/ R# c
- } : v9 b& T( c. k( s$ c% ], f1 w
- if (Power < -MaxSpeed){" V: F- z2 W0 {6 v
- Power = -MaxSpeed;; N0 [) s. P) w* ?
- }
: C) n# j) M/ ]5 d' G) Y - motor_10.run(Power);/ O; r. \7 U1 B N' U- b: `- ?: S: D
- }
複製代碼
# a3 o B. \5 q6 O" R0 N8 y) S0 j+ `$ _
|
|