|
|
- #include <Arduino.h># y& @3 Z& V& j2 H$ N" [' I
- #include <Wire.h>
% h W8 r4 A: {5 y0 k! w4 z1 \ - #include <Servo.h>8 P/ R3 W4 S8 z/ p% G' D# l6 _
- : w2 s( t! i' O# H0 X2 q: m7 e
- #include "MePort.h"
( O# k+ i$ r8 ~0 |4 {4 r- @( s - #include "MeUltrasonic.h"
j0 c" i1 r% R% j8 e - #include "MeDCMotor.h"
+ x* N, [& S% v3 Q - - z$ W7 o2 }+ N% M! Q
- //double Input, Output ;
8 ~ \4 T1 u4 C- y* n9 b - float MaxSpeed = 255;
2 s& Z* V- c$ }# T8 | - float MaxPower = 180;8 k$ ~4 d+ y! _2 x- @$ B
- float MinPower = 120;& U; e7 }+ f; {: R8 G0 U. W
- float Error,ErrorAcc,ErrorDec;
) y2 k+ a* u/ N - 8 j9 G- i! C3 R
- float Kp=0.14;
) h9 g& G/ h. C% v" s$ K$ K - float Kd=0.00020;//23;
8 Y9 |* x$ F) P4 a0 }& ]1 I" H1 v - float Ki=0.000201;. N8 t( F9 G( q# q1 _! [% o
! `8 Y" ~: i* n& J, V# E6 L- float nPower;% e6 r: u" y! B7 o8 v
- MePort lightsensor_6(6);& g- t" c" O9 h; B8 k9 P$ I& f2 O0 d0 d2 i
- MePort lightsensor_8(8);
) }/ X3 l5 {+ I" q - MeDCMotor motor_9(9);" J; y( |! J, s4 ~
- MeDCMotor motor_10(10);
# T5 U0 g; J+ _$ o - unsigned long previousMillis = 0;
* l" v: [& g$ D& O* I4 z - const long interval = 1;
; R8 E; y8 ^3 }- \/ y' r; Y, E
. d- m9 i& O* v& j" ]- void setup(){
) G3 V4 W" W6 E - lightsensor_6.dWrite1(1);: c2 l3 `9 U9 X+ h6 Y" @# M- }
- nPower = 160;
9 n. D% L2 H4 Y0 w - Error=0;
1 H* T y. F u; L- D - ErrorAcc=0;
' N7 t2 `. A N# ]+ m6 J - }
/ m$ |* C3 t% i- M1 A- ^0 j
! _2 e1 b% E1 Y8 q) t: A% Y' V! z6 V- void loop(){. j2 C( ~; }0 c
- unsigned long StartTime = millis();
- V# u3 g$ r; w. e5 k - if(ErrorAcc < 18000 && ErrorAcc > -18000){
+ {3 v1 h, }' m, J! I R% V" Q) _ - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();8 J5 k+ c% A5 E" g
- ErrorAcc += nError*Kd ;
. s6 `4 l1 C! {3 B7 i - ErrorDec -= nError*Ki ;
) C+ [* i5 H2 C9 L - Error = int(nError*Kp+ErrorAcc+ErrorDec);) A3 _, T: i; a2 h
- if(nError < 80 && nError > -80){
: r/ M* t$ W* e* _9 Q - if(nPower < MaxPower){, U: O, l% B. V7 k! i. Q6 b
- nPower += 3;0 ]5 H- H: o! Y, V4 o- w. Z# l
- }# K. E" j& U- e G
- } else{
* a# O: O/ q( D5 C5 Y - if(nPower > MinPower){. a3 [, H8 S& u1 r
- nPower -= 2;
* f8 }0 X) i4 f+ m - }
6 W" U+ M4 @. W7 r, X% a4 ]6 D - } 3 `) {* J: b+ Y3 U
- MotoL(nPower-Error);
+ t% E$ `/ a& j. b+ j B3 _9 b: \ - MotoR(nPower+Error);
2 c8 I# Y! \% P; V - }else{) m, g2 d) m7 h+ j
- motor_9.run(0);. a* G0 A) m7 o& K
- motor_10.run(0);* y' r+ w6 {# l1 u) \5 b1 Y) d+ @
- }) e8 G/ } E7 P4 W
- do{}while(millis() - StartTime < interval);
, W3 o5 l# o% g% S - }
6 e) T. j- ^: l2 f; V3 h$ ?7 n
+ c, G3 W9 J- _0 ^( O- void MotoL(int Power){% g% E+ { ^2 F
- if (Power > MaxSpeed){
- e; Q3 L0 ^$ U9 H7 I0 J( @7 w) D k - Power = MaxSpeed;" E% l, v* I/ w
- }
. _( O' g# Y9 n' I/ ] - if (Power < -MaxSpeed){0 o! k/ M( r8 h+ B
- Power = -MaxSpeed;. {+ m9 `# U6 r* Y- G
- }
6 l. L) \# n# c% F) t+ z+ V: r" E - motor_9.run(Power);3 e* K* Z& b9 s+ a' [$ \& u
- } ( q- i) |$ v! N+ b( |
1 j3 y/ ?' K( J& m- void MotoR(int Power){% i" |1 e, W t6 h' k" P0 u8 _6 s
- if (Power > MaxSpeed){
* X; e$ o) ^' Y" k - Power = MaxSpeed;4 l8 I- E$ @6 i, k( W1 E( |
- }
, N- D: `) [! E5 _( b' P - if (Power < -MaxSpeed){
0 Q3 l$ @, N7 L; v2 m! e% Y* ^ - Power = -MaxSpeed;8 m( @1 e1 `' m
- }
6 q" `8 A% q8 P9 a# v4 A& g: S - motor_10.run(Power);
: j) H4 S S) y* Z- f2 ^4 h/ q - }
複製代碼
; z, a5 i3 [, f7 h! ?( Y9 R/ N. p( Z4 }: v0 [
|
|