|
- #include <Arduino.h>
0 h0 y* w9 ?5 X% Q z - #include <Wire.h>9 n" O3 [* p- ^$ d
- #include <Servo.h># [; k- l$ |: K
$ t3 q( r9 Y& p6 y5 b5 D" V- #include "MePort.h"/ X( r% k7 ]3 Q; q
- #include "MeUltrasonic.h"1 X5 M: g% n3 e8 H
- #include "MeDCMotor.h"8 E/ ~% N0 n7 J9 }( y$ ~& n, ~" j
/ A) n/ z) c. m( Q, g# H, }- //double Input, Output ;
& ]( G; A; @3 H8 y - float MaxSpeed = 255;
9 h9 \8 p+ @. | T - float MaxPower = 180;
# o/ }) ~0 A1 [; A5 K/ P" j - float MinPower = 120;
+ ]9 o) y8 j4 B* A- m2 e - float Error,ErrorAcc,ErrorDec;( j& ^5 y8 }7 e7 v$ v, _# A. b4 v0 f
3 p: U2 g; p7 c& ^- float Kp=0.14;
+ X$ z7 E# T% F4 E# F3 s; | - float Kd=0.00020;//23;/ G$ N' x" z3 I* O7 a: g
- float Ki=0.000201;) _* n) N; c9 M3 l& y4 H' |# u" M
- . K% Z9 Y: }5 ?# v
- float nPower;$ X. Z1 o: [0 n# G+ e
- MePort lightsensor_6(6);
; A4 `; ~+ A J% b$ b - MePort lightsensor_8(8);
; {0 F' j' ^1 W) s/ e - MeDCMotor motor_9(9);6 l u. b0 D! u* Q
- MeDCMotor motor_10(10);
- J7 o# f: `" ^( P9 C8 ^; p* J0 b - unsigned long previousMillis = 0;
5 v7 h) s3 M9 ^6 G: z - const long interval = 1;
) m( ^, j- D, Q) x4 ]8 {8 j9 T - 8 f, e4 Y( l4 ]% P7 d( [( {1 X1 t+ T( G
- void setup(){7 X1 f& `4 j) y, b* S
- lightsensor_6.dWrite1(1);9 Y5 @& K: t5 ~1 a9 ]
- nPower = 160;: o2 m$ z. L2 [! c
- Error=0;
1 E/ U/ L: p- u$ j0 O6 m/ H - ErrorAcc=0;9 w) {( i0 j+ } O$ M
- }
& L1 x& q: D/ C, [. \( f7 P - 8 D+ ^2 e# g* g& b
- void loop(){) R' c5 S$ r9 J7 X, X7 [& \/ ? G
- unsigned long StartTime = millis();4 |3 o2 F* R. C2 `/ l( ^' C" L
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
) L8 F4 O. K4 q& f - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
9 l4 h( d0 i+ a - ErrorAcc += nError*Kd ;
7 X% z9 m3 A0 L6 G# b - ErrorDec -= nError*Ki ;$ D/ ^# b; i7 t! Z7 U- @% P
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
2 T# c; T. P) a Z. q( ~$ Y - if(nError < 80 && nError > -80){
+ R: G; H% r; F' w9 ] - if(nPower < MaxPower){0 t E, C& m# u$ y" [
- nPower += 3;
, [# ^6 u; a U, R# N, ]8 } - }
6 b( c3 R. ^# m2 T3 a - } else{
& m/ ]9 b: `& O/ [ - if(nPower > MinPower){# {+ G/ I2 \) I3 Z/ X$ ^0 I; H. V
- nPower -= 2;9 X8 b6 C, U F+ M
- }: j) l" P1 Y- O" }0 @
- } ' j4 M, K, Y5 y! M7 I
- MotoL(nPower-Error);$ p6 n- p/ ^1 I! k( ^
- MotoR(nPower+Error); : H6 A2 @( s G6 Y A( s' J
- }else{* d$ P$ l# o3 i/ j) q8 G
- motor_9.run(0);$ [. B# s; x6 t2 W1 H; @) C, ]
- motor_10.run(0);- x+ l3 a+ Z6 C* N* B
- }
0 n5 A% M# m+ _5 g6 S - do{}while(millis() - StartTime < interval);
& W0 T, I$ ?% C8 ]" ]! V" {0 e - }
# r$ k$ O6 N# d* z) V3 G - , Y4 I/ ]) z& w& X& M9 K
- void MotoL(int Power){
- m0 q3 P5 `' E m9 l3 B( c - if (Power > MaxSpeed){
c L# @6 D$ o# m1 r5 |% j - Power = MaxSpeed;1 i4 S$ L# G0 q2 Z
- } 4 i9 e- d8 o3 R6 Z
- if (Power < -MaxSpeed){
1 @' s5 A1 Q+ q$ u. O' x: i - Power = -MaxSpeed;+ ?& X- m/ c/ P" g9 T7 o
- }
- F; _3 l H! k; S - motor_9.run(Power); _' D) g" Y; O# k. z
- } " F$ q) l$ m \8 [7 R0 M# f
- ) _7 l8 c- u+ G, N$ u- ~% G
- void MotoR(int Power){
0 X) c- \" N& ]# Q: m7 a - if (Power > MaxSpeed){
) `# x" ^0 C8 P% r1 C - Power = MaxSpeed;" j1 L- z1 K$ b& n. p3 b
- } + I- E9 M. Z/ D& E7 h' E, j
- if (Power < -MaxSpeed){
5 x1 T2 |1 ~1 A$ \' r, z - Power = -MaxSpeed;% U3 S- o* U6 c v8 U
- }
8 ^, N6 S. t$ U" m, I2 B- [ - motor_10.run(Power);# s# f: |6 |5 Z$ a Q- d
- }
複製代碼
% J$ E3 M7 F6 ]* L" i* ~3 U3 r2 c0 Y/ {: _
|
|