|
|
- #include <Arduino.h>
* p+ ?8 [! i W4 z$ d - #include <Wire.h>: }3 `* X1 O* S5 }. A) m6 O
- #include <Servo.h>
! \6 z, C2 a) H) J/ x# @
( C: c$ s& T$ B- h- #include "MePort.h"5 R$ O1 a& j' n: @% ]7 c
- #include "MeUltrasonic.h"( ^1 Y1 ?" t1 Y) A( b
- #include "MeDCMotor.h"# f; B( E M( |' i- G9 ?" ~) ?3 d
4 z. h) E N8 Q7 S3 [" p- //double Input, Output ;
0 \9 G0 R1 p2 m2 p. V0 T - float MaxSpeed = 255;6 j- h5 y7 H0 y( X/ N2 P
- float MaxPower = 180;4 d0 h) l9 Z4 O* D$ q
- float MinPower = 120;# ?. x- ]6 g8 E
- float Error,ErrorAcc,ErrorDec;8 m, m1 _. E8 h+ J9 I" G
- 7 k5 w5 L# g. f
- float Kp=0.14;
6 S1 ]+ z5 ?. r g! d - float Kd=0.00020;//23;5 O: q; }; o# Y" {( V& d g
- float Ki=0.000201;4 s+ g# [) \. V# l
: a. H* i) [6 E& N6 m0 ~9 \$ j- ]- float nPower;
; h5 @5 |( Z* g. y$ _4 `" n - MePort lightsensor_6(6);
: z# m' g: \: ~" N' d2 i - MePort lightsensor_8(8);
; O3 A1 R, b0 p1 c0 I, o$ p - MeDCMotor motor_9(9);
. z) R% n" x% w, Y, C* {5 V - MeDCMotor motor_10(10);
9 w# J: i$ F8 E! Z k; d5 R% E - unsigned long previousMillis = 0;
2 A9 v3 m9 t7 g: x$ G: \ - const long interval = 1;
' v/ `2 }# R k/ ~5 ? - G2 L* _" V7 o& _( l3 w
- void setup(){8 ]& n8 |7 l% ~+ J
- lightsensor_6.dWrite1(1);4 l8 h" |% n4 ~' z
- nPower = 160;& O' ^ K& a3 i% S4 l
- Error=0;$ z" V! q: a" g* q q
- ErrorAcc=0;
# l* u% Y. S" W- ^' w& K - }! P' z/ |! g, r0 W! R
" F; ?! h7 d8 i- void loop(){% U5 E1 j' `! W8 P* }% `
- unsigned long StartTime = millis();
+ B; _% E2 y' E - if(ErrorAcc < 18000 && ErrorAcc > -18000){& a$ j0 ]0 M, r5 B
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();' p: v- ^ u) D' Y; j6 l
- ErrorAcc += nError*Kd ;: `/ `, k- r3 R/ }2 Y; X: |
- ErrorDec -= nError*Ki ;, W1 x( E7 R ?) k8 h# I
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
9 A0 p# z6 Y5 y, H8 J9 e - if(nError < 80 && nError > -80){
; o2 H5 q3 g+ ^* ?! o Z - if(nPower < MaxPower){
1 J# @( p D- s3 h* Q, p - nPower += 3;# K5 w8 K( t: M: V$ E% ?0 O* p' O
- }
: w4 K. k! B& } p2 @$ g: m - } else{5 B+ |% Q% l- b. R' q+ k+ ]% K6 b
- if(nPower > MinPower){/ p* T- a4 n5 S5 C* x
- nPower -= 2;$ e- K, }4 A" N$ Y
- }( c- R4 h: X7 X; s: c
- }
0 M! Z" l3 i! u) V9 P/ v0 H - MotoL(nPower-Error);
& e- r( h( m/ O$ t - MotoR(nPower+Error);
1 D6 R. i8 [$ G5 J$ L4 }/ p - }else{
' E$ W% N) f( x0 b5 x5 S - motor_9.run(0);
% A. ^5 C/ A( m( C8 G - motor_10.run(0);4 n7 k9 d* X. x: ?1 x8 r2 t8 O
- }
- B* [+ J; C7 U2 v - do{}while(millis() - StartTime < interval);: D! q6 [$ [2 S2 B$ m
- }3 q$ W* @+ M& u5 K7 M9 x
9 }. P; A& R9 Y, M& @- void MotoL(int Power){0 {6 t. j% j& Y* @
- if (Power > MaxSpeed){
" m+ e, x0 t, H' O% u - Power = MaxSpeed;' L1 ?( z7 E# l5 m* c
- }
3 o0 _3 Z. ~8 Y- Q2 w( j+ h - if (Power < -MaxSpeed){* f- T! L5 Z4 S
- Power = -MaxSpeed;/ N4 W: p/ a7 |3 a$ o( N: I. m, L' s
- }
7 m0 l2 Z' w$ _8 P* K; U% I; u - motor_9.run(Power);
/ u. t) T6 T& ]; t0 u, i - }
7 Q3 |6 ~: O: ~$ M$ v7 u
% C& L* i" M4 c8 N0 @6 M- void MotoR(int Power){
0 ~( V$ O; m# Q, H - if (Power > MaxSpeed){$ H- r) w8 \( I8 x, m* Z# Y) z0 i5 c
- Power = MaxSpeed;
8 h& m: f+ Y3 b0 L: o. O, p - } ( m ]* ~5 K ~3 }
- if (Power < -MaxSpeed){7 c4 D7 c8 S+ i$ v. E
- Power = -MaxSpeed;. e, ~3 S! I% h8 r; F+ x8 N7 a
- }
9 s2 m9 N1 j9 j# Q- [ e - motor_10.run(Power);
+ T& v ~+ k o* k1 [ - }
複製代碼
- W3 O/ Y$ @& v7 O
: w& r+ n2 K" L$ b$ D0 A9 r |
|