|
|
- #include <Arduino.h>
8 W2 q9 F* B3 N( A1 L - #include <Wire.h>
5 q* u" N' c! C+ J6 E - #include <Servo.h>
5 @* x6 o8 Y' r' B/ K% D - 2 S4 w* d% q9 D- Q4 n2 m
- #include "MePort.h"
{* t9 A) r- v9 N' P" B" K - #include "MeUltrasonic.h"
& M0 E, x/ M' @; K5 \ - #include "MeDCMotor.h"
" e2 W! u- d& t; U - - d( R4 B9 Q2 Q. n" J; f
- //double Input, Output ;* y% l }2 _8 l+ w
- float MaxSpeed = 255;
+ r: `& i6 m! J% I/ h" M: |2 d& o5 s - float MaxPower = 180;2 h9 d. u1 n2 ?6 y
- float MinPower = 120;, c$ K, A# v. f0 \& a% e* k6 w
- float Error,ErrorAcc,ErrorDec;
) j/ c& n! @$ }6 P0 G/ _
; \9 u @2 T- ?) u2 J- P6 d, j- float Kp=0.14;
8 L6 R: }4 v" s% l, |/ u1 L - float Kd=0.00020;//23;
. w& c/ y4 z6 v$ ~! v# r) [& T9 R - float Ki=0.000201;
9 g5 ]5 H* _: ?
\' j" q! V0 k* j9 [/ |/ |; Y- float nPower;
/ O4 F# L6 F- C, r p7 }& X - MePort lightsensor_6(6);
" B m$ V6 v( Z - MePort lightsensor_8(8);
" a& D, M! i0 _& T$ M5 E; q1 a' Q6 H - MeDCMotor motor_9(9);
+ U; n) g( r" _" P& ?9 i6 i - MeDCMotor motor_10(10);
; G; c4 ~" U# [3 q; D - unsigned long previousMillis = 0;
+ ?2 [/ n+ D" }# c5 g4 U - const long interval = 1;8 v+ Z5 f. |9 A* P' @
- 3 |; `; U2 A" ?) s. x( j
- void setup(){' P9 O0 K4 R5 i0 \1 W2 C' p
- lightsensor_6.dWrite1(1);7 Y0 ]' L1 r% L; U& @* `' u
- nPower = 160;
4 u$ s1 ?# a$ C - Error=0;5 w( ]4 ]6 s! A! i9 R! d' A
- ErrorAcc=0;% s" h. c6 U' Z# K& k1 d
- }
4 q# |8 x0 n- R' W0 F; ^
1 r5 J9 M, e7 Q8 Y- void loop(){! n- ?; n2 r1 T3 g0 ~
- unsigned long StartTime = millis();7 B( H; q6 ?/ q
- if(ErrorAcc < 18000 && ErrorAcc > -18000){1 ~" \- @# h* X4 T8 [
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();. W7 e6 \: w' f% O
- ErrorAcc += nError*Kd ;/ N$ h6 G7 r+ F6 c
- ErrorDec -= nError*Ki ;5 J/ Z7 H# k1 l R
- Error = int(nError*Kp+ErrorAcc+ErrorDec);, X- e# |# {& o# b$ \4 ~
- if(nError < 80 && nError > -80){( b8 a3 v l0 b
- if(nPower < MaxPower){1 K2 x" D! I8 D9 y/ p: m" n" V
- nPower += 3;
1 `6 f. I& B" T3 b( r - }. m# Q y( `7 _- p
- } else{0 o' E8 t, S! ?: M' V
- if(nPower > MinPower){2 w+ k b N; `, W) a. v" L
- nPower -= 2;3 l( _* b9 D/ Z/ k4 u( s
- }
+ c( v# |3 s; _7 E+ d/ i - }
. }* S& `8 C" x" L2 k0 ` - MotoL(nPower-Error);
. V. e4 r$ a9 i1 o; }# c$ e - MotoR(nPower+Error);
9 e o- I& Q8 n - }else{
) T$ E: E1 H4 U4 E% s: e m7 q2 d - motor_9.run(0);
7 H& [; w2 S: `- h; @, k0 n2 ? - motor_10.run(0);: H: J% P' z" _# @* E
- }
$ Y0 Q. U2 _$ _ `* \6 ? - do{}while(millis() - StartTime < interval);& E% ?9 r% j4 r* t( Z* F! ]5 n
- }
i' ]3 d. R6 G
/ A! E0 {, q2 v8 m- void MotoL(int Power){) N1 U: n) R. ~3 r6 C
- if (Power > MaxSpeed){
: H" W; b1 D1 K4 V7 m - Power = MaxSpeed;
( m$ j }1 b, q - } @2 W, _$ E6 ]( \+ y& K
- if (Power < -MaxSpeed){
( Q. b: G# R0 @% v/ s - Power = -MaxSpeed;
# ^* p }; b+ R' _. R - }
' l: p% T: Q! |5 C; J - motor_9.run(Power);- z3 @- q: M$ R7 C! j" |" d! p+ x
- } ) U; [6 g# g2 a
- ) X9 ]" K6 G) K/ m7 k* N* ?$ n4 u
- void MotoR(int Power){
, F2 @! V4 R, |+ r, }9 _ - if (Power > MaxSpeed){7 B8 E- V7 n( t
- Power = MaxSpeed;
6 v" x' y* g0 _; I: Y( D/ I - } I& Z4 k" I& M0 U: L: ~
- if (Power < -MaxSpeed){
0 @' V& l& q, {9 E, B8 } - Power = -MaxSpeed;& A' g5 M1 w9 S1 Q: {$ J x
- } 2 I& b* q1 o* N. s; s) F$ ^
- motor_10.run(Power);3 a- O, k' ?$ f9 m1 }
- }
複製代碼
, K0 b' c3 I; Z* c* `* `& B
- I/ j7 |7 y; [; E8 y9 k- H1 n" X |
|