|
|
- #include <Arduino.h>0 M; l0 I2 H( }
- #include <Wire.h>- {$ V( \ G2 [
- #include <Servo.h>
' A7 p) P! {) D8 @0 j
# X( X( Q5 }8 U5 D- #include "MePort.h"
& h& r5 d+ [7 B7 t5 @9 Y# p - #include "MeUltrasonic.h"
5 o) C) Z' n9 z - #include "MeDCMotor.h"6 N! T5 a, L5 S* J# y
' ]3 E+ i+ @5 R- E3 a& @- //double Input, Output ;/ Z8 R; ^! \& B$ z$ o- j0 f
- float MaxSpeed = 255;0 t" s& z! O) K9 B: K, i
- float MaxPower = 180;
/ l2 R9 f4 k9 V/ H$ J% b3 `; O, C - float MinPower = 120;2 k. R" [. H+ Y5 m) y% B
- float Error,ErrorAcc,ErrorDec;
. I9 N' s7 w. D& k: P/ f - 5 w- r5 P4 _% H8 O7 b) S3 I/ @
- float Kp=0.14;
7 B0 }' }: r' G, N: W - float Kd=0.00020;//23;
/ U4 h4 V: s/ N) b5 j& P - float Ki=0.000201;+ e$ x$ N( d) @' M ~6 W
- 8 L( z; R' R; \5 r6 Q
- float nPower;( Z( v$ U2 Z( ?/ T5 D, q
- MePort lightsensor_6(6);" p+ p$ Y. Y' P9 ]1 G5 A$ Z! C
- MePort lightsensor_8(8);
, o& e! W$ v, M7 i) Q. S( _' H* K - MeDCMotor motor_9(9);
4 ?3 C) \' W9 ]1 P/ @2 ]5 X - MeDCMotor motor_10(10);1 S# z& Q" [; }1 w+ N
- unsigned long previousMillis = 0;. t. p" x. H6 B
- const long interval = 1;
: a, ^( y! O" U; y& E - 2 {- z3 C$ h3 |/ i/ m5 \
- void setup(){; q$ P+ l, J& B7 s
- lightsensor_6.dWrite1(1);( g; U8 t6 W4 N/ Y1 D1 P
- nPower = 160;
- ^6 ^+ x3 `9 `) B: L8 B - Error=0;
9 [+ m4 t& y0 [* H7 v- \% B$ } - ErrorAcc=0;$ [# I, N6 z9 ~# f3 a8 M
- }3 n. `; X' G. h; U% j3 B+ l% L8 g& v
5 o& C0 A& A" Z) |0 u. v" z/ }* h! o- void loop(){
9 ]/ S$ @: c# W4 S - unsigned long StartTime = millis();) G7 r2 a# U! L$ B
- if(ErrorAcc < 18000 && ErrorAcc > -18000){0 X' g% Y1 _4 i% j; I. Z0 s
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();0 G* S8 }+ W* U6 Q5 y
- ErrorAcc += nError*Kd ;7 W+ d0 `1 t9 ~9 C- g9 [7 a
- ErrorDec -= nError*Ki ;
- B1 E2 x: X! d! O# q- ~* N - Error = int(nError*Kp+ErrorAcc+ErrorDec);: c/ X) Q. O9 R9 ^! v& p
- if(nError < 80 && nError > -80){6 U- v3 s% T- ~( h3 e5 ?3 Y
- if(nPower < MaxPower){
3 ~0 Q2 h8 v+ Y/ h - nPower += 3;) I- o& g* g. u$ G# x
- }
4 L* h' n/ P k/ X - } else{
* G' s. i6 |+ n3 ]* N8 C6 ^5 y - if(nPower > MinPower){
5 v' v7 M0 O: I# x9 T! y' H - nPower -= 2;( Q. |7 ^5 E% m ^1 o9 ^
- }& F9 N9 }, E$ P8 v
- } / P0 q9 J5 j8 Q/ T+ u
- MotoL(nPower-Error);
3 { w' F+ Y7 a' q$ D3 J - MotoR(nPower+Error); : _& @+ h+ {. H" Y
- }else{
/ Y9 Z5 r4 c! U7 \2 P" m - motor_9.run(0);
( Q, t: E( ~( V/ q3 D6 Y- ?& g; _6 b - motor_10.run(0);7 D; o5 O1 T7 G
- }3 N0 m: A6 W" J, o
- do{}while(millis() - StartTime < interval);& ^ x8 o9 `" t; z9 o# O ~( A
- }
/ [( Q! A4 H$ @" m1 q! t7 Z
# L5 i" V7 U# U; h9 i: n& [! o- void MotoL(int Power){
! d+ h) z/ ~ |8 R - if (Power > MaxSpeed){
( h* O5 H+ Q; h4 y6 ], A* @ - Power = MaxSpeed;
$ g; A! a, B, ` - } % z; L- h6 v) L. p9 ]8 a: Y
- if (Power < -MaxSpeed){5 x6 z( Q4 C+ _5 X
- Power = -MaxSpeed;
/ Z) M2 I# I$ w- _ - }
- a7 B# O* ^1 t9 C4 k5 J% w! x - motor_9.run(Power);$ z2 f% T: o0 ]7 s
- }
# Z" g4 S- x, M3 I* n
9 T' Y5 l1 q8 W- void MotoR(int Power){
* W; b# X# h8 ~ \7 B - if (Power > MaxSpeed){2 ?) U7 y* i9 O2 Z1 [
- Power = MaxSpeed;, ^) ?. M" b# D* |9 |
- } * I( p) S1 j; r' E: r
- if (Power < -MaxSpeed){
4 S w% b. T5 ]- q) X1 S - Power = -MaxSpeed;$ ]( I- W; V- l
- }
' Y# w* Z d. p' J3 M2 \# g - motor_10.run(Power);
( t5 r/ d2 I' G$ C( V0 S! f J - }
複製代碼 ] g" ~# V# p0 K8 q
! J7 I+ @) J9 c0 I; \
|
|