|
- #include <Arduino.h>
- u# R- F* n; |+ \1 { - #include <Wire.h>! l, x! Y' c8 [5 ]
- #include <Servo.h>* t/ |& j( u/ g1 C4 F% x" l
$ @2 _: c! W, z0 q7 M- #include "MePort.h"
+ C! H" r* A" @9 Z - #include "MeUltrasonic.h"1 ~* C. G; D1 w
- #include "MeDCMotor.h"
0 o i# s3 I$ B! T( \# H - ( F: Z6 H1 C7 j! J$ I4 u$ P
- //double Input, Output ;
6 p( O# S# T/ K8 z& C$ h - float MaxSpeed = 255;% `$ E, H: H5 {+ o9 L# ?0 g" |
- float MaxPower = 180;
# D& N* G1 S' B1 h# }, Z* O - float MinPower = 120;
- B2 i" l* r$ A# [" @7 u, m - float Error,ErrorAcc,ErrorDec; `8 m* B1 W7 G+ ?$ Z2 Y% I! q8 H. W# _
- 4 j/ f3 U0 U( n9 {3 I! d, _- T7 Q
- float Kp=0.14;8 Z/ H4 d. C3 @5 i% K7 L
- float Kd=0.00020;//23;" c8 z+ R9 ^+ o& K( ^
- float Ki=0.000201;2 ?/ o- ~! \4 u& y0 y% T) `9 k
- ' c4 ^8 n! L# @: W
- float nPower; `, d# ~# g! x
- MePort lightsensor_6(6);2 F7 U: E1 O8 X- c# ]
- MePort lightsensor_8(8);0 @) o5 k3 b+ ^' S4 H$ @7 X: \( V
- MeDCMotor motor_9(9);
$ h d4 `' x) H d5 o" M - MeDCMotor motor_10(10);
* i3 {8 |1 {0 z: R2 O4 O0 ^0 G - unsigned long previousMillis = 0;
1 O, w- O/ N' O% q* ~2 M: | - const long interval = 1;% j4 M: U. b L+ [0 n* J
- ; q5 w1 t8 c: ~* k
- void setup(){1 u7 d6 n8 ]9 O; L% L0 F
- lightsensor_6.dWrite1(1);* M/ Y4 q+ G* G
- nPower = 160;
% t- u- ?# K$ ~4 `* U& e5 i - Error=0;
7 l1 d& N, k' R ~; e - ErrorAcc=0;
- t9 i* D3 X& h' F - }
4 O* V& _: O% f
/ o& @# ^7 ^* _9 E, Y( S& ?2 d- void loop(){3 `: P& a, R" w
- unsigned long StartTime = millis();
" q( L( w$ e& w! c- C* R, Y' H - if(ErrorAcc < 18000 && ErrorAcc > -18000){5 _# i" |! U3 P+ q Q- o
- float nError = lightsensor_6.aRead2() - lightsensor_8.aRead2();
* e2 M2 w5 u! r" l6 L - ErrorAcc += nError*Kd ;
; R' ~, `1 h$ z! ]1 k* E - ErrorDec -= nError*Ki ;! W/ }( G; N7 ?/ B; i
- Error = int(nError*Kp+ErrorAcc+ErrorDec);
# `) p" w) j3 X. K1 r( ] - if(nError < 80 && nError > -80){
2 f2 ^' d# c$ I, s$ E) s% T& I( A - if(nPower < MaxPower){
" k3 H3 S: S. P$ O& f+ @ - nPower += 3;
; p. z3 p* R ?& S" r - }
) e. t2 L. J( h! {, S' s" d: T" E7 x - } else{3 c1 ~0 \* B2 C- e* V% Y+ a
- if(nPower > MinPower){
) \8 s) b, f! q, j - nPower -= 2;
4 ~* F. c0 r) ` k% z - }
2 q. @6 [, Y( w _, [, J - }
+ a% V* q) K/ g9 p - MotoL(nPower-Error);
9 t+ U( M4 n0 @' k4 a% r - MotoR(nPower+Error); 7 ^; s% r. u) J: I
- }else{/ t( Y9 ~* B+ N5 P/ n+ o
- motor_9.run(0);
# d9 v9 U7 {$ n- U - motor_10.run(0);+ J+ @, l& ]! L% H/ S1 |
- }
) i; f. V; f1 e% @& G - do{}while(millis() - StartTime < interval);% |7 Q8 G r" t- G1 r
- }
. i: S' N5 ` q3 X3 u8 o: K - 2 Q9 C5 z# R. A* r& s9 A: D
- void MotoL(int Power){
4 |7 G) {: u; ^3 P - if (Power > MaxSpeed){+ n. h# P* u# E) ]
- Power = MaxSpeed;0 e0 l& o& K8 b
- } , @! N; d1 d4 f# j
- if (Power < -MaxSpeed){5 F. _* f7 f7 i" C. J+ X
- Power = -MaxSpeed;
N$ ]) m- G3 N - } 7 ?' m m7 A: a9 e, h8 r* `6 R6 C- \
- motor_9.run(Power);
; A3 `; {% {9 e& i3 g9 f - }
: O# x T- ~; C% K
) u9 |& A/ ?% {* P4 `, O R+ L/ }- void MotoR(int Power){, r/ ^+ q$ N' Q
- if (Power > MaxSpeed){% w8 Y$ l5 _7 g
- Power = MaxSpeed;
: L8 h! q+ j& M6 k: |/ ]9 n5 [ - }
; U6 m* U6 |& l% h - if (Power < -MaxSpeed){
6 w3 ?$ u' m* H2 e - Power = -MaxSpeed;
. j `+ t/ E) A. O7 a - }
4 o0 G; u$ S& W - motor_10.run(Power);
2 H5 T2 u* @1 F( ^ - }
複製代碼
+ i# V" X" o; q' _% s2 P3 |
. y6 k P% \" E, k# b0 N8 H$ j) k |
|