|
|
- #include <Arduino.h>% f1 i X2 P' y) q3 ^
- #include <Wire.h>
' r' A1 u7 J8 F* w - #include <Servo.h>
- B8 `' s! f; M$ G: D
1 ?8 N& k7 h: }8 _ L- #include "MePort.h"( ^1 G3 u* ?7 x$ N$ ~, x+ j
- #include "MeUltrasonic.h"3 M4 j$ Z4 t) q4 }8 z
- #include "MeDCMotor.h"
6 J6 N2 s! T$ Y/ j/ t n3 [. R% a - " c; C% w( V9 a9 b( B/ q
- //double Input, Output ;$ `$ A' s. x6 u/ ~! F
- float MaxSpeed = 255;* H' ^: S, }0 N: o5 o
- float MaxPower = 180;5 N/ S8 u+ j. Y/ J
- float MinPower = 120;
6 a+ C2 p$ s! Z* Q% J4 k& F1 T0 ? - float Error,ErrorAcc,ErrorDec;# A! ~0 h8 \- ?# u3 k2 d8 j
6 s5 g6 ~* ^0 y- float Kp=0.14;) B: ]( f$ Z) W: I5 d. K/ R) {
- float Kd=0.00020;//23;2 S( P5 |) y; y! ^ k1 h" w
- float Ki=0.000201;. [# \3 G, C/ p$ r7 c* Y; _
- * Q: n/ Y& H, d% i8 k
- float nPower;* _: J, x% A0 o5 K1 v
- MePort lightsensor_6(6);, u, X3 g5 G2 `" x& \( \# A% |0 p' H7 R
- MePort lightsensor_8(8);* x, J9 o; C: {+ M5 d
- MeDCMotor motor_9(9);
; F5 M9 i* k) Z2 R3 e8 j+ x - MeDCMotor motor_10(10);
+ ~( S5 q; ~' L3 x' h- b - unsigned long previousMillis = 0;0 g3 j4 J E/ {& Y/ M
- const long interval = 1;
- E6 D- `; ]( G" l, i9 F1 N+ i
1 b d$ ^# _/ ~0 d) [ F9 ~- void setup(){9 p5 b. V- o( u
- lightsensor_6.dWrite1(1);4 S6 W) L: {3 t D
- nPower = 160;
& ~9 i3 V2 X1 R2 t% F7 w - Error=0;
% S) w s$ U a6 T, W, _4 e4 g6 M - ErrorAcc=0;' J/ z5 J& m8 H( U% p) }
- }% X# E0 s1 L) U B
- ( t( a) \. E! f5 g, w0 D9 N% O4 R
- void loop(){; n# w& x8 f! D1 B
- unsigned long StartTime = millis();9 C) @: | K- y% g6 ^9 D
- if(ErrorAcc < 18000 && ErrorAcc > -18000){# N; }3 ]9 z2 M6 u! b9 M& H
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();- `& m( p7 P2 e4 v# U; X4 [! G
- ErrorAcc += nError*Kd ;
8 L0 Q) D% h$ d - ErrorDec -= nError*Ki ;
1 Y( ^0 _0 k p2 i$ a6 S6 [, Y - Error = int(nError*Kp+ErrorAcc+ErrorDec);# U% X9 s/ I; T) ~4 D
- if(nError < 80 && nError > -80){9 w1 [% T1 v _- X
- if(nPower < MaxPower){
& I8 Z; X& W; i$ C0 B* M# y: Q8 y& T4 [ - nPower += 3;
# N! d% S7 o1 ~4 V& d - }
4 I6 i( r$ L) r! `# b1 |. H6 R2 C - } else{5 p% v7 v9 V+ ^9 F) c
- if(nPower > MinPower){- m7 ]! R% `" ^5 J
- nPower -= 2;7 k1 m! t! D6 Y) t" J3 h6 f: I) B
- }0 X3 t6 h( L& n
- }
# N+ c+ d: {5 r/ O - MotoL(nPower-Error);: |% p4 z* a9 u3 o T
- MotoR(nPower+Error); j/ v7 T: k Z' g& {/ J( F4 h
- }else{
7 c1 g( D6 A, y; c! R& H - motor_9.run(0);. n1 A, p& X# ?) P6 d
- motor_10.run(0);
2 W3 C3 ?" O. j% v j - }/ a& d, S% c. ]
- do{}while(millis() - StartTime < interval);
5 V+ [2 C4 L( K5 e9 }4 x2 Z& D - }
( q4 y8 A) R% Y- l5 ` a - ' N/ G k* h% B& M8 r( B5 Y
- void MotoL(int Power){0 O0 s! @ U( y* w& Z) Z
- if (Power > MaxSpeed){
7 h# A/ }, @. Z* R3 a - Power = MaxSpeed;# @( b$ J: Z d/ C% _; I
- } s. ^ \6 a* n
- if (Power < -MaxSpeed){
, j9 f; y' t5 V# M9 o2 R - Power = -MaxSpeed;
* R( q7 r, n+ T$ s& z$ h- X& w - } - \* r6 v1 P; k, c2 l6 E
- motor_9.run(Power);% k$ L6 b) D7 w* [) f5 ?
- } : K: D! p9 t# g$ R- j/ q
9 l( v! z/ L: ^# _4 B' }4 R- void MotoR(int Power){0 ?; I4 P' h, l2 n
- if (Power > MaxSpeed){
: ?( y/ {- F6 U3 I( c - Power = MaxSpeed;
/ Y" K* B" z* R' B& l - }
: H: z# `) N; _/ S4 x" f - if (Power < -MaxSpeed){
& f2 m/ P) W7 \& t8 F7 w( f - Power = -MaxSpeed;
) u" a0 p3 k) ?9 B7 K - } 0 u" _; s& Q, j' _1 N: F1 c% i; o
- motor_10.run(Power);
: B' n+ V( m, I% t) L! X - }
複製代碼
" X. K: }, S/ |8 s' P: b! n% e6 w0 @4 F+ E; j0 _% E+ M" h0 Z
|
|