|
|
- #include <Arduino.h>
$ j; R: n' L' r% y3 x) ^4 c - #include <Wire.h>& j1 J! T1 m+ H; E
- #include <Servo.h>1 y" u% W1 e9 F: b3 o! g; F
- ( @) q0 ~+ K! v/ G% W% w$ O4 B
- #include "MePort.h"* q1 c2 ?- M* x' \
- #include "MeUltrasonic.h"
9 z! P, [4 Y' B - #include "MeDCMotor.h"2 V: k& r1 D. d& A2 d
5 O3 a( l4 n, S- //double Input, Output ;
2 M( a' \+ J) t9 } - float MaxSpeed = 255;5 W5 Q: i0 C* F9 E: q* c, `2 I
- float MaxPower = 180;
) {/ W& U' q! q' P M9 f0 h - float MinPower = 120;
! J* j" ]# j4 O0 J8 |* ] - float Error,ErrorAcc,ErrorDec;/ |* y- c; ?$ E# n$ y
) ?. o5 d; o+ J3 B" i$ o8 N0 L- float Kp=0.14;
7 P5 J a: e( n: X - float Kd=0.00020;//23;
5 x: `' s* S, V% f - float Ki=0.000201;* `) f* v* @. D Z8 I- M
- & Z; e: n- y- I8 w, a- n3 h
- float nPower;
5 k! ^; ?# s* d- s+ L: U - MePort lightsensor_6(6);* b% x) V! Z* Q4 x& R
- MePort lightsensor_8(8);: u+ c1 _4 B9 K4 b/ G0 k" Y
- MeDCMotor motor_9(9);
/ Y" x/ l9 g. ]; p4 k" F$ g) v - MeDCMotor motor_10(10);$ d+ p; f: i3 U2 e% W( d
- unsigned long previousMillis = 0;; q! @+ T, k9 v* q4 j3 a# Q- u
- const long interval = 1;1 Z3 u4 _7 ~9 E! y) P V$ v
8 A% I9 E! \' H$ x- void setup(){
1 [& Q+ u- V& B% i - lightsensor_6.dWrite1(1);/ ]6 A4 n l S2 H* X0 Y* r$ b
- nPower = 160;, `2 z8 U @. ^; C
- Error=0;
( Q; D* |% L0 \% n9 R - ErrorAcc=0;' T* z! j5 M9 Q+ P& J& _
- }
6 R$ ~" }$ [+ z! W2 R0 B9 J
% @9 m+ V' I- Z( ?* o P- void loop(){0 J0 v- Q! d, Z- r/ V% Z
- unsigned long StartTime = millis();
3 |! |, a9 g. U - if(ErrorAcc < 18000 && ErrorAcc > -18000){$ T" ~& q# ?+ X W8 r
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();2 Z& m' p8 L# n1 j9 Z% y
- ErrorAcc += nError*Kd ;3 l$ a' N& F- s& s& U3 p" P
- ErrorDec -= nError*Ki ;& M: H2 j* B$ l% j6 ~% u
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
9 V( q- n q( A - if(nError < 80 && nError > -80){: ~: _) ~) d6 |( W
- if(nPower < MaxPower){
& c9 c% O' W" c- T# k - nPower += 3;0 t4 C, f9 _ R# ~
- }
8 s: y0 M$ h/ y& x+ c - } else{) k5 h r4 R0 z! s; k
- if(nPower > MinPower){
$ |/ ~+ g. n" u, a - nPower -= 2;+ [3 `: T- y3 ?. w. q0 Y
- }
! e$ n4 E* y e( B8 t0 } - }
3 w- g' M, s* ~: o, m" H8 g% v - MotoL(nPower-Error);* ]. |& E* ]1 A0 O, b( J5 I
- MotoR(nPower+Error); , }) C8 S: s; n8 X/ p6 m& v8 f( G* Q
- }else{& j o7 ?( }+ C& r. E2 e
- motor_9.run(0);3 M( {" V- N9 g2 }- |3 h5 @- r
- motor_10.run(0);
5 ], G* }, \) @0 N! \% { - }
; r' B0 c2 s( i5 d) H - do{}while(millis() - StartTime < interval);
% H- h* n9 O g( j( k - }% c0 V" W1 V$ k1 }/ F3 Z
$ {9 ?. _, E4 d$ R D- void MotoL(int Power){
/ A- _1 k. ]% e( R4 U! Y - if (Power > MaxSpeed){
% S: w$ X/ {7 x" }( J: t9 _7 Y - Power = MaxSpeed;
# P7 W* k$ N2 ^8 \, \8 `$ T! [ - } 1 I2 w9 u9 `5 B7 h f) |. ~% E2 h
- if (Power < -MaxSpeed){& W0 x7 _8 e3 }
- Power = -MaxSpeed;
) i0 L1 N- j% J- A6 R3 g - } 3 W1 b) A% h, d- d0 C
- motor_9.run(Power);
( z: m& h/ T F. Y d% t2 J - }
" u# w8 f9 `6 q' f- y - " I# t4 q1 F% Z) Z
- void MotoR(int Power){
) w0 \0 |/ a5 _ - if (Power > MaxSpeed){+ J5 D* K+ @; x* M0 ?
- Power = MaxSpeed;: M" x; |' ?% V2 M6 {; k
- } 5 q- {; M1 h- F# z2 [
- if (Power < -MaxSpeed){/ f: _/ ^: d3 l1 z/ w
- Power = -MaxSpeed;! m5 \) Q. a9 q+ ~* u% y" [$ o3 B
- } . n4 o: Z- F- D; I2 e( B
- motor_10.run(Power);
% d7 c3 t/ |: U - }
複製代碼 : d4 ]8 z$ o: `
8 A6 z! i1 K5 I |
|