|
- #include <Arduino.h>) x6 C9 e& r+ X, t/ M6 s9 [! Z% y
- #include <Wire.h>
' u; r. @8 o% ~, w1 M# i - #include <Servo.h>7 ?4 G! e1 W `/ V- T# O
- - o+ K6 M8 b6 V6 n1 D7 p
- #include "MePort.h"
- W+ a: t! f+ p+ S% s - #include "MeUltrasonic.h"
, r. V/ y o+ @9 h# i - #include "MeDCMotor.h"' J, E G1 X6 b( D, {
- ) |9 U7 h ^. B2 ]; T$ r/ g7 z
- //double Input, Output ;2 b8 h K/ J- h" w: D& Y$ n- O
- float MaxSpeed = 255;
/ y3 j' y/ Z6 j8 u' q. O - float MaxPower = 180;0 }. [1 V u, |/ S
- float MinPower = 120;
& ]; M2 W* v2 j/ N7 {6 F2 z - float Error,ErrorAcc,ErrorDec;+ Q, u4 p7 e/ ^9 O( [+ m5 r9 H
+ z2 ^# v' Y0 V- t- float Kp=0.14;$ B; _7 T# n4 i: f& `9 _
- float Kd=0.00020;//23;9 z- g1 e' I H' g* I5 n" u, r$ b
- float Ki=0.000201;
. j* r" i; d; v4 B% m+ S8 F& T6 c
, C+ X3 p# _( k9 o* @8 R- float nPower;3 |2 g" p2 e& {7 t' \4 r/ ?
- MePort lightsensor_6(6);0 A' P8 f G+ d+ h
- MePort lightsensor_8(8);& N! Z2 I3 Q4 m6 V$ B+ W- n# p
- MeDCMotor motor_9(9);
- t* l# z; G2 I6 L - MeDCMotor motor_10(10);% X: D7 _, {, i+ W+ u( V
- unsigned long previousMillis = 0;
* u/ e. }5 K6 b - const long interval = 1;
3 s8 [4 S$ j; i9 L$ K
7 O3 z, N8 A- t! A! X4 @0 b3 V4 I- void setup(){, e: M# M! ?5 c% c7 _
- lightsensor_6.dWrite1(1);3 D) M7 v1 N& P) f. G2 ~
- nPower = 160;
9 N* v- h3 K" d9 e - Error=0;8 \+ }+ C; T5 T" z: O1 ]
- ErrorAcc=0;
3 Z9 V" Q3 O3 v3 e7 S- ?) _ - }
5 C7 m% _% l! ]9 P& H& C5 W - $ D1 @4 r$ i; Z+ n$ T
- void loop(){8 R) e+ F$ t. i& O
- unsigned long StartTime = millis();
* R# Q8 g( F5 f* D" M1 d8 W0 P8 p - if(ErrorAcc < 18000 && ErrorAcc > -18000){3 G/ B% z- L9 Q. o; r! [+ u
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();3 [2 H7 V% V) q# w8 z6 D- E
- ErrorAcc += nError*Kd ;7 Q, D9 `" r" o1 i/ g
- ErrorDec -= nError*Ki ;
% X. n) V+ B( r v# d1 M - Error = int(nError*Kp+ErrorAcc+ErrorDec);% I Q K G2 L( d1 n
- if(nError < 80 && nError > -80){& |% h0 }8 z* y( g8 ?
- if(nPower < MaxPower){: ]) j( v5 E& d. b* @
- nPower += 3;% b% J3 M8 X) P7 D$ ?5 ~
- }( q; z- ]$ g: @( B- C2 F. w
- } else{
/ S) x3 C- C3 X+ M - if(nPower > MinPower){
6 Y, H1 z( r; A - nPower -= 2;! C; I' j- `3 ?+ [
- }
7 U* M0 p7 ?6 T% W8 Q% `# C - }
* ~5 c+ `; E; @% l0 _( C1 O - MotoL(nPower-Error);
1 a6 ?5 X( z3 a, ^4 i) N - MotoR(nPower+Error); $ x/ y6 f4 r/ m ~5 G
- }else{4 z4 h( |) X6 w
- motor_9.run(0);) ~3 V6 c) J7 ~+ c7 ?4 r+ a- r
- motor_10.run(0);
* b( q7 ~& T( ? - }
) G$ }: m2 x8 F3 C6 U% B( D% L" l - do{}while(millis() - StartTime < interval);0 T2 V9 x% D l, X6 g2 \$ l7 r
- }3 G- }% D- d( n, z4 ]( r
9 l$ j# M; R* x) m1 A- void MotoL(int Power){
, v/ n* X* O# z2 o+ X - if (Power > MaxSpeed){
/ T+ d( T( O) q# o - Power = MaxSpeed;
% T, Q1 G2 P6 V" r0 \ N - } % S1 v0 e1 q0 R/ r3 w
- if (Power < -MaxSpeed){& `$ s4 X/ C% w" p) }
- Power = -MaxSpeed;+ j1 e9 S/ O5 t" v) K% J
- } ; |$ X4 f- W$ C# P4 @/ E. y7 }. n
- motor_9.run(Power);+ {3 }" F9 r' w% t+ @# ]. D* a
- } & O0 w q" z3 n+ k; I7 V1 l
- ) F& p% s# ]+ ]0 Z9 H4 M7 A4 C
- void MotoR(int Power){. k2 p; ^' Z% Z
- if (Power > MaxSpeed){, [: ?2 A( [7 w2 ?1 w
- Power = MaxSpeed;9 `; O, v& S0 o& A1 a
- } : J- ?9 @8 u% \% x
- if (Power < -MaxSpeed){& O$ ]2 P+ J" f2 j
- Power = -MaxSpeed;5 g2 Z; Z- z4 j4 K# T
- } " e, v6 |* J. Z( Q* r6 `' `& v( K
- motor_10.run(Power);
& p4 M v8 D- S; P - }
複製代碼
" |( z8 ]; N) |. ]% ^) L X% u1 i1 b3 N& N: S: _
|
|