|
- #include <Arduino.h>; A8 K" Z8 |3 b+ f) I/ G4 i( }
- #include <Wire.h>
, Y6 s" \8 M: N7 Z9 v - #include <Servo.h>
6 j. b' R2 a" X e0 s3 |2 u+ g
& A7 B7 \, q" e7 W+ o( H- V5 ?- #include "MePort.h"6 n# i8 Y2 R- R& F& @% O* B8 S- Y# f
- #include "MeUltrasonic.h"
6 ]8 l8 p6 ^+ a0 |5 n7 l - #include "MeDCMotor.h"
' W3 Q% H5 ?# ~0 N; ]5 d" U - 8 t1 v% Z0 z( k& i U0 ?/ m0 f
- //double Input, Output ;
' e5 _: H9 ~! J' `. e$ R8 a - float MaxSpeed = 255;
; y$ y) _2 U; m" Z1 ~2 O* U - float MaxPower = 180;+ ?; T( s) D, {/ p+ m( c3 p
- float MinPower = 120;
( y, y9 J: d/ }: L) ?- n( _ - float Error,ErrorAcc,ErrorDec;3 s& x' P1 z7 i' |- \. b- r
: Q- ?0 L1 ~" q( x- float Kp=0.14;2 F" E: c) q2 {4 L6 b5 k
- float Kd=0.00020;//23;
- F1 h6 Y3 L: q1 Q& Z3 @ - float Ki=0.000201;* ]' u7 a/ B9 g! V3 H" G
! M+ e# F3 s W. l% O: v- float nPower;
9 O7 r9 g. J8 s- L1 E - MePort lightsensor_6(6); |' V. E! U* e3 H. i
- MePort lightsensor_8(8);1 I5 }; z* z- s1 y: \
- MeDCMotor motor_9(9);& w9 J+ l( e1 U- r: S7 h, Z
- MeDCMotor motor_10(10);
5 U, j: k3 C- I! O - unsigned long previousMillis = 0;( J( p6 W" {) T$ [
- const long interval = 1;+ i9 o. E; |0 m; }/ P6 x8 n
+ g% ~- v6 L& L; [& o; d. ^0 x. F- void setup(){$ J! K2 q5 |- l, H
- lightsensor_6.dWrite1(1);
% L: H9 L* w, \ - nPower = 160;6 n# B! s4 C f& T' l" N6 m
- Error=0;" K# Q2 J3 d: k
- ErrorAcc=0;4 a2 m& t/ ^% v: f5 ?# d2 L
- }
0 w0 T5 K3 v* x8 x" E# m& z - * U; T+ Z6 i1 x/ w; u
- void loop(){
( s: E" A& p" p% z4 U. n8 g% f: h - unsigned long StartTime = millis();
9 I6 p+ y3 B/ O9 q6 ]$ ` G" N3 z - if(ErrorAcc < 18000 && ErrorAcc > -18000){- p( T2 X; {8 K. `. G+ D/ J. {& S
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();+ S+ X5 {" C( y+ B
- ErrorAcc += nError*Kd ;
1 G9 w$ o! P2 K9 ^/ j6 X8 R) v n8 m - ErrorDec -= nError*Ki ;
; S \, |2 N! L4 o/ |* | - Error = int(nError*Kp+ErrorAcc+ErrorDec);
; B1 z: M% q2 t% j# \7 I) J - if(nError < 80 && nError > -80){
0 f9 n- e( j" n& [ - if(nPower < MaxPower){
h2 @- s" c) s8 G, d* | - nPower += 3;/ V* H+ e, J$ s$ m, R' w
- }
: |( s5 v( ]* Z% U, n) w$ B- k& ? - } else{5 {9 W/ T) T! v* |
- if(nPower > MinPower){6 r0 A& ~( s: L2 k8 P6 ~
- nPower -= 2;
6 ^# L( L6 N: u$ a0 x6 u - }
+ E+ `( T7 K1 i' Y6 e' r H5 P' i5 v$ B - } 0 Z7 v5 S+ I3 ]3 l
- MotoL(nPower-Error);: k7 Z: E2 D! w0 v( U! [/ v
- MotoR(nPower+Error); 3 l+ A, ?' P2 c% J; n! D; W8 M
- }else{) y# o' n( _- ]
- motor_9.run(0);$ S" }& ~) Q2 G, Y Z% E+ A$ {
- motor_10.run(0); z! I" @( X3 b6 l8 @$ i) v
- }
& b9 V7 A j/ I- ` o0 P - do{}while(millis() - StartTime < interval);
5 P5 E/ I1 R5 ^; a - }+ W8 j; G) u6 m# X
- $ U+ L& n6 ^& W6 ~( a
- void MotoL(int Power){1 f: ?3 Y3 {0 v6 l. c0 z
- if (Power > MaxSpeed){
, y2 p/ i9 e) J U$ d0 T! g - Power = MaxSpeed;; M* q8 |2 l! ]( B2 A/ [# r7 |
- }
4 t2 q, v! v0 q7 Y. [; j6 ` - if (Power < -MaxSpeed){6 n- @. [) ~0 ?. D( F: z9 w! Z; r
- Power = -MaxSpeed;
q; | \" k( X) @9 j5 i1 d - }
! @# G& `" ?6 G [- K" E - motor_9.run(Power);; k3 P. n- G3 G. G# A4 J( ~
- }
) R0 ^9 V7 N ]1 U/ J' c& m
. u: D G" f+ X: x5 n0 [- void MotoR(int Power){
+ v9 `$ d8 f$ G- l - if (Power > MaxSpeed){( C' s& h% t w* z _
- Power = MaxSpeed;
& F" x3 _) [. e' G. {0 H5 b0 v - }
' t' ]$ E: F. F( b" k - if (Power < -MaxSpeed){
. H) u8 X8 d- O. h0 I/ r. O- w - Power = -MaxSpeed;
( p+ a, v7 Z: R0 h( d - }
! }6 N5 U6 D# G5 P - motor_10.run(Power);$ d5 x; _2 D" L4 r. E
- }
複製代碼
! Q+ u# H7 L. N1 s8 I+ w3 Q
! ~ _* n" B" x- f |
|