|
- #include <Arduino.h>, M: Y1 S( h3 H! q/ H
- #include <Wire.h>
s! Z1 W# [7 w4 S9 U: s - #include <Servo.h>+ [. x( s! g u7 ?
' C3 |% v9 r9 @2 t U- #include "MePort.h"
/ ?# c1 h$ L6 t: \ I6 ~. ` - #include "MeUltrasonic.h"
: G; j+ {' `- M: E% ] - #include "MeDCMotor.h"
+ d6 F9 i& }5 Y6 p% u; W* k
s9 P! q r. [4 Y# T3 s' E- //double Input, Output ;: T" F a A L9 n9 h8 V% A
- float MaxSpeed = 255;# \) N3 \( P" e+ {
- float MaxPower = 180;
4 z/ [% I) m# ?% P( S. i- B7 I& E - float MinPower = 120;
9 @: y8 ]' s/ v, D4 D; u J - float Error,ErrorAcc,ErrorDec;% K- x/ Z6 \- v `) G+ V! n
- 0 u# W8 [7 ~4 e
- float Kp=0.14;
# _5 \; O% I4 [8 r5 f. X, F - float Kd=0.00020;//23;
9 F; o1 ]! r6 K, ]1 A0 p+ r - float Ki=0.000201;( B% l) d- y/ f/ A$ Y; a d; A
- e+ K5 ]4 v# A: {' Q
- float nPower;- u. L, M+ v* h2 A- ]8 g. d
- MePort lightsensor_6(6);
# t/ O6 j6 K/ f7 R8 H B2 F - MePort lightsensor_8(8);
' G) V8 f/ T! N. p& g) f - MeDCMotor motor_9(9);
" C0 [% c( m7 l6 W/ H - MeDCMotor motor_10(10);' |/ G( A2 |+ z* @' G" r
- unsigned long previousMillis = 0;
?! w# O- e* w# J - const long interval = 1;; H6 r3 U# U, q+ {$ R4 K
- + a" [! z* m7 k; P; @
- void setup(){) l: w/ t7 `% r5 j# V- i
- lightsensor_6.dWrite1(1);
I% k1 |9 O+ g! g* ~ - nPower = 160;
0 q/ X3 w" F }2 c7 z - Error=0;4 O: s' X B6 H6 E
- ErrorAcc=0;. \$ k( E7 W0 \- n$ E, l
- }
* m: j0 K3 a$ ~' \, r
$ u3 X) X5 U% m- void loop(){- e, `3 Q1 C% X2 ^
- unsigned long StartTime = millis();" h( D- m$ Z/ Z$ B5 p
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
% N2 h8 l) t/ p [ - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
0 a2 i5 p6 k2 _' e. e: H - ErrorAcc += nError*Kd ;
3 x! w- L6 P- M1 e3 ~! l; I3 A" p - ErrorDec -= nError*Ki ;1 {+ g# T5 B J
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
Z4 r4 [# X% K7 T, G8 O8 R5 r- k - if(nError < 80 && nError > -80){
{- i# B( [% m4 M - if(nPower < MaxPower){
) x6 r+ x2 S6 L: A; q' Y- t1 J* P - nPower += 3;+ i2 b) Z8 K7 k4 b
- } e0 a! e0 m' _( y6 [
- } else{' V( d$ x% E; t4 K/ x4 h
- if(nPower > MinPower){
( x# r3 z/ m Y - nPower -= 2;
( C* s' v9 {: m" C7 D - }, `+ ?( ? E: d: V, v
- } 0 ]* k! D( S7 H
- MotoL(nPower-Error);
* ~, o+ r7 S* _! b( ?/ y! \ w - MotoR(nPower+Error); 0 r2 K: C6 B" P! h2 r S9 z
- }else{; ?+ K$ ?& w* U% K
- motor_9.run(0);4 ~. J F7 K. B: j' o7 Z
- motor_10.run(0);, y, [4 i2 f- a" w+ K7 E) s
- }6 D0 M" C5 E2 `' G
- do{}while(millis() - StartTime < interval);3 O6 X8 f. ]- m- @
- }
: r1 F9 S0 N( Q7 B1 U+ k4 f - * _& ^7 G* F4 j
- void MotoL(int Power){
9 v* q; ^7 t( s2 b% U; N) B - if (Power > MaxSpeed){
. n4 g+ Q2 G' b+ B# x - Power = MaxSpeed;
T! h% k% _! q& s - } : l' J( L; R. N2 b0 ~2 f ?1 z7 X
- if (Power < -MaxSpeed){& n, Y; Q$ l6 r2 N% o1 [
- Power = -MaxSpeed;
4 Z% ?6 s, `6 L Y( [" Q - }
+ f1 x+ t5 |# _1 F4 v! A - motor_9.run(Power);, q7 {- e& B0 ^
- }
# t6 K0 P+ y" f& F/ W - 9 v$ v+ y9 P0 B) t9 j
- void MotoR(int Power){
! t9 z/ a% d1 g' Q2 A' j" {& i - if (Power > MaxSpeed){! ?/ I& o/ U; t% k" z$ L9 W
- Power = MaxSpeed;( m+ {9 F" M- E' b
- }
& b7 y0 ]: s" D2 o4 \ - if (Power < -MaxSpeed){
3 h8 s9 t5 o) z, d7 O; T - Power = -MaxSpeed;8 N- ^- y n- |4 Q* s( f' ?
- } 7 }5 C! ^7 ~' E/ G0 ^
- motor_10.run(Power);, ]1 x. p1 G/ P& L# e, t) M
- }
複製代碼
( i) [1 {; M6 H+ a& l5 _# S1 H7 B% D9 ?% s: n
|
|