|
|
- #include <Arduino.h>
9 l$ d- ~+ Y) R3 l - #include <Wire.h>
) f- |9 d' b3 P. x1 C+ @' c) W, g Y - #include <Servo.h>& J% m& ]) s U, R* I- x
- $ A4 ~1 k( Q4 }, V
- #include "MePort.h"3 t3 b+ {. M p$ g+ J7 i* V2 s- `
- #include "MeUltrasonic.h"+ r4 f! g9 f9 M) C
- #include "MeDCMotor.h"
! y( z% w. w7 i( N* Z. R" b3 c
5 S0 l, ]( x6 d4 A" x- //double Input, Output ;, M+ ^# `4 z1 L9 `+ s1 M# v
- float MaxSpeed = 255;$ p q5 y* c+ U# p4 n* X6 i7 D
- float MaxPower = 180;& b6 Q5 \$ F! ?/ @4 Y
- float MinPower = 120;; v8 e4 E$ t1 J: M
- float Error,ErrorAcc,ErrorDec;
* M2 S3 ~! w% C2 t' d
* R0 Z G) `0 s1 r* Z- float Kp=0.14;0 {0 x! G) A) b# A) v" e, w6 g
- float Kd=0.00020;//23;
" n" f8 w: T# n/ a5 Z, ^% u - float Ki=0.000201;* w4 Y9 [- s3 [1 C1 X- `9 A
- |6 X3 Q+ M0 V- float nPower;: a, q- G8 l; a. B o* n
- MePort lightsensor_6(6);
. q% H! b; s2 S% X9 F - MePort lightsensor_8(8);1 A; J8 ]; f" k' H4 I
- MeDCMotor motor_9(9);- v, ]. E( e: V; D, F
- MeDCMotor motor_10(10);
- Z# F: \ q) } - unsigned long previousMillis = 0;
. L$ ^0 o- G: a6 l - const long interval = 1;: U& C) z( A0 ~0 k' P& W
% z$ t6 B3 Q. B) }# j- void setup(){
" F, `1 q$ z+ c# S# w# \; a - lightsensor_6.dWrite1(1);* D0 Y* f& J7 d3 ^0 {
- nPower = 160;
& T3 q& r2 b/ J2 @ - Error=0;1 E. y+ K, D1 O2 d2 T V: a
- ErrorAcc=0;
+ w9 S7 f/ l5 r5 p, ?/ ?3 y6 | - }# `9 o/ X6 G5 B& g j6 o
- - z2 S% O+ ]3 b! Q$ ]
- void loop(){: w. K6 \% D8 T! Q9 Z; G
- unsigned long StartTime = millis();! f" X0 Q6 Q& V$ [
- if(ErrorAcc < 18000 && ErrorAcc > -18000){% G, x3 ~! X8 e
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();( C) n, O, V P( Y6 T4 b8 j7 k
- ErrorAcc += nError*Kd ;
: S! ~% g5 l5 H' R* ~ - ErrorDec -= nError*Ki ;# O3 v: [- E$ H; r' E/ ], m
- Error = int(nError*Kp+ErrorAcc+ErrorDec);' U: A E8 E# P$ @% W( P
- if(nError < 80 && nError > -80){1 v6 K0 r1 a1 s. |
- if(nPower < MaxPower){$ [9 c9 N$ c, Z/ D7 h n! K
- nPower += 3;
5 B, b2 E `( A b - }
, m. [" u; F. S" g ` - } else{0 ^7 E- k' l+ H3 a+ ^; E ^
- if(nPower > MinPower){" T0 F9 Q3 ~% U; ^% b1 p) @
- nPower -= 2;0 ]4 x4 _+ X! D0 X
- }
- g( G- q! }" C* Y% h - } : H& t4 ?+ w( h2 X) J
- MotoL(nPower-Error);9 e7 X- x% j: `
- MotoR(nPower+Error);
8 g- n/ \6 h6 L% t7 {" R - }else{8 F2 `( K' b0 f* ?6 Q" G
- motor_9.run(0);
. b4 g, `3 l4 w' [5 } - motor_10.run(0);3 d6 l4 {6 k- v3 n
- }
0 Q2 r6 q( z# Q+ F3 k9 E H: o - do{}while(millis() - StartTime < interval);
1 B$ j; w+ P/ s7 U1 j# @& g - }
9 H! u' g% q' Y4 F6 R
0 r% x% R' K; D1 x4 s U5 g$ q' q- void MotoL(int Power){- Z9 T5 q. w+ z' z/ a
- if (Power > MaxSpeed){ k6 Y1 ~2 j7 c, g& G. E' V& `
- Power = MaxSpeed;; J( D: ?3 X9 y2 D, \
- } : M5 q7 A* c) d0 ^# v, Z) m
- if (Power < -MaxSpeed){# C- j- G" ~; k7 l7 r$ @
- Power = -MaxSpeed;
}1 p1 F/ B- f2 y5 i* \9 W3 K2 h - }
' e5 V! A: r0 o1 v' I: t5 [0 h - motor_9.run(Power);. R# _0 J- K6 J7 w
- }
& D3 L5 S1 M8 M7 N# A - 1 p K2 W7 E: A$ }+ j1 o
- void MotoR(int Power){
; i' q s9 v8 H1 h- y7 b4 y - if (Power > MaxSpeed){' L1 C5 G9 r8 O# ~, s
- Power = MaxSpeed;6 M# D( I+ O2 Y% ?. M- y3 i, s
- } * ?3 h+ A8 U+ d, F5 t1 l
- if (Power < -MaxSpeed){ i* D, I/ j9 S: _$ u1 w$ O- _! }
- Power = -MaxSpeed;8 X4 @* y; u1 p' W
- } $ Z, G k; m5 A S S4 ` o& G
- motor_10.run(Power);8 `+ |) x- F0 K; ?* E; p; F; r
- }
複製代碼
3 f/ _: F1 @* H
9 T, k! H' W0 Q8 ~5 m. d# \* z |
|