|
- #include <Arduino.h>3 [& w6 w; e1 e3 L3 q$ z$ W4 H* d
- #include <Wire.h>. R, P" ~+ B5 V) F5 K, I* g) c
- #include <Servo.h>; C+ ]5 a" V1 N$ l
7 m" }- i4 t) z7 c- #include "MePort.h"
T. G/ H2 Y9 z8 N) S# c# L' H - #include "MeUltrasonic.h"$ _7 |5 z+ M D1 @" N1 A+ I
- #include "MeDCMotor.h"& P( M' c, l) j
/ K/ ~5 t$ ~: Q* F6 O- //double Input, Output ;
3 p, T( E: }, w/ i- v - float MaxSpeed = 255;
$ {& U' b H& ?# P$ n2 t - float MaxPower = 180;
0 s, v0 O, `% V9 Y8 b - float MinPower = 120;& Z7 x8 b$ j F9 D5 a' o
- float Error,ErrorAcc,ErrorDec;
5 j& `' [& p5 @4 G y - % `9 \* j6 ]/ f8 N! B8 R
- float Kp=0.14;
6 s6 D6 h7 S+ ?, l - float Kd=0.00020;//23;
% d1 O' Z3 o' i8 F. w* X" c' v - float Ki=0.000201;
$ n9 N8 k$ ?+ P- \( y
* t0 ^" J* R, _/ W* V5 _+ L: i4 I, M- float nPower; U9 G4 h+ d' R Y/ _* d
- MePort lightsensor_6(6);
! S3 D% z4 u, M" f( P- C - MePort lightsensor_8(8);' {+ Y8 O+ L) z. W/ \6 |
- MeDCMotor motor_9(9);0 j- \- B) v9 ]% k: Q, {6 ^
- MeDCMotor motor_10(10);$ c# `1 \" Z5 g# E$ W3 f
- unsigned long previousMillis = 0;
( g9 f1 g5 g" c2 s O - const long interval = 1;
% {9 y/ _' _" Z3 B! S- n2 U; Z - ( B( Y* ]7 y" d/ r5 ]$ F9 R3 b
- void setup(){
# V p7 [5 r% d; e! @' F# w - lightsensor_6.dWrite1(1);
+ q, [: A3 t- c) K- @* h - nPower = 160; T5 E$ e0 R+ S. T6 Q
- Error=0;: L% y7 k' L+ ?6 ^6 l
- ErrorAcc=0; B/ _8 j+ I" W5 M3 k
- }: z# F5 j2 _# C. h- t1 W6 S
: h! j0 Y1 e3 t5 ?9 N9 Y) F- void loop(){; \1 h; p7 `1 [1 A
- unsigned long StartTime = millis();: ^- r* C* T2 [4 I8 x
- if(ErrorAcc < 18000 && ErrorAcc > -18000){
n6 e9 Z& [1 b2 o; R, C4 c - float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
$ w9 Z/ Z. w# D7 w0 I1 Q% z - ErrorAcc += nError*Kd ;
: }' M+ v3 x3 E, l - ErrorDec -= nError*Ki ;
& P( ?: O6 N' ~( {$ Z - Error = int(nError*Kp+ErrorAcc+ErrorDec);
3 s9 A# B9 j$ c - if(nError < 80 && nError > -80){( g" |5 k) B0 P1 \& N
- if(nPower < MaxPower){
& t4 g' w9 ^, i& A' P4 H - nPower += 3;8 s2 C& T# ]+ W' f( p* `
- }
% [0 M6 q2 P3 u2 @6 M9 r9 B! E - } else{
5 s* n) [# q, e& F% j - if(nPower > MinPower){
, J/ [% }4 w: k( Y7 T - nPower -= 2;
7 D, J, x3 w* i$ k9 e0 G1 w4 o5 X& D - }: a" c# {, K; l! O- p7 I2 e
- } % J# h- y- B- S8 Y. D' `, {
- MotoL(nPower-Error);' L# ~0 q6 ^# q( c0 B$ h
- MotoR(nPower+Error); ) L, w m7 u G
- }else{! G" b" d' i' J" X/ L
- motor_9.run(0);
- j U: t% J3 d; B8 @6 U - motor_10.run(0);# D; {! h: L; L$ `* C
- }: x; U' D* V6 C
- do{}while(millis() - StartTime < interval);6 w6 m2 I- W0 Q
- }/ F3 f% Q! X8 V& j2 B7 e
- # ~9 i+ [. Q$ h. L
- void MotoL(int Power){
- N3 ]3 z" I2 V; B% q+ y. d - if (Power > MaxSpeed){
; I+ f6 v9 Q* y - Power = MaxSpeed;
* N' _% K4 _2 i; ^ - } ( P! V: m3 B0 @9 {1 ]
- if (Power < -MaxSpeed){: v5 l) B% G2 \& P" V
- Power = -MaxSpeed;& h1 `, p/ u% q" l- }& u
- } 0 `4 z! d* n* l& w' G, J
- motor_9.run(Power);
7 x5 J& g0 W8 B F- i: N% o - } 5 ]: d1 t; T |. D8 ? r% q: q
/ y* N3 I" J7 i/ ~+ i2 h( c- void MotoR(int Power){
3 `' u) q& Y8 Z# B+ [ - if (Power > MaxSpeed){
9 v1 q/ J* G, S- W - Power = MaxSpeed;
' `0 b$ j+ Q0 w; }0 Q - } 0 e6 b2 G! l. c! i2 q
- if (Power < -MaxSpeed){) U6 R& Q' U& L% V
- Power = -MaxSpeed;
$ v4 s, y& J4 T6 ]4 I - }
% w! T* Z# w/ y, c* B) n* x0 [1 ~ - motor_10.run(Power);
H* W- l. v2 q - }
複製代碼
2 J, q) A7 t; o- d- d+ ?: _3 C4 z6 H X5 g
|
|