|
|
- #include <Arduino.h>) l/ C- b* s H/ P' W5 d( Y
- #include <Wire.h>) v: z4 o8 H3 F& `5 e/ H3 i0 W
- #include <Servo.h>
1 t6 r: X( Y+ s- ~ b2 a5 A
M, S9 B0 Q2 V- #include "MePort.h"
& d" `8 r; @9 S* [( | - #include "MeUltrasonic.h"2 u: v+ x* @; A, |( c
- #include "MeDCMotor.h"& W; ~& E3 @" N, ]0 W6 B: v+ \9 S
8 e+ c# c( u+ h i; y- //double Input, Output ;1 _( u! B3 w9 P
- float MaxSpeed = 255;
) p) t3 \! f1 o% [% j - float MaxPower = 180;& I1 G( [$ Y$ w6 H4 q
- float MinPower = 120;
; n8 z& I4 O9 N- Z) o( x+ q - float Error,ErrorAcc,ErrorDec;) j# Q+ \7 \9 I6 M- Z
% r: P8 W+ T/ f. ~ p; j$ R- float Kp=0.14;
3 Y4 c6 H: P2 D - float Kd=0.00020;//23;- a7 d6 \( Y! W5 o' _4 h
- float Ki=0.000201;4 ?7 `5 m c' \- u' c) E
- q! J" y, q- f5 S) i3 B7 y( b! Y& M
- float nPower;* I) ^) j; R7 Q4 s* }2 E$ T
- MePort lightsensor_6(6); ^5 _0 u/ x- {3 k2 U
- MePort lightsensor_8(8);9 ?6 [/ W3 E2 B/ a J
- MeDCMotor motor_9(9);
4 g, L: ^, W/ q$ a9 V - MeDCMotor motor_10(10);
$ c6 Q$ Y1 n; `! A7 b# n - unsigned long previousMillis = 0;9 T7 W9 u* C& b2 [+ }" u$ {, u
- const long interval = 1;$ R. [5 f: g0 ^! ~$ F. ]) V0 F$ ~
0 X `5 t3 d( R. S H- void setup(){2 w& `6 l% ]/ M! c& l& b
- lightsensor_6.dWrite1(1);1 i) N J. y1 b5 i! Y# e
- nPower = 160;
8 R* b3 T! ~* l& s* w6 s - Error=0;
8 Z; p0 `' Y6 [7 I2 d - ErrorAcc=0;
' w) {6 b. l! K# o - }% n9 |+ a" @% C8 d% h3 Z
- " ?' v1 b* ]' a1 I$ N
- void loop(){
8 n' Q, O6 z9 w5 b9 W, s* M - unsigned long StartTime = millis();, C, c& W0 o$ }! o
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
# ]$ j) ?7 [! ^9 W - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();7 K% Y2 H3 _# m% J& a
- ErrorAcc += nError*Kd ;- p5 K. H0 D1 J/ f5 A8 m( M. ?! m
- ErrorDec -= nError*Ki ;
/ y+ l5 J' s, ] - Error = int(nError*Kp+ErrorAcc+ErrorDec);
. c- ^) A+ u/ V - if(nError < 80 && nError > -80){
, A( D* K f# h - if(nPower < MaxPower){3 N' T1 ]1 t+ g' a* p2 y: i
- nPower += 3;
# C7 S, [. l S% {+ F8 @9 B - }
' F/ o7 C: f. B) @ - } else{
( [% g3 O: p- X# W - if(nPower > MinPower){
o4 K1 `( Z' }2 E+ ~6 L( T - nPower -= 2;
' {0 n* V( b3 I: Q* N7 u - }- M+ j. Q- Q" ]3 [" j; Z
- } ; `2 |5 ^; t, \, G! v" l9 U2 Y
- MotoL(nPower-Error);
# Y8 T$ C) m0 T$ ^ - MotoR(nPower+Error); 2 P4 i% K' K4 B5 y B
- }else{
& H6 U) {+ m3 R2 O' E4 M8 ^ - motor_9.run(0);& M m6 M# H/ l: J" s1 y2 g
- motor_10.run(0); n* {, S4 ^, |' X/ v8 f
- }
. ? w7 X; G, ` - do{}while(millis() - StartTime < interval);
! I% y$ Q& y- H7 ~* |6 r( E7 J - }
$ z- }3 X2 N1 g& g - 7 V" `/ { \2 b
- void MotoL(int Power){
4 z% s: Y' d/ A5 Z - if (Power > MaxSpeed){
: O: }* I& `+ @. B - Power = MaxSpeed;
( O2 T' i* s& W% T- [' l - } . {& ]4 ?9 S C2 r
- if (Power < -MaxSpeed){) \. ]/ H& p+ e/ k. \/ t
- Power = -MaxSpeed;
9 |3 K: e/ b. g, X4 w - } 7 R( J" N: y8 z2 P) }7 A
- motor_9.run(Power);
9 K8 c$ A( T/ y: H - } 5 x& W9 |( u& z9 l& W
$ K3 g b# Y/ N' }- void MotoR(int Power){
7 [4 Q( H8 C1 K w) t - if (Power > MaxSpeed){
. n5 e( y3 Z/ I- s: ?% J - Power = MaxSpeed;
: w \/ u2 j. z6 W8 @ - }
9 C0 v7 b/ l( t0 m% M$ ~# l - if (Power < -MaxSpeed){
: v6 ^& ^1 ^1 q& x$ ]7 N, v - Power = -MaxSpeed;+ Z1 G8 _- p& T/ {& v
- } . A9 {6 s& C, i/ n' [7 |% U& }
- motor_10.run(Power);
) {" `3 M8 t% ^& D: o - }
複製代碼
8 [* g/ S0 t8 Y& Y# ~3 O9 l: d, F; I$ l% q
|
|