|
- #include <Arduino.h>
* V- C" Z$ V5 f( C* P3 G - #include <Wire.h>% [: f+ Y; w$ L) i! i
- #include <Servo.h>
4 s" P9 j; {, y7 @ - 9 L& Z8 E, Q# `- \+ @8 p/ Z1 [
- #include "MePort.h"
* b1 r: Y4 e" s: E9 e+ r1 q - #include "MeUltrasonic.h"
4 }4 Q& L$ O1 _* k! K - #include "MeDCMotor.h"
- ~5 i/ \/ S$ o6 @. ~
) ~* b U' M8 a/ f+ ~- //double Input, Output ;
" c2 t2 }3 C2 U. x - float MaxSpeed = 255;
! L7 [ }. \: u1 D( t& K - float MaxPower = 180;' k+ X7 C: J( {
- float MinPower = 120; f5 e; a2 H5 c3 T# h5 I
- float Error,ErrorAcc,ErrorDec;. k5 @6 i& |+ a) V- w8 C5 F
3 ]% S- Z2 p% _* W0 L- float Kp=0.14;: u8 E( l. l9 @9 z O
- float Kd=0.00020;//23;
) u- F$ k$ c6 d" ~& I/ Z5 C - float Ki=0.000201;. g+ w2 m2 v; x9 Z' ^
0 X/ s& M0 V! X. N6 t! b- float nPower;
5 e" w r, B, L1 N. c* G - MePort lightsensor_6(6);
' u/ y% V1 u9 ?8 P* c/ c - MePort lightsensor_8(8);& j4 |( z% p( ?+ U$ b- V
- MeDCMotor motor_9(9);
( C" P: k7 |/ |3 U- S, |+ c1 N - MeDCMotor motor_10(10);' U- {; B- E `( I0 i
- unsigned long previousMillis = 0;
6 l% _# M' y0 m* Y3 `1 U J - const long interval = 1;
+ P7 U* a( D% \/ E- Q& M S! R3 ] - 9 a Y6 L+ G. m Q! W
- void setup(){
) B+ D; Q1 m% y0 v7 H - lightsensor_6.dWrite1(1);- I0 `/ a1 X6 e
- nPower = 160;1 t Z5 z$ S+ R0 K( w# K
- Error=0;
; u# z1 k/ R0 Z% T - ErrorAcc=0;% t# O- s) U1 ^, j6 @1 j
- }* _: ^1 m Y! l k ?
- 5 H0 s& u# a! y7 W7 N. {; K
- void loop(){
0 z9 {/ H0 d2 l N - unsigned long StartTime = millis();
. m0 [2 i$ y0 T2 G' g+ p - if(ErrorAcc < 18000 && ErrorAcc > -18000){
, I. g' w/ _. K- X9 j: _ - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();, G) @' r' Y1 i+ H( }+ r1 t
- ErrorAcc += nError*Kd ;9 y; P) N# z5 C3 W1 _' W
- ErrorDec -= nError*Ki ;8 |# ~/ f% N3 ?+ V d3 h7 {9 k
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
9 f0 h% X2 M! ?; c; x - if(nError < 80 && nError > -80){" ]" Q0 z% x+ k
- if(nPower < MaxPower){ N8 n" i6 c9 V* d s* w' v7 A
- nPower += 3;; L! M8 n( D# K5 H+ O }( C
- }( z1 G# r6 A6 v+ q5 k! A' E! }
- } else{
6 l# k7 @- t* G2 I6 K* v) m& q# G - if(nPower > MinPower){) H; C, I5 I+ m$ e( B
- nPower -= 2;
, x$ u, [& w! j: ] - }, Z; T: |" I2 O8 a/ E
- }
0 d" G. w( F$ J" e6 Z- r - MotoL(nPower-Error);" G' b% ~* s& V( K
- MotoR(nPower+Error);
( x# y+ }$ ^* \- L# \ - }else{
) C& t1 j' K* \- M' ~3 i - motor_9.run(0);
: l& R9 p+ W( K! _3 f - motor_10.run(0);
0 T, J& p R- k1 I. {! t( b - }
% Z, K* \7 X/ P( p% u - do{}while(millis() - StartTime < interval);* Q- H6 P: ^0 ~0 A3 Y
- }
. q9 ^8 U2 K* P8 [- {( \ - 7 q, x- K9 i9 r# u; W% ^
- void MotoL(int Power){
3 J9 \6 s8 [. k' y8 L! p# _ - if (Power > MaxSpeed){* j$ X8 c9 Z7 B7 P
- Power = MaxSpeed;
3 r! `. u. E3 I. o5 |3 S - }
; G: I" `$ {6 q& ^) c* \" X - if (Power < -MaxSpeed){3 {) p) ?8 S) X; L/ P
- Power = -MaxSpeed;
1 }# H5 ?- \6 x4 m( k5 \ - }
2 C% _6 d j" u J% w4 E - motor_9.run(Power);6 R( z0 z1 a% H% t) J/ k5 s4 ?
- }
# g8 r- ^* H8 F5 Q - 7 M, K3 J/ b* u4 M
- void MotoR(int Power){7 u& H9 E" _) x' i# m' |
- if (Power > MaxSpeed){
/ \2 x1 D/ [/ }4 u9 B0 g6 z) b3 a - Power = MaxSpeed;$ z( X( s/ n+ i D% h6 g
- }
) K# C2 w9 m4 _% R - if (Power < -MaxSpeed){
+ O& {: q! Q. Z+ H6 B: h - Power = -MaxSpeed;
! g. T# b4 d, z( l9 w - }
6 L6 @/ d2 Z6 h5 s: a& } - motor_10.run(Power);
& N B) F u+ [+ k$ J# E - }
複製代碼 # f3 c& V' G+ R$ Q! \1 {
- N; ~# A. ~! X6 J0 a ~
|
|